С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 03.05.2017
Сообщений: 2

Операции с двухмерным массивом через консольное меню

07.05.2017, 10:23. Показов 1239. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Теоретическая часть
Использование подпрограмм в задаче на обработку двумерного массива.
Требуется вывести на экран меню, состоящее из следующих пунктов:
1) ввод матрицы с клавиатуры,
2) ввод матрицы из файла,
3) вычисление характеристики,
4) преобразование матрицы,
5) печать матрицы,
6) выход,
и обеспечить его функционирование.
Внутри программы характеристика оформляется в виде метода с передачей
параметров по значению, который возвращает значение булевского типа; преобразование в
виде метода с передачей параметров по ссылке. Необходимо отслеживать, был ли
произведен ввод данных до выбора пунктов меню, которые обрабатывают матрицу.
Обеспечим функционирование меню, которое позволяет найти минимальный
элемент матрицы и заменять побочную диагональ нулями. Каждое действие будет
реализовано в виде подпрограммы.
Для программной реализации меню удобно использовать оператор ветвления switch.
Оператор ветвления может иметь большое количество альтернатив, выбор которых
осуществляется с помощью значения управляющего выражения. Это очень удобный способ
реализации кода, когда существует некий параметр, в зависимости от которого должны
выполняться те или иные ветви кода. В C# он реализуется следующим образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
switch ( value )
{
case 1 : { Console.WriteLine("Цифра 1”);
break;
}
case 2 : { Console.WriteLine("Цифра 2);
break;
}
. . .
default: { Console.Write("для этого варианта действие”);
Console.WriteLine(“ не определено”);
break;
}
}
Теперь разберемся с тем, как устроены подпрограммы или методы. Метод
(подпрограмма) представляет собой блок кода, содержащий набор инструкций. Программа
инициирует выполнение операторов, вызывая метод и задавая необходимые аргументы
метода. В C# методы определяются в рамках объявления класса. Различают статические (со
спецификатором static) и не статические методы (объявляются без спецификатора). Не
вдаваясь в подробности ООП, заметим, что для наших целей нужны статические методы.
Определение метода задает имена и типы любых необходимых параметров.
Параметры заключаются в круглые скобки и разделяются запятыми. Пустые скобки
указывают на то, что у метода нет параметров. Когда код вызова вызывает метод, он
предоставляет конкретные значения, называемые аргументами, для каждого параметра.
Аргументы должны быть совместимыми с типом параметра, но имя параметра (если
таковое имеется),используемое в коде вызова, не должно быть таким же, как параметр с
именем, определенным в методе. Пример:
C#
1
2
3
4
5
6
7
8
9
10
11
static void Main()
{
int numA = 4;
int productA = Square(numA); // вызов метода с цел. пер‐й
int productC = Square(12); // вызов метода с константой
productC = Square(productA * 3); // вызов с целочисл. выраж.
}
static int Square(int input)
{
return input * input;
}
Возвращаемые значения. Методы могут возвращать значения вызывающим их
объектам. Если тип возвращаемого значения, указываемый перед именем метода, не равен
void, для возвращения значения используется ключевое слово return. Как показано в
примере выше, в результате выполнения инструкции return input*input, вызвавшему метод
объекту будет возвращено целочисленное значение произведения. Кроме того, ключевое
слово return останавливает выполнение метода. Если тип возвра- щаемого значения void,
инструкцию return без значения можно использовать для завершения выполнения метода.
Если ключевое слово return отсутствует, выполнение метода завершится, когда будет
достигнут конец его блока кода.
Параметры в подпрограмму передаются по ссылке или по значению. Если тип
параметра – значимый (число, символ, булевское значение), то по умолчанию используется
передача по значению, при этом передается копия объекта, а не сам объект. Поэтому
изменения в аргументе не оказывают влияния на исходную копию в вызывающем методе.
Для изменения в методе переменной используют передачу по ссылке с помощью ключевого
слова ref. Пример:
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
static void TwoNumbers(int number1, ref int number2)
{
number1 = number1 * 2; //это изменение только здесь
number2 = number1 + number2;
}
static void Main()
{
int a = 5, b = 1;
Console.WriteLine(“ a={0}, b= {1}”, a, b); // a=5 b=1
TwoNumbers(a, ref b);
Console.WriteLine(“ a={0}, b= {1}”, a, b); // a=5 b=11
}
Если тип параметра – ссылочный (массив, матрица, строка), то по умолчанию
происходит передача адреса объекта и поэтому все изменения, кроме создания нового
объекта, в методе отражаются в вызывающей программе. Для полного контроля метода над
ссылочным параметром также используется ключевое слово ref. В метод печати матрицы
будем передавать матрицу по значению, а в метод замены побочной диагонали – по ссылке.
static void Main()
{
string line;
char[] delimiterChars = { ' ', ',', '\t' };
int n; // количество строк матрицы
int[,] matr; // исходная матрица
int i, j; // индексы
// ввод матрицы из файла
using (StreamReader file = new StreamReader("dat.txt"))
{
// ввод размерности
n = int.Parse(file.ReadLine());
matr = new int[n, n]; // определение матрицы
// чтение строки из файла и преобразование в числовые данные
for (i = 0; (i < n) && ((line = file.ReadLine()) != null); i++)
{
string[] numbers = line.Split(delimiterChars);
j = 0;
foreach (string numString in numbers)
{
int x;
bool canConvert = int.TryParse(numString, out x);
if (canConvert == true)
{
matr[i, j] = x;
j++;
}
}
}
}// ввод данных закончен
// создание меню
string choice = "0";
while (choice != "4")
{
Console.WriteLine();
Console.WriteLine("1. Печать матрицы");
Console.WriteLine("2. Нахождение минимального элемента");
Console.WriteLine("3. Замена побочной диагонали нулями");
Console.WriteLine("4. Выход");
Console.WriteLine(" ");
Console.WriteLine(" Введите номер пункта меню ");
choice = Console.ReadLine();
switch (choice)
{
case "1":
Console.WriteLine(" Печать матрицы");
print_matrica(matr);
Console.WriteLine();
break;
case "2":
Console.Write("Мин. элемент = {0}",min_element(matr));
Console.WriteLine();
break;
case "3":
Console.WriteLine(" Произведена замена.");
zamena(ref matr);
Console.WriteLine();
break;
case "4":
Console.WriteLine(" До свидания!");
break;
default:
Console.WriteLine(" Введите 1, 2, 3 или 4");
Console.WriteLine();
break;
}
}
Console.ReadLine();
}// k Main
// метод нахождения минимального элемента матрицы
static int min_element(int[,] a)
{
int min_elt=a[0,0];
for (int i = 0; i < a.GetLength(0); i++)
{
for(int j=0; j< a.GetLength(1); j++)
{
if (a[i, j] < min_elt)
min_elt = a[i, j];
}
}
return min_elt;
}
// метод замены побочной диагонали нулями
static void zamena(ref int[,] a)
{
int n= a.GetLength(1);
for (int i = 0; i < a.GetLength(0); i++)
{
a[i, n – i – 1] = 0;
}
}
// метод печати матрицы
static void print_matrica(int[,] a)
{
for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 0; j < a.GetLength(1); j++)
{
Console.Write("{0} \t", a[i, j]);
}
Console.WriteLine();
задание:
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.05.2017, 10:23
Ответы с готовыми решениями:

Работа с двухмерным динамеческим массивом через указатель
Натупил здесь наверное сильно, подскажите ребят, а то долго уже сиджу над этим... Где ошибки? Программу компилирует, но потом выбивает. ...

Работа с двухмерным динамическим массивом через указатель - исправить код
Натупил здесь наверное сильно, подскажите ребят, а то долго уже сиджу над этим... Где ошибки? Программу компилирует, но потом выбивает. ...

Построить циклическое консольное меню-приложение «Арифметические операции»
Задача: Построить циклическое консольное меню-приложение «Арифметические операции». Команды меню задают арифметические операции,...

1
Эксперт .NET
 Аватар для Usaga
14113 / 9330 / 1350
Регистрация: 21.01.2016
Сообщений: 35,056
07.05.2017, 10:26
Яна Павлюченко, что это за портянка? Это задание такое или вы решили тут начать выкладывать свои обучающие материалы?..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.05.2017, 10:26
Помогаю со студенческими работами здесь

Построить циклическое консольное меню-приложение «Арифметические операции»
Построить циклическое консольное меню-приложение «Арифметические операции». Команды меню задают арифметические операции, ...

Работа с двухмерным массивом
Здравствуйте не получается наладит программу всё время выдёт ошибкуunit Unit1; interface uses Windows, Messages, SysUtils,...

Проблемы с двухмерным массивом
Var summ,promsumm,bufa:real; a: array of real ; i,j,i1,j1,m,n,promi:integer; begin writeln('Введите количество строк массива...

Проект с двухмерным массивом
Помогите решить задачку. Создать проект заполнения массива А(9,9) 0 и 1 в шахматном порядке. Вывести массив на форму в виде таблицы.

Работа с двухмерным массивом данных
Всем привет. Нужна ваша помощь! Имеется такой код, на который нужно сделать отдельные кнопки, которые : &quot; Упорядочить заданную...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru