Вы находитесь на странице: 1из 13

Лабораторная работа 3

Использование элементов управления форм

Цель работы
Изучить основные свойства, события и порядок использования различных элементов
управления форм. Научиться создавать формы с использованием визуальных элементов кнопка и
текстовое поле.
План занятия.
1. Изучить теоретические сведения о свойствах и событиях различных элементов
управления форм.
2. По приведенному листингу программы разработать на Visual Studio программу и отладить
ее.
3. Составить программу по индивидуальному заданию.

Задания к лабораторным работам

Составить программу для выполнения следующих заданий (предусмотреть размещение


каждого задания на отдельной вкладке набора вкладок).
Задание 1. Вводятся длина, ширина и высота контейнера, а также габариты груза. Напишите
программу, которая определяет, можно ли поместить груз в контейнере. Предусмотреть, что
размеры могут быть введены в произвольном порядке (например, 5, 3, 2 или 3, 5, 2 и т.д.), и груз
можно повернуть.
Для ввода предусмотреть использование различных элементов управления (текстовое поле,
список, раскрывающийся список и т.д.).

Задание 2. Составьте программу, выводящую квадраты и кубы чисел от 2 до n в следующем


виде
2 4 8
3 9 27
4 16 64
и т.д.
Результат вывести в текстовое поле в многострочном режиме. В качестве разделителя между
числами используйте символ табуляции "\t".
Задание 3. Имеется 2 варианта размещения вклада суммой s в банк. В первом случае ежегодно
начисляется p процентов. Во втором ежемесячно начисляется p/12 процентов. Напишите
программу, которая вычисляет срок, за который сумма вклада увеличивается в 2 раза по каждому
варианту и выводит сообщение, какой из вариантов выгоднее и на сколько.

Задание 4. Напишите программу, в которой вводится массив целых чисел. Найти все четные
числа массива.

Задание 5. Ввести массив чисел из n строк и m столбцов. Вывести номера тех строк таблицы,
сумма элементов которых положительна.

Рекомендации по выполнению заданий:


Для работы с элементом управления textBox1 в многострочном режиме нужно задать
следующие свойства:
MultiLine = True,
AcceptsReturn = True,
AcceptsTab = True,
ScrollBars = Vertical.
Для вывода данных в многострочный textBox1 можно использовать следующие операторы:
1
Foreach (int i in mas) textbox1.Text += i.ToString()+ Enviroment.NewLine;
или
Foreach (int i in mas) textbox1.Text += i.ToString() + “\r\n”;
или
TextBox11.AppendText(i.ToString + “\r\n”);

1. Ввод-вывод одномерного массива-столбца, одномерного массива-строки


двумерного массива через textBox

Для ввода-вывода одномерного массива-столбца и одномерного массива-строки, а также


двумерного массива можно использовать следующую форму (рис.1) и листинг 1.

Рис. 1. Форма для ввода и обработки массивов через элемент


управления textBox
Листинг 1.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MultiLine
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}
//объявление переменных класса Form1
double[,] a; //двумерный массив
int m, n; // размерности массива

//вывод квадратов и кубов натуральных чисел от 2 до 9


private void button1_Click(object sender, EventArgs e)
2
{
for (int i=2; i<10; i++)
textBox1.Text += i.ToString() + "\t"+ (i * i).ToString() + "\t" + (i * i*i).ToString()+
"\r\n";
}

//**********************************************************************************
// ввод-вывод одномерного целочисленного массива-столбца через textBox
//каждый элемент массива вводиться в новой строке, возможны пробелы до и после числа

private void button2_Click(object sender, EventArgs e)


{
// k = количеству строк в textbox
int k = textBox1.Lines.Length;

// массив строк длиной = кол-ву строк в textBox


string[] st1 = new string[k];

//передаем в массив строк строки из textbox?


st1 = textBox1.Lines;

//удаляем последние пустые строки, если они есть


while (st1[k-1] == "") k--;

//создаем массив целых чисел а длиной k


int[]a = new int[k];

// заполняем массив а значениями из строк textbox, преобразуя их к целому типу


// удаляем начальные и конечные пробелы
// добавляем к каждому значению массива а число 5
for (int i = 0; i < k; i++)
{
a[i] = Convert.ToInt32(st1[i].Trim()) + 5;

//сюда ввести операторы обработки массива

//формирование строк для вывода результата


st1[i] = Convert.ToString(a[i]);
}

//очистка содержимого textBox1, если вывод результата в тот же textBox


textBox1.Clear();

//передача массива строк в массив строк textBox


textBox1.Lines = st1;
}

//****************************************************************************************
//ввод-вывод одномерного целочисленного массива-строки через textBox
//одномерный массив-строка вводится через один пробел (разделитель)
//возможны пробелы в начале и в конце строки, НО НЕ МЕЖДУ ЭЛЕМЕНТАМИ

private void button3_Click(object sender, EventArgs e)


{
// массив строк для хранения разделенной введенной строки чисел
string[] temp;

// создаем строку dan, передаем в нее введенную в 1 строку


//удаляем начальные и конечные пробелы
string = (textBox1.Text).Trim();

3
// разделение введенной строки чисел dan на строки с одним числом
// разделитель пробел, может быть любой другой
temp = dan.Split(' ');

// k = длине полученного массива строк


int k = temp.Length;

//создаем массив целых чисел а длиной k


int[] x = new int[k];

//очищаем строку dan


dan="";

//очистка содержимого textBox1, если вывод результата в тот же textBox


textBox1.Clear();

// заполняем массив а значениями из строк textbox, преобразуя их к целому типу


// удаляем начальные и конечные пробелы
// добавляем к каждому значению массива а число 10
for (int i = 0; i < k; i++)
{ x[i] = Convert.ToInt32(temp[i].Trim())+10;
dan += " " + x[i].ToString();
}
textBox1.Text = dan.Trim(); //удалить первый пробел
}

//****************************************************************************************
// ввод двумерного массива через многострочный textbox
// правила ввода как для одномерных массивов
// можно вводить числа с плавающ.точкой через запятую, разделяющую целую и дробную часть

private void button4_Click(object sender, EventArgs e)


{
int i, j;

// массив для представления одной вводимой строки


string[] mas;

// кол-во строк в массиве = кол-ву строк в textBox1


n = textBox1.Lines.Length;

// массив для представления всех введенных строк


string[] dan = new string[n];

// введенные строки передаем в массив символьных строк


dan = textBox1.Lines;

// удаляем последние пустые строки


while (dan[n - 1] == "") n--;

// разделим первую строку на элементы


mas = dan[0].Split(' ');

// определим количество столбцов двумерного массива


m = mas.Length;

// создаем двумерный массив


a = new double[n, m];

// заполнение массива а значениями


for (i =0; i<n; i++)

4
{
mas = dan[i].Split(' ');
for (j = 0; j < m; j++)
a[i, j] = Convert.ToDouble(mas[j]);}
}

//****************************************************************************************
// умножение элементов двумерного массива на 2 и вывод обработанного массива
// обработка события изменения состояния radioButton1
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
if (radioButton1.Checked)
{
string[] st1 = new string[n];
string[] st2 = new string[n];
int i, j;

//textBox1.Clear(); если вывод в тот же textbox

for (i = 0; i < n; i++)


{
for (j = 0; j < m; j++)
{
a[i, j] *= 2;
st1[i] += " " + Convert.ToString(a[i, j]);
}
st2[i] = st1[i].Trim();
}
textBox2.Lines = st2;
}
}

//****************************************************************************************
// расчет суммы элементов двумерного массива на 2 и вывод обработанного массива
// обработка события изменения состояния radioButton2
// Для создания обработчика события изменения состояния элемента управления NumericUpDown
// обязательно делаем DoubleClick на нем и пишем код в заготовке метода между фигурными
// скобками.

private void radioButton2_CheckedChanged(object sender, EventArgs e)


{
if (radioButton2.Checked)
{
double sum = 0;
int i, j;

for (i = 0; i < n; i++)


for (j = 0; j < m; j++)
sum += a[i, j];
label1.Text = "Sum= " + Convert.ToString(sum);
}
}

}
}

2. Ввод-вывод двумерного массива через DataGridView

Для ввода-вывода двумерного массива можно использовать следующую форму (рис.2) и


листинг 2.

5
Для создания обработчика события нажатия на элемент управления Button обязательно делаем
DoubleClick на кнопке в форме и пишем код в заготовке метода между фигурными скобками.
Для создания обработчика события изменения элемента управления NumericUpDown
обязательно делаем DoubleClick на нем и пишем код в заготовке метода между фигурными
скобками.

Рис. 2. Форма для ввода и обработки массивов через элемент


управления DataGridView.
Листинг 2.
using System; numericUpDown1
using System.Collections.Generic;
numericUpDown2 переименован в N1
using System.ComponentModel;
using System.Data; переименован в N2
using System.Drawing;
using System.Linq;
using System.Text; dataGridView1
using System.Windows.Forms; переименован в
namespace _2D_Grid Gr1
{
public partial class Form1 : Form
{
int k, n;
// можно объявить двумерный массив
// int a[,] = new int[k, n];

DataTable Tabel;

void InitGrid(int n, int m)


{
Tabel = new DataTable();
DataColumn x1;
for (int i = 0; i < m; i++)
{ //создание столбцов
x1 = Tabel.Columns.Add("Ст" + (i + 1), typeof(Int32));
x1.DefaultValue = 0;
}
for (int i = 0; i < n; i++)
{ //создание срок
DataRow y = Tabel.NewRow();
Tabel.Rows.Add(y);
}
Gr1.DataSource = Tabel;
}

6
public Form1()
{
InitializeComponent();
}
// Для создания обработчика события загрузки формы обязательно
// делаем DoubleClick на пустом месте в форме и пишем код в заготовке метода между
// фигурными скобками
private void Form1_Load(object sender, EventArgs e)
{
k = (int)N1.Value;
// Количество столбцов
n = (int)N2.Value;
// Количество строк
InitGrid(k, n);
}

//суммирование элементов массивов


// Для создания обработчика события нажатия на элемент управления Button
// обязательно делаем DoubleClick на кнопке в форме и пишем код в заготовке метода между
// фигурными скобками.
private void button1_Click(object sender, EventArgs e)
{
int sum = 0;

for (int i = 0; i < Tabel.Rows.Count; i++)


for (int j = 0; j < Tabel.Columns.Count; j++)

// здесь можно присвоить значения элементам двумерного массива


sum += Convert.ToInt32(Tabel.Rows[i][j]);

label5.Text = Convert.ToString(sum);
}

// добавление 5 к каждому элементу массива


// Для создания обработчика события изменения значения элемента управления
// numericUpDown обязательно делаем DoubleClick на нем и пишем код в заготовке метода
// между фигурными скобками.
private void button2_Click(object sender, EventArgs e)
{
int y;

for (int i = 0; i < Tabel.Rows.Count; i++)


for (int j = 0; j < Tabel.Columns.Count; j++)
{

// здесь можно присвоить значения элементам двумерного массива


// a[i,j] = Convert.ToInt32(Tabel.Rows[i][j]);

y = Convert.ToInt32(Tabel.Rows[i][j]);
y += 5;
// записываем обратно в ячейку новое значение
Tabel.Rows[i][j] = Convert.ToString(y);
}
}

private void N1_ValueChanged(object sender, EventArgs e)


{
label5.Text = ""; // очищаем значение результата
// количество строк
k = (int)N1.Value;

7
InitGrid(k, n);
}

private void N2_ValueChanged(object sender, EventArgs e)


{

label5.Text = "";
// количество столбцов
n = (int)N2.Value;
InitGrid(k, n);
}
}
}

3. Индивидуальные задания. Одномерные массивы

Вариант 1
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
□ сумму отрицательных элементов массива;
□ произведение элементов массива, расположенных между максимальным и минимальным
элементами.
Упорядочить элементы массива по возрастанию.
Вариант 2
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
□ сумму положительных элементов массива;
□ произведение элементов массива, расположенных между максимальным по модулю и
минимальным по модулю элементами.
Упорядочить элементы массива по убыванию.
Вариант 3
В одномерном массиве, состоящем из n целочисленных элементов, вычислить:
□ произведение элементов массива с четными номерами;
□ сумму элементов массива, расположенных между первым и последним нулевыми
элементами.
Преобразовать массив таким образом, чтобы сначала располагались все положительные
элементы, а потом — все отрицательные (элементы, равные нулю, считать положительными).
Вариант 4
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
□ сумму элементов массива с нечетными номерами;
□ сумму элементов массива, расположенных между первым и последним отрицательными
элементами.
Сжать массив, удалив из него все элементы, модуль которых не превышает единицу.
Освободившиеся в конце массива элементы заполнить нулями.
Вариант 5
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
□ максимальный элемент массива;
□ сумму элементов массива, расположенных до последнего положительного элемента.
Сжать массив, удалив из него все элементы, модуль которых находится в интервале [а, Ь].
Освободившиеся в конце массива элементы заполнить нулями.
Вариант 6
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
8
□ минимальный элемент массива;
□ сумму элементов массива, расположенных между первым и последним положительными
элементами.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, равные
нулю, а потом — все остальные.
Вариант 7
В одномерном массиве, состоящем из п целочисленных элементов, вычислить:
□ номер максимального элемента массива;
□ произведение элементов массива, расположенных между первым и вторым нулевыми
элементами.
Преобразовать массив таким образом, чтобы в первой его половине располагались элементы,
стоявшие в нечетных позициях, а во второй половине — элементы, стоявшие в четных позициях.
Вариант 8
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
□ номер минимального элемента массива;’
□ сумму элементов массива, расположенных между первым и вторым отрицательными
элементами.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль
которых не превышает единицу, а потом — все остальные.
Вариант 9
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
□ максимальный по модулю элемент массива;
□ сумму элементов массива, расположенных между первым и вторым положительными
элементами.
Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после
всех остальных.
Вариант 10
В одномерном массиве, состоящем из п целочисленных элементов, вычислить:
□ минимальный по модулю элемент массива;
□ сумму модулей элементов массива, расположенных после первого элемента, равного нулю.
Преобразовать массив таким образом, чтобы в первой его половине располагались элементы,
стоявшие в четных позициях, а во второй половине — элементы, стоявшие в нечетных позициях.
Вариант 11
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
□ номер минимального по модулю элемента массива;
□ сумму модулей элементов массива, расположенных после первого отрицательного
элемента.
Сжать массив, удалив из него все элементы, величина которых находится в интервале [а, Ь].
Освободившиеся в конце массива элементы заполнить нулями.
Вариант 12
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
□ номер максимального по модулю элемента массива;
□ сумму элементов массива, расположенных после первого положительного элемента.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть
которых лежит в интервале [а, b], а потом — все остальные.
Вариант 13
9
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
□ количество элементов массива, лежащих в диапазоне от А до В;
□ сумму элементов массива, расположенных после максимального элемента.
Упорядочить элементы массива по убыванию модулей.
Вариант 14
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
□ количество элементов массива, равных нулю;
□ сумму элементов массива, расположенных после минимального элемента.
Упорядочить элементы массива по возрастанию модулей.
Вариант 15
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
□ количество элементов массива, больших С;
□ произведение элементов массива, расположенных после максимального по модулю
элемента.
Преобразовать массив таким образом, чтобы сначала располагались все отрицательные
элементы, а потом — все положительные (элементы, равные нулю, считать положительными).
Вариант 16
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
□ количество отрицательных элементов массива;
□ сумму модулей элементов массива, расположенных после минимального по модулю
элемента.
Заменить все отрицательные элементы массива их квадратами и упорядочить элементы
массива по возрастанию.
Вариант 17
В одномерном массиве, состоящем из n целочисленных элементов, вычислить:
□ количество положительных элементов массива;
□ сумму элементов массива, расположенных после последнего элемента, равного нулю.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть
которых не превышает единицу, а потом — все остальные.
Вариант 18
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
□ количество элементов массива, меньших С;
□ сумму целых частей элементов массива, расположенных после последнего отрицательного
элемента.
Преобразовать массив таким образом, чтобы сначала располагались все элементы,
отличающиеся от максимального не более чем на 20%, а потом — все остальные.
Вариант 19
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
□ произведение отрицательных элементов массива;
□ сумму положительных элементов массива, расположенных до максимального элемента.
Изменить порядок следования элементов в массиве на обратный.
Вариант 20
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
□ произведение положительных элементов массива;
□ сумму элементов массива, расположенных до минимального элемента.

10
Упорядочить по возрастанию отдельно элементы, стоящие на четных местах, и элементы,
стоящие на нечетных местах.

4. Индивидуальные задания. Многомерные массивы

Вариант 1
Дана целочисленная прямоугольная матрица. Определить:
□ количество строк, не содержащих ни одного нулевого элемента;
□ максимальное из чисел, встречающихся в заданной матрице более одного раза.
Вариант 2
Дана целочисленная прямоугольная матрица. Определить количество столбцов, не
содержащих ни одного нулевого элемента.
Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных
элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом
характеристик.
Вариант 3
Дана целочисленная прямоугольная матрица. Определить:
□ количество столбцов, содержащих хотя бы один нулевой элемент;
□ номер строки, в которой находится самая длинная серия одинаковых элементов.
Вариант 4
Дана целочисленная квадратная матрица. Определить:
□ произведение элементов в тех строках, которые не содержат отрицательных элементов;
□ максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы.
Вариант 5
Дана целочисленная квадратная матрица. Определить:
□ сумму элементов в тех столбцах, которые не содержат отрицательных элементов;
□ минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали
матрицы.
Вариант 6
Дана целочисленная прямоугольная матрица. Определить:
□ сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент;
□ номера строк и столбцов всех седловых точек матрицы.
Матрица А имеет седловую точку Аij, если Аij является минимальным элементом в i-й строке
и максимальным — в j-м столбце.
Вариант 7
Для заданной матрицы размером 8x8 найти такие k, при которых k-я строка матрицы совпадает
с k-м столбцом.
Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный
элемент.
Вариант 8
Характеристикой столбца целочисленной матрицы назовем сумму модулей его
отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, расположить их в
соответствии с ростом характеристик.
Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный
элемент.

11
Вариант 9
Соседями элемента Aij, в матрице назовем элементы Аkl, где i - 1 < k < i + 1, j - 1 < l <j + 1, (k,
l) ≠ (i, j). Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент
которой получается как среднее арифметическое имеющихся соседей соответствующего элемента
исходной матрицы. Построить результат сглаживания заданной вещественной матрицы размером
10 х 10.
В сглаженной матрице найти сумму модулей элементов, расположенных ниже главной
диагонали.
Вариант 10
Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся
у него соседей (определение соседних элементов см. в варианте 9). Подсчитать количество
локальных минимумов заданной матрицы размером 10 х 10.
Найти сумму модулей элементов, расположенных выше главной диагонали.
Вариант 11
Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями.
Найти номер первой из строк, содержащих хотя бы один положительный элемент.
Вариант 12
Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо
или вниз (в зависимости от введенного режима), n может быть больше количества элементов в
строке или столбце.
Вариант 13
Осуществить циклический сдвиг элементов квадратной матрицы размером М х N вправо на k
элементов таким образом: элементы первой строки сдвигаются в последний столбец сверху вниз,
из него — в последнюю строку справа налево, из нее — в первый столбец снизу вверх, из него —
в первую строку; для остальных элементов — аналогично.
Вариант 14
Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов,
содержащих хотя бы один нулевой элемент.
Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных
элементов. Переставляя строки заданной матрицы, расположить их в соответствии с убыванием
характеристик.
Вариант 15
Упорядочить строки целочисленной прямоугольной матрицы по возрастанию количества
одинаковых элементов в каждой строке.
Найти номер первого из столбцов, не содержащих ни одного отрицательного элемента.
Вариант 16
Путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы ее
максимальный элемент находился в левом верхнем углу, следующий по величине — в позиции (2,
2), следующий по величине — в позиции (3, 3) и т. д., заполнив таким образом всю главную
диагональ.
Найти номер первой из строк, не содержащих ни одного положительного элемента.
Вариант 17
Дана целочисленная прямоугольная матрица. Определить:
□ количество строк, содержащих хотя бы один нулевой элемент;

12
□ номер столбца, в котором находится самая длинная серия одинаковых элементов.
Вариант 18
Дана целочисленная квадратная матрица. Определить:
□ сумму элементов в тех строках, которые не содержат отрицательных элементов;
□ минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы.

13

Вам также может понравиться