- 03.10.2020
- 343
- 1
Лабораторная работа № 17.
Передача и возврат массива из процедуры
Цели занятия:
• Формирование представления о назначении параметров процедур.
• Формирование навыков передачи и возврата массива из процедуры.
При создании проекта особое внимание уделяется разработке такого программного кода, который не только управляет действиями пользователя, но и обрабатывает исключительные ситуации, связанные с неверными действиями пользователя, не прерывая работу программы.
Упражнение 1.
В упражнении 1 создается Windows-приложение для изменения двумерного массива по следующему правилу: максимальные элементы каждой строки заменяются на число 100. Для изменения массива используется пользовательская процедура. Вычисление максимального элемента строки реализовано в виде функции.
Чтобы начать работу над новым проектом, надо:
§ В меню File выбрать команду New Project.
§ В открывшемся окне New Project выбрать тип приложения — Windows Forms Application - Visual С#.
§ В поле Name ввести имя проекта — и нажать кнопку ОК.
В результате описанных действий в папке временных проектов (по умолчанию C:\Users\User\Документы\Visual Studio 2008\Projects) будет создана папка с именем проекта, а в ней — в ней вы найдете сам проект.
: Разработка пользовательского интерфейса проекта.
Настроим стартовую форму нашего приложения согласно рис. 1.
В компонентах TextBox1, TextBox2 вводится количество строк и столбцов двумерного массива. С помощью кнопки Button1 массив заполняется случайными числами и выводится в компонент ListBox1. С помощью кнопки Button2 двумерный массив изменяется, в нем максимальные элементы каждой строки заменяются на число 100. Результат выводится в компонент ListBox2.
Рис. 1. Окно программы : Разработка
функционала проекта.
1.Процесс разработки функционала проекта начнем с создания кода, вычисляющего максимальный элемент строки двумерного массива. Строка двумерного массива – это одномерный массив, поэтому данный код будет вычислять максимальный элемент одномерного массива. Так как результатом вычисления является одно значение (максимальное), то реализуем данный код в виде функции. Входным параметром функции будет целый массив типа int[]. Типом результата функции - целый тип данных.
Синтаксис объявления нашей функции, вычисляющей максимальный элемент массива, приведен в листинге 1.
public static int Maximum(int[] a)
{ int max = a[0]; for (int i = 1; i < a.Length; i++) if (a[i] > max) max = a[i]; return max;
}
Замечание.
Где разместить код функции или процедуры?
Напомним, что в C# процедуры и функции существуют только как методы некоторого класса, они не существуют вне класса. Поэтому, размещайте код процедуры внутри кода класса формы Form1 (Windows Forms приложение) или класса Program (консольное приложение)
2.Далее создадим код, обновляющий массив по правилу: все максимальные элементы каждой строки заменяются на число 100. Реализуем его в виде процедуры. Целый двумерный массив должен быть прочитан процедурой как исходный, а результат его обновления должен быть сохранен в нем же. Т.е параметр-массив является и входным и результатом одновременно, поэтому объявим его как обновляемый с ключевым словом ref. Обратите внимание, что в коде процедуры вызывается написанная нами функция Maximum(a), вычисляющая максимальный элемент для каждой строки.
Синтаксис объявления нашей процедуры, обновляющей массив, приведен в листинге 2.
public static void Refresh_Array(ref int[][] a)
{ int max;
for (int i = 0; i < a.Length; i++)
{ //вызов функции max = Maximum(a[i]); for (int j = 0; j < a[i].Length; j++) { if (a[i][j] == max) a[i][j] = 100; }
}
}
3. Объявим глобальную переменную – двумерный массив. В качестве такового возьмем ступенчатый массив, который хранится в памяти как массив из внутренних массивов, каждый из которых может иметь разную длину. Это даст нам возможность в коде отдельно работать с каждым из внутренних массивов. Внутренние массивы – это строки нашего двумерного массива. Синтаксис объявления нашего массива в классе Form следующий: public partial class Form1 : Form
{ int[][] a;
………………….
4. Продолжим разработку функционала проекта созданием стандартной функции обработки события Click для кнопки «Создать массив» (buttonl).
Функция button1_ciick выделает память под заданное пользователем количество строк массива, затем память выделяется под каждую строку. Далее массив заполняется случайными числами от -10 до 9. Полученный массив выводится в список ListBox1 в виде таблицы построчно.
Синтаксис объявления нашей процедуры button1_Click, создающей массив, приведен в листинге 3.
private void button1_Click(object sender, EventArgs e)
{ //очистка и подготовка списков
listBox1.Items.Clear(); listBox2.Items.Clear();
listBox1.Items.Add("Исходный массив"); string s = "";
//ввод количества строк и столбцов int n = Convert.ToInt32(textBox1.Text); int m = Convert.ToInt32(textBox2.Text);
//выделение памяти под n строк a = new int[n][];
//выделение памяти под каждую строку for (int i = 0; i < n; i++)
a[i] = new int[m];
//заполнение массива случайным образом
Random r = new Random(); for (int i = 0; i < a.Length; i++)
{ s="";
for (int j = 0; j < a[i].Length; j++)
{
a[i] [j] = r.Next(-10, 10); s = s + ' ' + a[i] [j];
}
//вывод каждой строки таблицы
listBox1.Items.Add(s);
}
}
5. Далее создадим стандартную процедуру обработки события Click для кнопки «Изменить массив» (button2). Функция button2_ciick вызывает процедуру обновления массива. Измененный массив выводится в список ListBox2 в виде таблицы построчно.
Синтаксис объявления нашей процедуры button2_Click, создающей массив, приведен в листинге 4.
private void button2_Click(object sender, EventArgs e)
{ //очистка и подготовка списков listBox2.Items.Clear();
listBox2.Items.Add("Измененный массив"); string s = "";
//вызов процедуры обновления массива Refresh_Array(ref a);
//вывод массива for (int i = 0; i < a.Length; i++)
{ s = "";
for (int j = 0; j < a[i].Length; j++)
{ s = s + ' ' + a[i][j]; }
listBox2.Items.Add(s);
}
}
Замечание.
Обратите внимание, что вызов процедуры является отдельным оператором. При вызове перед обновляемым параметром a обязательно указывать слово ref!
Замечание.
Вы можете самостоятельно добавить процедуры обработки событий TextChanged и KeyPress для компонента TextBox, чтобы исключить неправильный ввод исходных данных.
& Компиляция и отладка проекта. Тестирование проекта.
Запустите на выполнение проект. Выполните его отладку. Протестируйте работу приложения при различных исходных данных.
:þ Упражнения для самостоятельной работы.
В приложении необходимо создать процедуру, изменяющую переданный ей двумерный массив. Правильно определите выбор параметров процедуры.
В двумерном массиве размерности n*m заменить все первые элементы столбцов на произведение четных элементов каждого столбца.
В двумерном массиве размерности n*n поменять местами в каждой строке диагональный и первый элемент соответствующей строки.
В двумерном массиве размерности n*m поменять местами элементы первой и последней строки.
В двумерном массиве размерности n*m заменить минимальные элементы каждой строки на количество элементов этой строки, являющихся нечетными и кратными 3.
В двумерном массиве размерности n*m заменить максимальный в каждой строке на первый элемент соответствующей строки.
В двумерном массиве размерности n*n заменить минимальный элемент каждой строки на диагональный элемент этой строки.
В двумерном массиве размерности n*m заменить максимальные элементы каждой строки на сумму элементов этой строки, кратных 3.
В двумерном массиве размерности n*m заменить минимальные элементы каждого столбца на количество нулевых.
В двумерном массиве размерности n*m увеличить на 10 элементы всех строк, в которых первый элемент равен нулю.
В двумерном массиве размерности n*m умножить все элементы последней строки на максимальный элемент всего массива.
В двумерном массиве размерности n*m переставить местами элементы первого и последнего столбцов.
В двумерном массиве размерности n*m умножить все элементы строк, в которых первый элемент равен последнему, на номер этой строки.
В двумерном массиве размерности n*n разделить все элементы главной диагонали на минимальный элемент всего массива.
В двумерном массиве размерности n*n разделить все элементы главной диагонали на максимальный элемент соответствующей строки.
В двумерном массиве размерности n*n переставить местами последнюю строку и первый столбец.
Настоящий материал опубликован пользователем Бабикова Татьяна Михайловна. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт
Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.
Удалить материалпреподаватель
Файл будет скачан в форматах:
Материал разработан автором:
Морозов Николай Петрович
преподаватель
Об авторе
Предлагается решить 7 задач. Особенностью этих задач является их решение с применением нейросетей, При решении этих задач используются системы программирования на языках Паскаль, Си и Питон. Задачи На мой взгляд, такой подход сразу делает это решение универсальным (дальше можно переходить к программированию не только на Паскале, но и любом другом языке программирования). Эти задачи использовались при проведении практических занятий и лабораторных работ в Санкт-Петербургском техникуме библиотечных и информационных технологий и Естественно-научном лицее Санкт-Петербургского политехнического университета Петра Великого и СПбГИК. Постановка задач, их решение и ответы оформлены на 30 листах в двух файлах.
Курс повышения квалификации
Курс профессиональной переподготовки
300 ч. — 1200 ч.
Курс повышения квалификации
36 ч. — 144 ч.
Курс повышения квалификации
72 ч. — 180 ч.
Еще материалы по этой теме
Смотреть
Рабочие листы
к вашим урокам
Скачать
Данная лабораторная работа формирует навыки передачи и возврата массива из процедуры, функции в программах. Приведено пошаговое описание разработки проекта в среде VisualStudio 2008 на языке программирования С#. Также приведен список упражнений для самостоятельной работы. Лабораторная работа входит в лабораторный практикум по дисциплине «Основы программирования» для студентов специальности 230115» Программирование в компьютерных системах» среднего профессионального образования.
7 241 697 материалов в базе
Вам будут доступны для скачивания все 218 935 материалов из нашего маркетплейса.
Мини-курс
3 ч.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.