Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2010, 23:10   #1
littlecoder
Пользователь
 
Аватар для littlecoder
 
Регистрация: 01.11.2008
Сообщений: 51
Вопрос Массив структур - сортировка на C#(мини бд)

Здраствуйте.
Сейчас пишу програмку(консоль-приложение): суть ее в том ,что с помощью структур, я как бы создаю бд(которую вводит пользователь), потом вызываеться меню, и пользователь говорит как сортировать эту бд(массив структур) : вот мои наработки:
Код:
class Program
    {
        static void Write(string n, double c, double o)
        {
            Console.Write("{0}          {1}грн   {2}куб.м\n", n, c, o);
        }

        struct Oil
        {
            public double cena;
            public double V;
            public string nazv;
        }
        static int Menu()
        {
            Console.Write("Меню\nДля сортировки по Названию введите 1\nДля сортировки по Цене введите 2\nДля сортировки по Обьему введите 3\nДля выхода введите 4\n");
            int o = Convert.ToInt32(Console.ReadLine());
            int p;
            if (o == 1 || o == 2 || o == 3 || o==4)
                p = o;
            else
            {
                Console.WriteLine("Для использования программs нужны знания 1-го класса, изучите сначала букварь , а не юзайте какие-нибудь Программы :).");
                p=3;
            }
            return p;
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Идет загрузка приложения , подождите пожалуйста :)\nЗагрузка произошла удачно !\nВведите данные в формате : \nНазвание (Ентер) Цена (Ентер) Обьем (Ентер). \nДля каждого горючего!\nВведите размер бд:");
            int k = Convert.ToInt32(Console.ReadLine());
            // Алгоритм заполнения данных БД(структуры). Ввод названия, цены, обьема .
            Oil[] st = new Oil[k];
            double c;
            for (int i = 0; i < k;i++ )
            {
                Console.WriteLine("Введите данные для {0} горючего:",i+1);
                st[i].nazv = Console.ReadLine();
                c = 0;
                c = Convert.ToDouble(Console.ReadLine());
                if (c>=0)
                    st[i].cena = c;
                else
                    st[i].cena = 198.7;
                c = 0;
                c = Convert.ToDouble(Console.ReadLine());
                if (c>=0)
                    st[i].V = c;
                else
                    st[i].V = 1000;
            }
            //Алгоритм заполнения бд завершен, далее идет вывод бд(структыры с значениями свойств) в консоль.
            Console.Write("Название:  Цена:  Обьем:\n");
            for (int i = 0; i < k; i++)
            {
                Write(st[i].nazv, st[i].cena, st[i].V);
            }
            //Запускаем пользовательський интерфейс
            int[] index = new int[k];
            switch(Menu())
            {
                case 1:
                    {
                    }
                    break;
                case 2:
                    {
                        for (int i = 0; i < k; i++)
                        {

                            for (int j = i; j < k; j++)
                            {
                                if (st[i].cena < st[j].cena)
                                {
                                    index[i] = j;
                                }
                            }
                        }
                        for (int i = 0; i < k; i++)
                        {
                            Console.WriteLine(index[i]);
                        }
                        Console.Write("Название:  Цена:  Обьем:\n");
                        for (int i = 0; i < k; i++)
                        {
                            Write(st[index[i]].nazv, st[index[i]].cena, st[index[i]].V);
                        }
                    }

                    break;
                case 3:
                    {
                        double min;
                        for (int i = 0; i < k; i++)
                        {
                            min = st[i].cena;
                            for (int j = i; j < k; j++)
                            {
                                if (min > st[j].cena)
                                {
                                    index[i] = j;
                                    min = st[j].cena;
                                }
                            }
                        }
                        Console.Write("Название:  Цена:  Обьем:\n");
                        for (int i = 0; i < k; i++)
                        {
                            Write(st[index[i]].nazv, st[index[i]].cena, st[index[i]].V);
                        }
                    }

                    break;
                case 4:
                    {
                        return;
                    }
                     break;
                default:
                    return;
            }
            Console.ReadLine();
        }
    }
Самый лучший компьютер, к тому же единственный, который можно производить в большом количестве с помощью неквалифицированного труда, — это человек.
littlecoder вне форума Ответить с цитированием
Старый 01.03.2010, 23:12   #2
littlecoder
Пользователь
 
Аватар для littlecoder
 
Регистрация: 01.11.2008
Сообщений: 51
По умолчанию

То на чем я застряг и не могу продвинуться -
Код:
                case 2:
                    {
                        for (int i = 0; i < k; i++)
                        {

                            for (int j = i; j < k; j++)
                            {
                                if (st[i].cena < st[j].cena)
                                {
                                    index[i] = j;
                                }
                            }
                        }
                        for (int i = 0; i < k; i++)
                        {
                            Console.WriteLine(index[i]);
                        }
                        Console.Write("Название:  Цена:  Обьем:\n");
                        for (int i = 0; i < k; i++)
                        {
                            Write(st[index[i]].nazv, st[index[i]].cena, st[index[i]].V);
                        }
                    }

                    break;
Тоисть в интовый массив index должны заганяться значение елеминтов структуры по убыванию.
Зарание благодарен любом у совету или подсказке. Спасибо !
Самый лучший компьютер, к тому же единственный, который можно производить в большом количестве с помощью неквалифицированного труда, — это человек.
littlecoder вне форума Ответить с цитированием
Старый 02.03.2010, 09:01   #3
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Код:
for (int i = 0; i < k; i++)
                        {

                            for (int j = i; j < k; j++)
                            {
                                if (st[i].cena < st[j].cena)
                                {
                                    Здесь тебе надо завести элемент структуры temp,
                                    и скопировать (например ) temp=st[i];(ну или построчно всю структуру)
                                    st[i]=st[j];
                                    st[j]=temp;
                                }
                            }
                        }
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 02.03.2010, 11:22   #4
littlecoder
Пользователь
 
Аватар для littlecoder
 
Регистрация: 01.11.2008
Сообщений: 51
По умолчанию

Спасибо. ПРоблему -решил(немножко по другому)
Тема закрыта.
Самый лучший компьютер, к тому же единственный, который можно производить в большом количестве с помощью неквалифицированного труда, — это человек.
littlecoder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си : сортировка массива структур Чубрик Общие вопросы C/C++ 5 23.01.2010 22:02
массив структур Help_me_please Помощь студентам 3 16.01.2010 02:19
Массив структур MLV Общие вопросы C/C++ 6 08.12.2009 20:44
Сортировка массива структур. nec117 Общие вопросы C/C++ 5 22.02.2009 18:01
Сортировка массива структур arturka Помощь студентам 1 21.06.2008 14:15