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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2013, 14:57   #1
V0L40K_21
Пользователь
 
Регистрация: 24.01.2012
Сообщений: 30
По умолчанию Массивы в C#

Задача. Дан одномерный массив из 30 элементов. Сформировать второй массив, в котором сначала идут все элементы первого массива, кратные 5, а затем все остальные.
Вот что я смог сделать. Помогите завершить.


Код:
            int j = 0, i = 0;
            Random r = new Random();
            int[] a = new int[31];
            int[] b = new int[31];
            for (i = 0; i < 31; i++)
            {
                a[i] = r.Next(50);
                Console.WriteLine(i + ". " + a[i]);
                if ((a[i] % 5) == 0)
                {
                    b[j] = a[i];
                    j++;                    
                }
                else
                {
                    
                }
                Console.WriteLine(". " + b[j]);
            }
            Console.ReadLine();



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 07.02.2013 в 15:18.
V0L40K_21 вне форума Ответить с цитированием
Старый 07.02.2013, 15:28   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так пойдёт?

Код:
            const int N = 30;

            int i;
            Random r = new Random();
            int[] a = new int[N];
            int[] b = new int[N];

            // заполним массив случайными числами (одновременно выводим их на экран)
            Console.WriteLine("Массив A: ");
            for (i = 0; i < N; i++)
            {
                a[i] = r.Next(50);
                Console.WriteLine("{0}. {1}", i, a[i]);
            }

            // первый проход по массиву a - переносим 
            //    в массив b все числа, которые делятся на 5
            int j = 0;
            for (i = 0; i < N; i++)
            {
                if ((a[i] % 5) == 0)
                {
                    b[j] = a[i];
                    j++;
                }
            }

            // первый проход по массиву a - переносим 
            //    в массив b все числа, которые не делятся на 5
            for (i = 0; i < N; i++)
            {
                if ((a[i] % 5) != 0)
                {
                    b[j] = a[i];
                    j++;
                }
            }

            // выведем содержимое массива b на экран
            Console.WriteLine("Массив B: ");
            for (i = 0; i < N; i++)
                Console.Write("{0}  ", b[i]);
            Console.WriteLine();


            Console.ReadLine();
если задача сохранить порядок следования чисел такой же, как и в массиве A, не стоит - тогда можно перенос чисел в один проход сделать...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.02.2013, 15:29   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
            int[] a = new int[...];
            int[] b = new int[.];
            for(...){наполняем b}
            //присоединяем сначала кратные пяти
            a.Concat(b.Where(v=>v%5==0));
            // потом остальные
            a.Concat(b.Where(v => v % 5 != 0));
Подходит идея?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.02.2013, 15:59   #4
V0L40K_21
Пользователь
 
Регистрация: 24.01.2012
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
            int[] a = new int[...];
            int[] b = new int[.];
            for(...){наполняем b}
            //присоединяем сначала кратные пяти
            a.Concat(b.Where(v=>v%5==0));
            // потом остальные
            a.Concat(b.Where(v => v % 5 != 0));
Подходит идея?
Замудрено, такого не проходили))
V0L40K_21 вне форума Ответить с цитированием
Старый 07.02.2013, 16:12   #5
V0L40K_21
Пользователь
 
Регистрация: 24.01.2012
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
так пойдёт?
выводит первый массив из 29 элементов...массив Б не выводит говорит что индекс находится вне границ массива, Проверь пожалуйста. А за "CODE" "/CODE" учту)

Последний раз редактировалось V0L40K_21; 07.02.2013 в 21:20.
V0L40K_21 вне форума Ответить с цитированием
Старый 07.02.2013, 16:59   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
такого не проходили))
Жаль. Хорошая технология.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.02.2013, 21:18   #7
V0L40K_21
Пользователь
 
Регистрация: 24.01.2012
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Хорошая технология.
Поясни пожалуйста что представляет собой "v" после слова where
V0L40K_21 вне форума Ответить с цитированием
Старый 08.02.2013, 00:13   #8
V0L40K_21
Пользователь
 
Регистрация: 24.01.2012
Сообщений: 30
Счастье

Всем спасибо! проблема решена, тему можно закрывать... Кому интересно - вот решение
Код:
int n = 31;
            int i = 1, j = 1, kol = 0;
            Random r = new Random();
            int[] a = new int[n];
            int[] b = new int[n];

            Console.WriteLine("Первый массив: \n");
            
            for (i = 1; i < n; i++)
            {
                a[i] = r.Next(50);
                Console.WriteLine("{0}. {1}", i, a[i]);
                if ((a[i] % 5) == 0)
                    kol++;
            }
            
            Console.WriteLine();
            Console.WriteLine("Второй массив: \n");
            Console.WriteLine("Кратные 5-ти: {0}\n", kol);
            for (i = 1; i < n; i++)
            {
                if ((a[i] % 5) == 0)
                {
                    for (j = 1; j <= kol; j++)
                    {
                        b[j] = a[i];
                        Console.WriteLine("{0}. {1}", i, b[j]); break;
                    }
                }
            }
            Console.WriteLine();
            Console.WriteLine("Некратные 5-ти: {0}\n", 30-kol);
            for (i = 1; i < n; i++)
            {
                if ((a[i] % 5) != 0)
                {
                    for (j = kol+1; j < n; j++)
                    {
                        b[j] = a[i];
                        Console.WriteLine("{0}. {1}", i, b[j]); break;
                    }
                }
            }               
            Console.ReadLine();
V0L40K_21 вне форума Ответить с цитированием
Старый 08.02.2013, 09:08   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а я бы у Вас такое решение не принял! дело в том, что массивы индексируются (нумеруются) от нуля. А Вы нулевые элементы игнорируете, используете, начиная с первого... Это ничем необосновано -> ошибка.

впрочем, в остальном, всё нормально (узнаю кусочки знакомого мне кода... )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.02.2013, 09:19   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что представляет собой "v"
Ну это буква одного из алфавитов. В данном случае латиницы.
А вот выражение Where(v => v % 5 != 0) говорит о том что нужно сделать отбор из массива по некому условию. Каждый элемент массива будет фигурировать в этом условии посредством некой переменной (в данном случае v) для прохождения отбора.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерные массивы, двумерные массивы, строки Sand093 C++ Builder 11 20.05.2012 21:48
Двумерные массивы(матрица) 2)Строковые массивы(строки): 3)Структуры nuriyat Помощь студентам 1 21.01.2012 16:16
Двумерные массивы(массивы указателей на массивы) krytishka99 Помощь студентам 1 29.12.2011 19:51
указатели на массивы и массивы указателей blacktener Общие вопросы C/C++ 16 13.06.2011 20:45
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12