Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 09.12.2019
Сообщений: 5
1

Заполнение массива значениями из другого массива

09.12.2019, 05:07. Показов 5575. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Стоит задача записать в двумерный массив значения из одномерного массива в рандомном порядке,без повторений.
В программировании я полный профан поэтому придумать смогла только вот это вот, но значения записанные в окончательную таблицу все равно повторяются.
Пожалуйста помогите.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
 
namespace LabOne{
    class MainClass{
        public static void Main(string[] args){
 
            Random rand = new Random();//генератор случайных чисел   
 
            char[,] table1 = new char[6,6];
            char[] teamp = new char[36];//создаем временный массив на 36 символов куда записываем весь алфовит по порядку
           
            char ch;
            int n = 0;
 
            for (int i = 1072; i <= 1103; i++)//заполнение массива русскими буквами по порядку
            {
                ch = System.Convert.ToChar(i);
                teamp[n] = ch;
                n++;
            }
 
            teamp[32] = ' ';
            teamp[33] = '.';
            teamp[34] = ',';
            teamp[35] = '-';
 
//заполнение массивов рандомно
            int ca=0;
            
            int randomChar = -1;//т.к. номер массива положительное число и генерируем мы только положительные числа
            for(int i=0;i<6;i++){
                for(int j=0;j<6;j++){
                    ca = rand.Next(teamp.Length);
                    while(ca == randomChar){//Проверка чтобы в таблицу небыли записаны одинаковые символы
                        ca = rand.Next(teamp.Length);
                    }
                    table1[i,j] = teamp[ca];
                    randomChar=ca;
                }
            }
 
            Console.ReadKey();
        }
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.12.2019, 05:07
Ответы с готовыми решениями:

Заполнение массива значениями
Камрады, есть еще одна задача. в массив int month = new int надо с помощью цикла for внести...

Заполнение массива значениями автомобильных номеров
Подскажите пожалуйста, как организовать цикл, который сможет по порядку начиная от A000AA, A001AA,...

Заполнение массива значениями членов ряда Тейлора
Конструктор , заполняющий заданное в его параметре количество элементов массива значениями членов...

Заполнение одного столбца во всех строках значениями из массива
Добрый день. В общем-то то, что мне нужно, описано в заголовке темы, есть массив, который...

6
14 / 11 / 3
Регистрация: 16.10.2019
Сообщений: 95
09.12.2019, 06:40 2
Моя жалкая попытка
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
        static void Main(string[] args)
        {
            Random rand = new Random();//генератор случайных чисел   
 
            char[,] table1 = new char[6, 6];
            char[] teamp = new char[36];//создаем временный массив на 36 символов куда записываем весь алфовит по порядку
 
            char ch;
            int n = 0;
 
            for (int i = 1072; i <= 1103; i++)//заполнение массива русскими буквами по порядку
            {
                ch = System.Convert.ToChar(i);
                teamp[n] = ch;
                n++;
            }
 
            teamp[32] = ' ';
            teamp[33] = '.';
            teamp[34] = ',';
            teamp[35] = '-';
 
            //   посмотрел, что у вас получилось
            for(int i=0;i<teamp.Length; i++)
            {
                Console.WriteLine(teamp[i]);
            }
 
 
            char chr = '?';     //  Этого символа точно нет в вашем списке 
            int count;
            for (int i = 0; i < 6; i++)
            {
                for(int j = 0; j < 6; j++)
                {
                    count = rand.Next(36);
                    if (teamp[count] != chr)
                    {
                        table1[i, j] = teamp[count];
                        teamp[count] = chr;
                    }
                    else
                        j--;   // при неудачном результате откладываем завершение цикла на 1
                }
            }
 
            
 
            //   Пора посмотреть, что получилось
            for (int i = 0; i < 6; i++)
            {
                for (int j = 0; j < 6; j++)
                {
                    Console.Write("    " + table1[i, j]);
                }
                Console.WriteLine();
            }
            Console.ReadKey();
        }
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
15904 / 11048 / 2859
Регистрация: 21.04.2018
Сообщений: 32,430
Записей в блоге: 2
09.12.2019, 07:04 3
Лучший ответ Сообщение было отмечено Kanella как решение

Решение

Kanella, не зная тем которые вы проходили, дать реализацию которую вы сможете сдать не могу.
Но покажу некоторые типовые приёмы которыми решаются подобные задачи.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Получение последовательности все элементов
// массива любой размерности
var chars = array.Cast<char>();
 
// Случайное перемешивание последовательности
var charsRandom = chars.OrderBy(ch => rand.Next());
 
// Получение последовательности из диапазона символов
var charsRange = Enumerable.Range(1072, 1103-1072+1).Select(i => Convert.ToChar(i));
 
// Соединение последовательностей
var charsConcat = charsRange.Concat(". ,-");
 
// Получение массива из последовательности
var chars array = charsConcat.ToArray();
Применяя эти методы можно выполнить вашу задачу следующим образом
C#
1
2
3
4
5
6
7
8
9
char[] teamp = Enumerable.Range(1072, 1103-1072+1)
                  .Select(i => Convert.ToChar(i))
                  .Concat(". ,-")
                  .OrderBy(ch => rand.Next())
                  .ToArray();
 
for(int i = 0; i < 6; i++)
for(int j = 0; j < 6; j++)
     table1[i, j] = teamp[i*6+j];
1
0 / 0 / 0
Регистрация: 09.12.2019
Сообщений: 5
09.12.2019, 16:50  [ТС] 4
Простите за глупый вопрос.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Enumerable.Range(1072, 1103-1072+1)
почему здесь мы выбираем такой диапазон?Я понимаю что это значения русских букв в UTF-8, мне непонятно почему 1103-1072+1.
И я правильно понимаю что в Select всегда используется лямбда выражение?
0
3564 / 2505 / 1174
Регистрация: 14.08.2016
Сообщений: 8,214
09.12.2019, 16:54 5
Элд Хасп, куда ё дел, злыдень?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
15904 / 11048 / 2859
Регистрация: 21.04.2018
Сообщений: 32,430
Записей в блоге: 2
09.12.2019, 17:38 6
Kanella, этот диапазон я взял из вашего кода.
Первый параметр в Range - начальное число, второй - длина последовательности.

В Select надо передавать функцию преобразования элемента последовательности.
Чаще всего она создаются лямбдой, чуть реже передают статический метод.
C#
1
2
//Получение массива целых чисел с консоли
int [] array = Console.ReadLine().Split().Select(int.Parse).ToArray();
Остальные способы используется крайне редко.

Добавлено через 1 минуту

Не по теме:

Diamante, вот такой я злой!


1
0 / 0 / 0
Регистрация: 09.12.2019
Сообщений: 5
09.12.2019, 23:52  [ТС] 7
Спасибо. Буду разбираться)
0
09.12.2019, 23:52
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.12.2019, 23:52
Помогаю со студенческими работами здесь

Заполнение одномерного массива средними значениями другого массива
Как в маткаде заполнить одномерный массив средними значениями другого двумерного массива?

Не получается создать файл, сохранением массива в файле и заполнение массива значениями из файла
Здравствуйте. Я уже второй день пытаюсь решить проблему с созданием файла, сохранением массива в...

Заполнение массива значениями из символьного массива
есть массив символов char z;есть целочисленный массив int b;каждый символ z это цифра 0-9 нужно в...

Заполнение массива значениями
Всем привет! В результате данная программа выдает массив. Но не могу понять, почему он заполняется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
Rust или Go? А может C++?
hw_wired 28.01.2025
С каждой новой технологией или методологией появляются новые языки программирования, призванные решать конкретные задачи либо улучшать аспекты производительности и безопасности. Среди множества. . .
Fortran и WinAPI: как создать приложение с графическим интерфейсом
hw_wired 28.01.2025
Fortran — это один из старейших высокоуровневых языков программирования, широко используемый в науке и инженерии уже несколько десятилетий. Его название происходит от "Formula Translation" (перевод. . .
Списки в Haskell
hw_wired 28.01.2025
Haskell является функциональным языком программирования, который отличается лаконичностью синтаксиса и мощными абстракциями. Важным концептом в Haskell являются списки — упорядоченные коллекции. . .
Функции высшего порядка в Haskell
hw_wired 28.01.2025
Haskell – это современный функциональный язык программирования, который получил широкое распространение благодаря своей выразительности и мощным абстракциям. Одной из ключевых особенностей Haskell. . .
Как в цикле обойти все поля объекта в JavaScript
bytestream 28.01.2025
Объекты в JavaScript представляют собой фундаментальные структуры данных, которые позволяют хранить и организовывать связанную информацию в виде пар ключ-значение. Каждый объект можно представить как. . .
Как выбрать строки в DataFrame по значению столбца в Pandas
bytestream 28.01.2025
В области анализа данных библиотека Pandas стала незаменимым инструментом для работы с табличными данными в Python. Эта мощная библиотека предоставляет множество функций для эффективной обработки и. . .
Как сделать перенос строки в Bash
bytestream 28.01.2025
При работе с командной оболочкой Bash разработчики часто сталкиваются с необходимостью форматирования текстового вывода, где ключевую роль играет правильное управление переносами строк. Умение. . .
Поиск подстроки в строке с помощью Bash
bytestream 28.01.2025
Поиск подстроки в строке является одной из важных задач в программировании и обработке текстов. Применение такого поиска можно найти в самых разных областях, от анализа данных до разработки. . .
[golang] 169. Majority Element
alhaos 28.01.2025
Тут надо вернуть "мажористый" элемент который встречается в слайсе больше чем в половине случаев. По условиям задачи во входных данных такой элемент обязан присутствовать. / / . . .
Когда лучше использовать LinkedList вместо ArrayList в Java
bytestream 28.01.2025
При разработке Java-приложений выбор правильной структуры данных играет ключевую роль в обеспечении эффективности и производительности программы. ArrayList и LinkedList являются двумя. . .
Какой ответ HTTP лучше использовать: 403 Forbidden или 401 Unauthorized, когда недостаточно прав
bytestream 28.01.2025
В современной веб-разработке правильная обработка ошибок и точное информирование клиентов о статусе их запросов играют критическую роль в создании надежных и безопасных приложений. Особое внимание. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru