Ввод массива с клавиатуры windows forms

Работа по теме: Лекция 15Мass. ВУЗ: ПГУТИ.

Лекция
15

22.0. Массивы в
Windows Forms Application

Массивы – это структура данных,
представляющая собой набор переменных
одинакового типа, имеющих общее имя.

Каждый
элемент массива однозначно определяется
именем и индексом (номером элемента в
массиве). Индексы массива принадлежат
целочисленному типу.

Все
элементы массива имеют одинаковый тип.

Используются
при работе с таблицами и списками.

Массив
может быть:


одномерным,


двумерным /многомерным.

Массивы
различают:

  • статические
    и

  • динамические.

В статическом массиве размеры
массива (верхний индекс элементов)
задаются при объявлении массива (размеры
известны до компиляции программы).

Формат
объявления одномерного массива в C#:

тип[
] ИмяМассива = new
тип [размер];

Формат
объявления двумерного массива в C#:

тип
[ , ] ИмяМассива = new
тип [количество строк, количество
столбцов];

Если массив объявлен с инициализацией
глобально в программе, то начальные
значения элементов массива будут
использоваться во всех процедурах и
обработчиках событий. Пример объявления
массива:

// using – раздел
объявления модулей;

using
System.Windows.Forms;

namespace
WindowsFormsApplication1 //пространство
имен приложения

{

public
partial class Form1 : Form // объявление
класса

{

public Form1()
// объявление формы1

{

InitializeComponent();
// объявление компонент на форме

}

// глобальное объявление массивов

int[] А = new int[5]; // одномерный массив
А из 5 целых чисел

double[,] M = new double[2, 3]; // двумерный массив
M[2х3]

string[ ] Team = {«Zenith»,
«Dynamo», «Sparta», «Rotor», «CSK»};
//строковый

double[] F = { 1.5, 2.1, 3.65, 4.7, 5.14, 6.36 }; // F[6]
из 6 вещественных чисел

int[,] D = { { 0, 2, 4, 6 }, { 2, 9, 6, 3 }, { 4, 7, 5, 8 }, { 1, 6,
5, 7 } }; // массив M [4х4]

}

}

// обработчики событий

Элементы
массива, объявленного глобально
можно инициализировать в процедуре
обработчика события, во время работы
программы, например, для массива A из 5
эл.:

private void
button1_Click(object sender, EventArgs e)

{

// инициализация элементов массива
A, объявленного глобально

A[1] = 5;
A[2] = 6; A[3] = 0; A[4] = -5; A[5]
= -10;

}

Локальный массив объявляется в
процедуре обработчика события, и тогда
его как правило инициализируют во время
исполнения этого события. Значения
элементов, как и сам массив известен
только в этой процедуре. При необходимости
работы с массивом его надо заново
объявлять в другом обработчике события
и производить его инициализацию.
Например:

private
void button2_Click(object sender, EventArgs e)

{

int[] B =
new int[10];
// массив B объявлен
локально

for (int k
= 0; k <= 4; k++)
// с инициализацией элементов

B[k] = k;

}

При обращении к элементам массива
заданного локально в другом обработчике
событий, будет выдано сообщение об
ошибке:

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

private void button1_Click(object sender, EventArgs e)

{

int size = int.Parse(textBox1.Text);
//Задание верхней
границы массива

int []
H = new int[size];

………

}

22.1 Операции с массивами в Windows-приложениях

Типовые операции:

  • вывод/ввод
    массива;

  • поиск
    максимального или минимального элемента
    массива;

  • поиск
    заданного элемента массива;

  • сортировка
    массива.

Ввод-Вывод
массивов в
Windows-приложениях

Поскольку эти приложения позволяют
создать дружелюбный интерфейс
пользователя, то это облегчает работу
по вводу и выводу массивов.

Пример. Форма разделена условно на две
части – для ввода и вывода массива.

Пользователь в текстовое окно число
элементов массива и нажимает командную
кнопку «Создать массив», обработчик
которой создает массив заданной
размерности, если корректно задан
размер, в противном случае выдается
сообщение об ошибки.

Затем пользователь переходит к вводу
элементов массива. Элемент вводится в
текстовое окно, а командная кнопка
«Ввести элемент» обеспечивает передачу
значения в массив. Корректность ввода
контролируется и на этом этапе.

Для облегчения ввода пользователю
выводится подсказка, какой именно
элемент надо ввести. После ввода элементов
массива окно ввода становится недоступным
для ввода элементов.

В нижней части отображается введенный
массив в форме, удобной для восприятия
пользователя. Для этого пригодны
элементы: ListBox, CheckedListBox,
ComboBox. Как только вводится
очередной элемент, он немедленно
отображается во всех объектах.


ComboBox11

label1

label2

label3

label4

label5

label6

label7

listBox1-
список

checkedListBox1

comboBox1-
комбинированный список


textBox1

button1

textBox2

button2

panel1

panel2

Три объекта вывода элементов массива
приведены для демонстрации, реально их
всех отображать не нужно. Компонент
выбирается по желанию пользователя.


using System;

using
System.Collections.Generic;

using
System.ComponentModel;

using System.Data;

using System.Drawing;

using
System.Linq;

using System.Text;

using
System.Windows.Forms;

namespace
WindowsFormsApplication1

{

public partial
class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

double [] mas;

int i=0;

private void
button1_Click(object sender, EventArgs e)

{

try //охраняемый блок


{

int n = int.Parse(textBox1.Text);

mas =
new double[n];

label4.Text = «mas[ » + 0 + » ]»;

textBox2.ReadOnly = false;

listBox1.Items.Clear();

checkedListBox1.Items.Clear();

comboBox1.Items.Clear();

i = 0;

}

catch //перехватчик исключения и
формирование ошибки

{

MessageBox.Show(«Надо вводить цифры «,
«Ошибочный ввод данных»,
MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

private void
button2_Click(object sender, EventArgs e)

{

int n =
int.Parse(textBox1.Text);

mas = new
double[n];
// задание размера массива

mas[i] = double.Parse(textBox2.Text);


label4.Text = «mas[ » + i + » ]»;

listBox1.Items.Add(mas[i]);

checkedListBox1.Items.Add(mas[i]);

comboBox1.Items.Add(mas[i]);

i++;

textBox2.Text = » «;

label6.Text = «ОК»;

if (i == n)

{

label3.Text = » «;

label4.Text = » «;

label6.Text = «Ввод
не доступен
«;

textBox2.Text = » «;

textBox2.ReadOnly = true;

}

}

}

}

Последовательность чисел удобно вводить
в строку таблицы с помощью компонента
DataGridView (данные строкового
вида).

DataGridView – это таблица,
ячейки которой содержат строки символов.


Столбец

Таблица


Строка

Ячейка


Свойства
DataGridView определяют:

Columns
колонки таблицы

Rows
строки таблицы

Cells ячейки

ColumnCount количество
столбцов таблицы

RowCount количество
строк таблицы

Rows[n].Cells[k]
ячейка, лежащая на пересечении n
— го ряда row и k-ой
столбца

Задача1, 2. Ввести
элементы одномерного
массива и вычислить:

Задача1: суммарное, среднеарифметическое,

Задача2: максимальное и минимальное
значения элементов этого массива.

using System;

using
System.Collections.Generic;

using
System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using
System.Windows.Forms;

namespace
WindowsFormsApplication1

{

public partial
class Form1 : Form

{

public Form1()

{

InitializeComponent();
// объявление компонентов на
Form1

}

double[] K =
new double[5]; // объявление
массива

private void
button1_Click(object sender, EventArgs e) // Задача1

{

double avr = 0;
//среднее значение

double summ = 0; //сумма элементов

int n
= 0;
// количество введенных
элементов

try //охраняемый блок

{

for
(int
i
= 0; i
< 5; i++)
//преобразование данных, вводимых в
1 строку

{
// с клавиатуры в цифровой
эквивалент

K[i]
= System.Convert.ToDouble(dataGridView1.Rows[0].Cells[i].Value);

summ
= summ + K[i];

n= n
+ 1;

}

avr =
summ / n;

label1.Text
= «Сумма
элементов:
» + String.Format(«{0,6:f}», summ);

label2.Text
= «Среднее
арифмет.
значение:
» + String.Format(«{0,6:f3}», avr);

}

catch //перехватчик исключения и
формирование ошибки

{

MessageBox.Show(«Надо вводить цифры «,
«Ошибочный ввод данных»,
MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

private void
button2_Click(object sender, EventArgs e) // Задача2

{

double Kmax
= 0;

double Kmin
= 0;

int Nmx =
0;

int Nmn =
0;

try
//охраняемый
блок

{

for
(int
i
= 0; i
< 5; i++)
//преобразование данных, вводимых в
первую строку

{
//с клавиатуры в цифровой эквивалент

K[i]
= System.Convert.ToDouble(dataGridView1.Rows[0].Cells[i].Value);

}

Kmax =
K[0]; // предположение

Nmx =
0;

for
(int i = 1;
i < 5; i++)

{

if (K[i] > Kmax)

{

Kmax
= K[i]; // выявление
max

Nmx = i;

}

}

Kmin =
K[0]; // предположение

Nmn =
0;

for
(int i =1;
i < 5; i++)

{

if
(K[i] < Kmin)

{

Kmin
= K[i]; // выявление
min

Nmn = i;

}

}

label3.Text
= «Максимальное
значение:
» + String.Format(«{0,6:f1}», Kmax) + «, его
номер:
» + Nmx.ToString();

label4.Text
= «Минимальное
значение:
» + String.Format(«{0,6:f1}», Kmin) + «, его
номер:
» + Nmn.ToString();

}

catch //перехватчик исключения и
формирование ошибки

{

MessageBox.Show(«Надо вводить цифры «,
«Ошибочный ввод данных»,
MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

}

}

0
1 2 3 4

Двумерную
таблицу можно представить как совокупность
одномерных массивов.

Задача
3
. Обработать результаты спортивных
соревнований олимпиады.

Программа
должна вычислять общее количество
медалей каждой страны и соответствующее
количество баллов, по правилу:

— за
золотую медаль – 7 баллов,

— за
серебряную медаль – 6 баллов,

— за
бронзовую медаль – 5 баллов,

Устанавливаем на
форму объекты dataGridView1
и button1. Используя свойство
Colomns, создаем коллекцию
столбцов с полями: Страна, Золотых,
Серебряных, Бронзовых, Всего, Баллов


dataGridView

Изменив свойство Name,
переименуем dataGridView в
Tabl.

Количество строк в компоненте
по умолчанию dataGridView
= 1 и для увеличения их численности
необходимо при инициализации элементов
добавить нужное их число через метод
dataGridView.Rows.Add();

public
Form1()

{

InitializeComponent();

Tabl.Rows.Add(8);
//добавление
строк
в
таблицу

}

Заполнение ячеек организовано через
процедуру обработки события Activate,
которое происходит при активизации
формы.

Запуск приложения

При нажатии на кнопку «Итоги» происходит
расчет показателей:

using System;

using
System.Windows.Forms;

namespace
WindowsFormsApplication1

{

public partial
class Form1 : Form

{

public Form1()

{

InitializeComponent();

Tabl.Rows.Add(8);
//добавление
строк
в
таблицу

}

private void
Form1_Activated(object sender, EventArgs e) //при
активизации
формы

{

string[]
Ctrana
= new
string[8]
{ «Австрия», «Великобритания»,
«Германия», «Италия»,

«Россия», «США»,
«Франция», «Япония» };

int[]
Zoloto
= new
int[8]
{ 16, 11, 14, 13, 32, 39, 13, 5 };

int[]
Serebro = new int[8] { 25, 10, 17, 8, 28, 25, 14, 8 };

int[]
Bronza = new int[8] { 17, 7, 28, 13, 28, 33, 11, 5 };

for (int i
= 0; i < 8; i++)

{

Tabl.Rows[i].Cells[0].Value
= Ctrana[i]; // заполнение
элементами
0 столбца

Tabl.Rows[i].Cells[1].Value
= Zoloto[i]; // заполнение
элементами
1 столбца

Tabl.Rows[i].Cells[2].Value
= Serebro[i]; // заполнение
элементами
2 столбца

Tabl.Rows[i].Cells[3].Value
= Bronza[i]; // заполнение
элементами
3 столбца

}

}

private void
button1_Click(object sender, EventArgs e) //кнопка
Итоги

{

int c,r; //номер
колонки и строки Tabl

int s=0; //всего медалей у команды

int b=0; //всего баллов у команды

for (r = 0; r < 8; r++)
//цикл по строкам

{

//вычисление
общего количества медалей

for (c
= 1; c <= 3; c++)

s =
s + System.Convert.ToInt16(Tabl.Rows[r].Cells[c].Value);

//вычисление
общего
количества
баллов

b = 7 *
System.Convert.ToInt16(Tabl.Rows[r].Cells[1].Value) +

6
* System.Convert.ToInt16(Tabl.Rows[r].Cells[2].Value) +

5
* System.Convert.ToInt16(Tabl.Rows[r].Cells[3].Value);

Tabl.Rows[r].Cells[4].Value
= s.ToString(); // всего
медалей
для
каждой
страны

Tabl.Rows[r].Cells[5].Value
= b.ToString(); // всего
баллов
для
каждой
страны

}

}

}

}

Соседние файлы в папке ЛК

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

В моём коде почему-то записывается только последний элемент массива. Например, я ввожу размер массива 3 и ввожу числа 1, 2 и 3, то при выводе я получаю 0 0 3.

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 _masss
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        int a = 0, b, c = 0, d = 1, f = -1;

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = "Введите размер массива";
        }
        string str = "";
        private void button1_Click(object sender, EventArgs e)
        {   
            if (a == 0)
            {
                b = int.Parse(textBox1.Text);
                label1.Text = d.ToString() + " число";
            }
            int[] arr = new int[b];
            if (a > 0)
            {
                if (f <= b)
                {
                    label1.Text = d.ToString() + " число";
                    while (c == 0)
                    {
                        arr[f] = int.Parse(textBox1.Text);
                        c++;
                    }
                }
                
            }
            c = 0;
            a++;
            f++;
            d++;
            if (f == b)
            {
                for (int i = 0; i < b; i++)
                {
                    str += arr[i] + " ";
                }
                label1.Text = str;
            }
            textBox1.Clear();
        }
    }
}

Для ввода элементов использую DataGridView. Посмотрел множество примеров использования, но когда пытаюсь сделать что-то в собственном коде, при отладке сам компонент DataGridView представляется в виде серого прямоугольника без каких-либо столбцов и строк. В качестве источника данных этот компонент видит только главную форму программы Form1. Что необходимо отредактировать в списке свойств и добавить в код, чтобы была возможность ввести элементы и считать их?

На примере ввода массива с дальнейшей его обработкой (arrayGrid — объект DataGridView):

private void button1_Click(object sender, EventArgs e)
    {
        arrayGrid.RowCount = 1;
        arrayGrid.ColumnCount = SIZE;

        arrayGrid.Rows.Add();
        for (int i = 0; i < SIZE; i++)
            arrayGrid.Columns.Add("column" + i.ToString(), i.ToString());

        for (int i = 0; i < SIZE; i++)
            arr[i] = int.Parse((string)arrayGrid.Rows[0].Cells[i].Value);

        int min = arr[0];

        for (int i = 1; i < SIZE; i++)
            if (arr[i] < min)
                min = arr[i];

        label3.Text = min.ToString();
    }

задан 28 сен 2017 в 18:37

zergon321's user avatar

Один из самых простых способов — использовать DataTable.

dataTable = new DataTable();

// Количество столбцов
for (int i = 0; i < 3; i++)
    dataTable.Columns.Add(i.ToString(), typeof(int)); // укажите нужный тип данных матрицы

// Количество строк
for (int i = 0; i < 3; i++)
    dataTable.Rows.Add(dataTable.NewRow());

dataGridView.DataSource = dataTable;

// Опции по желанию
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridView.AllowUserToAddRows = false;

Далее, соответственно, вместо массива работайте в коде с DataTable.

К отдельным элементам можно обращаться следующим образом:

dataTable.Rows[0][0]

ответ дан 28 сен 2017 в 19:49

Alexander Petrov's user avatar

Alexander PetrovAlexander Petrov

28.4k5 золотых знаков26 серебряных знаков53 бронзовых знака

Работа с однородными структурированными типами данных. Элементы пользовательского интерфейса для работы с массивами

Цель работы: получить практические навыки работы с компонентами для отображения однородных структурированных данных.

Основной материал для выполнения работы:

  1. Видео-материал по созданию класса Monster
  2. Презентация по создания класса Monster (см. ниже в прикрепленных файлах)
  3. Описание создания класса «Монстр»
  4. Код класса Monster
  5. Видео-материал «Классы и объекты на примере зоопарка»
  6. Видео-материал «Создание класса Animal»

Задание:

Создайте приложение, использующее основные компоненты для ввода и отображения массивов в приложениях Windows Forms и позволяющее организовать обмен данными с пользователем, сохранение информации в текстовом файле и вычитывание информации из файла по требованию пользователя. Обязательно предусмотрите возможность выполнения основных функций приложения с помощью главного меню формы и с помощью панели инструментов. Графический интерфейс пользователя должен удовлетворять всем требованиям, предъявляемым к GUI в ОС Windows.

В приложении должно содержаться как минимум три формы:
1. Форма для реализации задания, позволяющая наглядно работать с элементами массива, задавать размер массива, осуществлять ввод элементов массива с клавиатуры, или с помощью генератора случайных чисел или чтением из файла.
2. Форма для реализации функций настроек параметров приложения, позволяющая задать цвет главной формы приложения, включение/отключение панели инструментов, координаты появления главной формы на экране (по центру, сверху экрана, снизу экрана).
3. Форма «О программе», на которой должна отображаться следующая информация: Фамилия, имя, фотография автора, номер группы, номер варианта, номер и название лабораторной работы.

Номер варианта соответствует списку в журнале группы

Задания по вариантам:

№ варианта Задание
1, 21 Заполнить одномерный массив целыми числами. Вычислить сумму и произведение элементов массива, значения которых кратны 3.
2, 22 Заполнить одномерный массив целыми числами. Вычислить произведение и среднее арифметическое элементов массива, значения которых кратны 5.
3, 23 Заполнить одномерный массив целыми числами. Вычислить произведение ненулевых элементов в первой и во второй половине массива.
4, 24 Заполнить одномерный массив целыми числами. Найти номер минимального элемента массива. Удвоить элементы массива, стоящие до минимального.
5, 25 Заполнить одномерный массив целыми числами. Найти в массиве элементы, кратные 4, и вывести их номера. Если таких элементов нет, то вывести сообщение об этом.
6, 26 Заполнить одномерный массив целыми числами. Вычислить количество четных и нечетных по значениям элементов массива. Если четных или нечетных элементов нет, то вывести сообщение об этом.
7, 27 Заполнить одномерный массив целыми числами. Вычислить количество перемен знака с минуса на плюс или с плюса на минус. Нуль знака не имеет.
8, 28 Заполнить одномерный массив целыми числами. Вычислить произведение элементов массива, кратных своим порядковым номерам. Если таких элементов нет, то вывести сообщение об этом.
9, 29 Заполнить одномерный массив целыми числами. Вычислить сумму и произведение элементов массива, индексы которых кратны 3.
10, 30 Заполнить одномерный массив целыми числами. Вычислить произведение ненулевых элементов массива, стоящих после первого отрицательного элемента.
11, 31 Заполнить одномерный массив целыми числами. Вычислить номер первого кратного 3 и последнего кратного 3 элемента массива.
12, 32 Заполнить одномерный массив целыми числами. Вычислить номер первого отрицательного и последнего отрицательного элемента массива.
13, 33 Заполнить одномерный массив целыми числами. Поменять местами максимальный и минимальный элемент массива.
14, 34 Заполнить одномерный массив целыми числами. Вычислить произведение элементов массива, стоящих после максимального элемента.
15, 35 Заполнить одномерный массив целыми числами. Вычислить произведение элементов массива, стоящих между максимальным и минимальным элементами.
16, 36 Заполнить одномерный массив целыми числами. Найти номер первого четного и последнего четного по значению элементов массива.
17, 37 Заполнить одномерный массив целыми числами. Поменять местами первый положительный и последний положительный элемент массива.
18, 38 Заполнить одномерный массив целыми числами. Вычислить номер первого кратного 10 и последнего кратного 10 элемента массива. Если таких элементов нет, то вывести сообщение об этом.
19, 39 Заполнить одномерный массив целыми числами. Вычислить номер первого максимального элемента массива и количество максимальных элементов.
20, 40 Заполнить одномерный массив целыми числами. Вычислить номер первого минимального элемента массива и поменять его местами с первым элементом.

Критерии оценки лабораторной работы:

  1. Присутствие на занятии, приложение отсутствует или оно «пустое» — оценка 1 балл.
  2. Имеется приложение, но оно не работает или находится в начальной стадии разработки — оценка 2 балла.
  3. Имеется приложение, выполняющее поставленную задачу, однако с неоформленным интерфейсом пользователя — оценка 3 балла.
  4. Имеется работающее приложение, но в нем имеются незначительные недостатки оформительского характера — оценка 4 балла.
  5. Имеется полностью готовое приложение в соответствии с вариантом и заданием — оценка 5 баллов.
  6. Имеется полностью готовое приложение в соответствии с вариантом и заданием + добавлены дополнительные элементы, защиты, оформление и другое, не предусмотренное заданием — оценка 6 баллов и выше.

Коментарии к выполнению задания:

  1. Создайте отчет к лабораторной работе — текстовый документ с именем ЛР06_ФамилияИмя.doc. Скопируйте в отчет свой вариант задания.
  2. Выполните разработку структуры входных и выходных данных. 
    • Для того чтобы разработать структуру входных данных, продумайте, какие входные данные необходимы для решения поставленной задачи? Сколько их? Какого типа? Откуда (из какого источника) могут быть получены входные данные?
    • Введите обозначения входных данных и опишите их смысл, типы, источники получения (с клавиатуры, из файла, с помощью списка, переключателей на форме и др.).
    • Для того чтобы разработать структуру выходных данных, продумайте, что является результатом решения задачи? В какой форме должны быть получены результаты? Каковы типы результатов? Куда должен быть выведен ответ (на экран, в файл, на принтер)?
    • Введите обозначения выходных данных и опишите их смысл, типы, форму выдачи, куда они выдаются.
    • Запишите в отчёт входные данные задания (что дано) и выходные данные (что надо найти), с указанием типов исходных данных и результатов.
  3. Опишите по порядку функциональные характеристики проекта (что должна делать программа), начиная с получения входных данных (возможно несколько вариантов получения), затем опишите обработку входных данных (что вычисляется, каким методом), выдачу результатов, дополнительные сервисные функции.
  4. Создайте новый проект, выполнив для этого команду Файл / Создать / Проект …. В открывшемся окне выберите Шаблоны / Visual C# и далее выберите Приложение Windows Forms.
    Укажите следующие данные для сохранения проекта:
    Имя: lab06_fio, где fio — ваши Фамилия и инициалы (латиницей и без пробелов!)
    Расположение: в личном каталоге на диске H
    Лабораторные работы с отличными от указанных имен файлов ПРОВЕРЯТЬСЯ НЕ БУДУТ!!!
    Проверьте, что у вас отмечено поле «Создавать каталог для решения» (в этом случае поле «Имя решения» будет не доступно для задания) и не отмечено поле «Добавить в систему управления версиями»
  5. Разработайте структуру класса для работы с массивом.
    • Для того чтобы разработать структуру класса, продумайте, какие характеристики необходимы для работы? Какого они типа? Введите обозначения полей класса и укажите их тип. При этом обязательно предусмотрите, чтобы все имена были значимыми и соответствовали своей смысловой нагрузке.
    • Подумайте, какие параметры должны передаваться в конструктор класса? Сколько их? Какого типа они должны быть?
    • Какие функции должен выполнять класс? Введите обозначения методов класса. Для каждого метода решите, должен ли метод возвращать результат? Какого типа? Должны ли передаваться в метод параметры? Сколько их? Какого они типа? Должен ли быть доступ к методу из другого класса?
    • К каким полям должен быть доступ из вне, а какие являются внутренними?
    • Создайте диаграмму классов, указав:
      • поля с указанием типа и спецификатора доступа
      • конструктор с указанием передаваемых параметров
      • методы с указанием входных и выходных параметров и спецификатора доступа.

    Например:

    Класс MyArray
    1) Поля:
    — int nstandart — стандартный размер массива, только для чтения
    — int n — размер массива
    — int[] array — массив целых чисел
    2) Конструкторы:
    — MyArray() — по умолчанию, создает массив стандартного размера и заполняет его нулями
    — MyArray(int n) — создает массив размера n и заполняет его случайными числами
    — MyArray(string filename) — читает массив из указанного файла
    3) Методы:
    — Sum() — вычисляет сумму элементов массива, возвращает целое число
    — MaxEl() — возвращает целое число — максимальный элемент массива

  6. Добавьте в проект файл с классом, необходимым для выполнения задания вашего варианта (если данный класс не был создан в процессе создания диаграммы классов). При создании класса предусмотрите, чтобы ваш код соответствовал принципам самодокументируемости (т.е. все поля, свойства и методы имели значимые имена). Предусмотрите в классе:
    • поля для хранения характеристик массива,
    • свойства для работы с полями,
    • конструкторы для создания массива,
    • методы для работы с массивом
  7. Разработайте блок-схему алгоритма метода, производящего необходимые вычисления. Внесите разработанную блок-схему в отчет.
  8. Продумайте, какие элементы интерфейса необходимо разместить на форме, чтобы обеспечить удобную и наглядную работу пользователя. Предусмотрите возможность задания размера массива. Ввод массива нужно осуществлять с клавиатуры, случайным образом или путем чтения из файла. Способ ввода можно менять с помощью зависимых кнопок выбора. Для отображения массива можно использовать компонент dataGridView.
  9. Выполните настройку свойств компонента dataGridView. Так как массив одномерный, установите количество строк таблицы 1, количество колонок по умолчанию 10. Строка заголовка должна отображать номер элемента, а столбец заголовка не требуется.
  10. Примерный вид формы при запуске:

    Таблица 1. Основные свойства табличных компонентов

    Свойство Назначение
    RowCount, ColumnCount задают число строк и столбцов таблицы (нумерация строк и столбцов начинается с нуля). Путем задания новых значений этих свойств можно динамически менять размерность таблицы
    RowHeadersVisible, ColumnHeadersVisible задают будут ли отображаться заголовки строк и столбцов
    ColumnHeadersHeights, RowHeadersWidths задают высоту и ширину ячеек таблицы. Размеры таблицы и её ячеек задаются в пикселях и могут изменяться во время работы программы по содержимому ячеек
    ColumnHeadersHeightSizeMode определяет поведение при изменении высоты заголовков столбцов. Если установить это свойство в значение EnableResizing, то высота заголовков столбцов не будет изменяться по содержимому, и можно будет в конструкторе задать высоту строки заголовка
    AutoSizeColumnMode определяет режим автоматической установки размера для видимых столбцов (рекомендуется установить значение Fill)
    AllowUserToAddRows определяет, есть ли возможность добавления строк (рекомендуется установить значение false)
    AllowUserToDeleteRows определяет, есть ли возможность удаления строк (рекомендуется установить значение false)
    ReadOnly определяет, может ли пользователь редактировать содержимое ячеек таблицы (рекомендуется устанавливать true при вводе с клавиатуры и false — в остальных случаях)
    dataGridView1.Rows[i].Cells[j].Value используется для доступа к отдельной ячейке с указанием номера столбца и номера строки. Используя цикл для перебора номеров строк и столбцов таблицы, можно поочередно обращаться к каждой ячейке
  11. Добавьте на форму поле ввода с кнопкой-переключателем numericUpDown. При нажатии на кнопку-переключатель должно устанавливаться соответствующее количество ячеек таблицы и её ширина. Добавьте метод нажатия на кнопку numericUpDown и внесите необходимые команды в тело метода. Также предусмотрите изменение необходимых полей в классе массива.
  12. При переключении кнопок-переключателей radioButton в контейнере groupBox должен меняться способ
    ввода массива. Создайте метод обработки события щелчка по контейнеру.
  13. При выборе пользователем кнопки «С клавиатуры» таблица на форме должна очищаться и переводиться в состояние редактирования пользователем.
  14. При выборе пользователем кнопки «Случайно» таблица на форме должна заполняться случайными числами в интервале [-100; 100] и переводиться в состояние запрета редактирования пользователем.
  15. При выборе пользователем кнопки «Из файла» должно открываться диалоговое окно для выбора файла с данными таблицы. В файле должны храниться следующие данные: первая строка — размер массива, вторая строка — элементы массива через пробел. При открытии файла должен устанавливаться корректный размер таблицы, и таблица должна заполняться значениями из файла. В случае недостаточного количества элементов в файле, она должна дополняться нулями.
  16. Все расчёты в программе должны происходить при нажатии
    на кнопку «Вычислить». Создайте соответствующий обработчик события нажатия на кнопку. При нажатии на кнопку «Вычислить» значения из таблицы должны считываться в массив (с помощью вызова одного из методов класса массива), а затем с этим массивом должны производить действия и вычисления по заданию (опять же с помощью вызова необходимых методов класса массива).
  17. Составьте протокол испытаний приложения.
  18. Пример оформления протокола испытаний:

    Проверяемые требования Действия пользователя и вводимые значения Результаты и сообщения программы
    Способность программы обеспечить ввод размера массива С помощью кнопок «Вверх-вниз» задать различные значения от 1 до 100. Проверить возможность задания размера путем ввода с клавиатуры Размер массива изменяется, количество ячеек в таблице соответствует заданному размеру массива
    Способность программы обеспечить контроль вводимого размера массива. В поля ввода попробовать ввести:
    1) отрицательное значение
    2) нуль
    3) 101
    4) дробное значение
    5) символ, отличный от цифры
    В поле ввода можно ввести только целое число от 1 до 100.
    и т.д. для всех функций, которые были выделены в п.3!!    
  19. Протестируйте приложение в соответствии с протоколом испытаний. Отследите, чтобы не возникали ошибки выполнения при недопустимости исходных данных, например, если пользователь оставил одну или несколько ячеек таблицы пустыми, ввел в ячейку недопустимые символы, открыл файл с недопустимым форматом и т.д. Подумайте, как можно предотвратить такие ошибки. Добавьте необходимые методы проверки правильности ввода исходных данных.
  20. Протестируйте приложение при различных значениях
    размерности массива, в режиме ввода с клавиатуры, случайного ввода и вычитывания из файла. Добавьте в отчет скриншоты различных вариантов выполнения программы.

Подведение итогов лабораторной работы:

Результатом выполнения лабораторной работы должен быть
проект, сохранённый в отдельной папке, и отчёт. Отчёт должен содержать:

  1. название лабораторной работы, цель работы;
  2. текст вашего задания с указанием номера варианта;
  3. структуру входных и выходных данных;
  4. функциональные характеристики проекта;
  5. структуру класса для работы с массивом и диаграмму класса;
  6. алгоритм основного вычислительного метода класса;
  7. протокол испытаний;
  8. скриншоты проекта на этапе выполнения, соответствующие протоколу испытаний;
  9. колонтитулы с вашей фамилией и номером группы.

Продемонстрируйте результаты работы преподавателю и
получите оценку.

Контрольные вопросы:

  1. Какие свойства таблицы dataGridView можно установить на этапе конструирования? Поясните назначение этих свойств.
  2. Какое свойство таблицы dataGridView позволяет обратиться к определённой ячейке в программе?
  3. Сколько методов получилось в классе массива, какое у них назначение?
  4. Сколько методов — обработчиков событий получилось в классе Program, какие события они обрабатывают?

1. Массивы в C#

2. Различные классификации типов данных

Типы
данных
Простые
Типы
данных
Структуриро
ванные
Встроенные
Типы
данных
Статические
Динамические
Определяемые
программистом

3.

Основная классификация типов C#
Типы
данных
Тип void
Значения
Указатели
Ссылочные
Перечисления
Структурные
типы
Булевский
Целые
Вещественные
Финансовый
Символьный
Типы nullable
object
Массивы
Строки string
Классы
Интерфейсы
Делегаты
Структуры
Типы C# разделяют по способу хранения элементов на типы-значения и ссылочные типы.
Элементы значимых типов (value types), представляют собой просто последовательность битов в
памяти, необходимый объем которой выделяет компилятор. Величины значимых типов хранят
свои значения непосредственно. Величина ссылочного типа хранит не сами данные, а ссылку на
них (адрес, по которому расположены данные). Сами данные хранятся в хипе.

4.

Массивы
Массив — ограниченная совокупность однотипных
величин
Элементы массива имеют одно и то же имя, а
различаются по порядковому номеру (индексу)
Пять простых переменных (в стеке):
a
b
c
d
Массив из пяти элементов значимого типа (в хипе):
a[0]
a[1]
a[2]
a[3]
a
4
e
a[4]

5. Массивы в C#

В языке C# каждый индекс массива
изменяется в диапазоне от 0 до некоторого
конечного значения. Массивы в языке C#
являются настоящими динамическими
массивами. Как следствие этого, массивы
относятся к ссылочным типам, память им
отводится динамически в «куче». Массивы
могут быть одномерными и многомерными.

6. Объявление одномерного массива

<тип>[] <объявители>;
каждый объявитель может быть именем или
именем с инициализацией.
Объявление массива:
•с инициализацией
•с отложенной инициализацией

7. Объявление одномерного массива

Объявление массива с инициализацией:
•Явная инициализация константным массивом
•Создание массива с помощью операции new
Пример явной инициализации:
double[] x = {5.5, 6.6, 7.7};
в динамической памяти создаётся константный массив с заданными
значениями, с которым и связывается ссылка.
Пример сознания с помощью операции new:
int[] d = new int[5];
массив создаётся в динамической памяти, его элементы получают
начальные нулевые значения, и ссылка связывается с этим массивом.

8. Объявление одномерного массива

Объявление с отложенной инициализацией
выполняется в 2 этапа:
1. Объявление массива
2. Инициализация массива

9. Объявление одномерного массива

Объявление массива
Пример:
int[ ] a;
При объявлении с отложенной инициализацией сам массив
не формируется, а создаётся только ссылка на массив,
имеющая неопределённое значение Null. Поэтому пока
массив не будет реально создан и его элементы
инициализированы, использовать его в вычислениях
нельзя!!!

10. Одномерные массивы

• Варианты описания массива:
тип[] имя;
тип[] имя = new тип [ размерность ];
тип[] имя = { список_инициализаторов };
тип[] имя = new тип [] { список_инициализаторов };
тип[] имя = new тип [ размерность ] { список_инициализаторов };
• Примеры описаний (один пример на каждый вариант описания,
соответственно):
int[] a;
// элементов нет
int[] b = new int[4];
// элементы равны 0
int[] c = { 61, 2, 5, -9 };
// new подразумевается
int[] d = new int[] { 61, 2, 5, -9 }; // размерность вычисляется
int[] e = new int[4] { 61, 2, 5, -9 };
// избыточное описание
10

11. Размерность массива

• Количество элементов в массиве (размерность) задается при выделении
памяти и не может быть изменена впоследствии. Она может задаваться
выражением:
short n = …;
string[] z = new string[2*n + 1];
• Размерность не является частью типа массива.
• Элементы массива нумеруются с нуля.
Для обращения к элементу массива после имени массива указывается
номер элемента в квадратных скобках, например:
w[4]
z[i]
• С элементом массива можно делать все, что допустимо для переменных
того же типа.
• При работе с массивом автоматически выполняется контроль выхода за
его границы: если значение индекса выходит за границы массива,
генерируется исключение IndexOutOfRangeException.
11

12. Объявление одномерного массива

Инициализация массива:
Пример:
a = new int[10];
Выражение, задающее границу изменения индексов, в динамическом
случае может содержать переменные. Единственное требование –
значения переменных должны быть определены в момент объявления!
Пример:
n=Convert.ToInt32(Textbox1.Text);
a = new int[n];

13. Пример 1. С клавиатуры ввести элементы массива из 20-ти значений. Вывести элементы массива с указанием для каждого его индекса

(порядкового номера в массиве)

14. Ввод одномерного массива в Windows Forms

15. Ввод одномерного массива в Windows Forms

namespace одномерный_массив
{
public partial class Form1 : Form
{
int[] a;
int i;
public Form1()
{
InitializeComponent();
a = new int[10];
i = 0;
textBox1.Focus();
label1.Text = «Элемент » + Convert.ToString(i + 1);
}

16. Ввод одномерного массива в Windows Forms

private void button1_Click(object sender, EventArgs e)
{
a[i] = Convert.ToInt32(textBox1.Text);
i++;
if (i < 10)
{ label1.Text = «Элемент » + Convert.ToString(i + 1);
textBox1.Focus();
}
else
{ button1.Enabled = false;
label1.Text = «Конец»;
}
textBox1.Text = «»;
}

17. Вывод одномерного массива

18. Вывод одномерного массива

Первый вариант:
private void button2_Click(object sender, EventArgs e)
{ listBox1.Items.Clear();
for(int k=0; k<10; k++)
listBox1.Items.Add(Convert.ToString(a[k]));
}

19. Вывод одномерного массива

Новый оператор цикла:
foreach(тип идентификатор in массив) оператор
Цикл работает в полном соответствии со своим названием – тело цикла
выполняется для каждого элемента в контейнере. Тип идентификатора
должен быть согласован с типом элементов, хранящихся в массиве
данных. На каждом шаге цикла идентификатор, задающий текущий
элемент массива, получает значение очередного элемента в
соответствии с порядком, установленным на элементах массива. С этим
текущим элементом и выполняется тело цикла — выполняется столько раз,
сколько элементов находится в массиве. Цикл заканчивается, когда
полностью перебраны все элементы массива.

20. Вывод одномерного массива

Второй вариант:
private void button2_Click(object sender, EventArgs e)
{ listBox1.Items.Clear();
foreach (int item in a)
listBox1.Items.Add(Convert.ToString(item));
}

21. Действия с массивами

• Массивы одного типа можно присваивать друг другу. При этом
происходит присваивание ссылок, а не элементов:
int[] a = new int[10];
int[] b = a;
// b и a указывают на один и тот же массив
• Для удобства работы с массивами в C# существует базовый класс
Array, в котором собраны основные методы обработки массивов.
• В лабораторной работе 1 методы класса Array не используются. Цель
работы – написание собственных методов для выполнения требуемых
функций.
©Павловская Т.А. (СПбГУ
ИТМО)
21

22. Пример (не лучший способ)

Для массива, состоящего из 6 целочисленных элементов,
программа определяет:
• сумму и количество отрицательных элементов;
• максимальный элемент.
22

23. Программа

const int n = 6;
int[] a = new int[n] { 3, 12, 5, -9, 8, -4 };
Console.WriteLine( «Исходный массив:» );
for ( int i = 0; i < n; ++i ) Console.Write( «t» + a[i] );
Console.WriteLine();
long sum = 0;
// cумма отрицательных элементов
int num = 0;
// количество отрицательных элементов
for ( int i = 0; i < n; ++i )
if ( a[i] < 0 ) {
sum += a[i]; ++num;
}
Console.WriteLine( «Сумма отрицательных = » + sum );
Console.WriteLine( «Кол-во отрицательных = » + num );
int max = a[0];
// максимальный элемент
for ( int i = 0; i < n; ++i )
if ( a[i] > max ) max = a[i];
Console.WriteLine( «Максимальный элемент = » + max );
23

24. Оператор foreach (упрощенно)

• Применяется для перебора элементов массива. Синтаксис:
foreach ( тип имя in имя_массива ) тело_цикла
• Имя задает локальную по отношению к циклу переменную,
которая будет по очереди принимать все значения из массива,
например:
int[] massiv = { 24, 50, 18, 3, 16, -7, 9, -1 };
foreach ( int x in massiv ) Console.WriteLine( x );
Оператор foreach служит только для перебора и просмотра
значений в некоторой коллекции. Изменять данные в коллекции с
помощью него нельзя.
24

25. Программа с использованием foreach

int[] a = { 3, 12, 5, -9, 8, -4 };
Console.WriteLine( «Исходный массив:» );
foreach ( int elem in a )
Console.Write( «t» + elem );
Console.WriteLine();
long sum = 0;
// cумма отрицательных элементов
int num = 0;
// количество отрицательных элементов
foreach ( int elem in a )
for ( int i = 0; i < n; ++i )
if ( elem < 0 ) {
if ( a[i] < 0 ) {
sum += elem; ++num;
sum += a[i]; ++num;
}
}
Console.WriteLine( «sum = » + sum );
Console.WriteLine( «num = » + num );
int max = a[0];
// максимальный элемент
foreach ( int elem in a )
if ( elem > max ) max = elem;
Console.WriteLine( «max = » + max );
25

26. Работа с массивом, размерность которого вводится в процессе работы программы  Пример 5. Даны два n -мерных вектора. Найти сумму

Работа с массивом, размерность которого вводится в процессе работы
программы
Пример 5. Даны два n -мерных вектора. Найти сумму этих векторов.

27. Формирование значений элементов массива случайным образом

Random random = new Random();
for (int i=0;i<=n-1;i++)/*пробегая последовательно элементы массива*/
X[i]= random.Next(1,50); /* запишем туда случайное число, кото
рое сформирует компьютер в диапазоне [1..50]*/

28. Обмен значений двух переменных

3
5
5
3
3
28

Понравилась статья? Поделить с друзьями:
  • Ввод линукс машины в домен windows
  • Ввод компьютера на linux в домен windows
  • Ввод компьютера в домен windows server 2019
  • Ввод команд в командной строке windows 10
  • Ввод ключа продукта для windows 10 через командную строку