Распределенное обучение с TensorFlow и Python
AI_Generated 05.05.2025
В машинном обучении размер имеет значение. С ростом сложности моделей и объема данных одиночный процессор или даже мощная видеокарта уже не справляются с задачей обучения за разумное время. Когда. . .
CRUD API на C# и GraphQL
stackOverflow 05.05.2025
В бэкенд-разработке постоянно возникают новые технологии, призванные решить актуальные проблемы и упростить жизнь программистам. Одной из таких технологий стал GraphQL — язык запросов для API,. . .
Распознавание голоса и речи на C#
UnmanagedCoder 05.05.2025
Интеграция голосового управления в приложения на C# стала намного доступнее благодаря развитию специализированных библиотек и API. При этом многие разработчики до сих пор считают голосовое управление. . .
Реализация своих итераторов в C++
NullReferenced 05.05.2025
Итераторы в C++ — это абстракция, которая связывает весь экосистему Стандартной Библиотеки Шаблонов (STL) в единое целое, позволяя алгоритмам работать с разнородными структурами данных без знания их. . .
Разработка собственного фреймворка для тестирования в C#
UnmanagedCoder 04.05.2025
C# довольно богат готовыми решениями – NUnit, xUnit, MSTest уже давно стали своеобразными динозаврами индустрии. Однако, как и любой динозавр, они не всегда могут протиснуться в узкие коридоры. . .
Распределенная трассировка в Java с помощью OpenTelemetry
Javaican 04.05.2025
Микросервисная архитектура стала краеугольным камнем современной разработки, но вместе с ней пришла и головная боль, знакомая многим — отслеживание прохождения запросов через лабиринт взаимосвязанных. . .
Шаблоны обнаружения сервисов в Kubernetes
Mr. Docker 04.05.2025
Современные Kubernetes-инфраструктуры сталкиваются с серьёзными вызовами. Развертывание в нескольких регионах и облаках одновременно, необходимость обеспечения низкой задержки для глобально. . .
Создаем SPA на C# и Blazor
stackOverflow 04.05.2025
Мир веб-разработки за последние десять лет претерпел коллосальные изменения. Переход от традиционных многостраничных сайтов к одностраничным приложениям (Single Page Applications, SPA) — это. . .
Реализация шаблонов проектирования GoF на C++
NullReferenced 04.05.2025
«Банда четырёх» (Gang of Four или GoF) — Эрих Гамма, Ричард Хелм, Ральф Джонсон и Джон Влиссидес — в 1994 году сформировали канон шаблонов, который выдержал проверку временем. И хотя C++ претерпел. . .
C# и сети: Сокеты, gRPC и SignalR
UnmanagedCoder 04.05.2025
Сетевые технологии не стоят на месте, а вместе с ними эволюционируют и инструменты разработки. В . NET появилось множество решений — от низкоуровневых сокетов, позволяющих управлять каждым байтом. . .
Лабораторные работы си шарп. Массивы»
Приложения для Windows forms
Лабораторная работа 10
Выполнить: Создайте проект для подсчета суммы и среднего арифметического значения элементов одномерного массива.
Пример выполнения:
![]()
Рис. Форма «Массивы»
[Название проекта: Lab10
, название файла Lab10.cs
]
Выполнение:
- Создайте новый проект. Расположите элементы управления на новой форме (см. рисунок).
- Задайте свойству Multiline для текстового окна txtArray значение равное true (для того, чтобы в текстовом окне можно было выводить текст в несколько строк).
- Далее необходимо запрограммировать кнопку Вычислить (btnCalc) так, чтобы в текстовое окно выводились элементы массива, их сумма, а затем их среднее арифметическое. Для этого в процедуре, описывающей событие щелчка мыши по кнопке Вычислить, опишем переменные, которые мы будем использовать при решении поставленной задачи:
- Для среднего арифметического специальную переменную описывать не надо, потому что оно вычисляется по формуле sum разделить на 10.
- Для того чтобы задать значения элементов массива, воспользуемся циклом. Для генерации случайных чисел будем использовать переменную — экземпляр объекта
Random
: - Добавьте в цикл вычисление суммы элементов массива:
- Теперь осталось вывести элементы массива, сумму и среднее арифметическое в текстовое окно.
- Сначала выведите слово Массив:
- Теперь в цикле необходимо вывести элементы массива:
- Самостоятельно добавьте вывод в текстовое окно среднего арифметического.
- Запустите и отладьте программу.
private void btnCalc_Click(object sender, EventArgs e) { int[] arr = new int[10]; int sum=0; }
Random rand = new Random(); for(int i=0;i<arr.Length;i++) { arr[i] = rand.Next(20); //... }
txtArray.Text = "Массив: ";
for (int i = 0; i < arr.Length; i++) { txtArray.Text += arr[i].ToString()+" "; }
Дополнительное задание:
Контрольное задание:
Вопросы для самоконтроля:
- Как объявляется массив в VC#?
- Сколько элементов будет содержать массив, который описан с помощью следующего оператора:
- С помощью какого ключевого слова можно описать массив, который будет доступен всем модулям приложения?
Лекция
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(); // всего
баллов
для
каждой
страны
}
}
}
}
Соседние файлы в папке ЛК
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Содержание
- Заполнение и вывод массива
- Как создать массив в Form
- Решение
- Массивы в C#
- Вместо введения
- Как создать массив в C#
- Перебор элементов одномерного массива в C#
- В цикле foreach
- В цикле for
- Многомерные массивы
- Основные методы и свойства для работы с массивами в C#
- Свойства массивов C#
- Методы массивов в C#
- Перебор элементов многомерного массива C#
- В цикле foreach
- В цикле for
- Массивы массивов в C#
- Неявно типизированные массивы
- Итого
- C#. Урок 8. Массивы
- Объявление массивов и инициализация массивов
- Объявление массивов
- Инициализация массивов
- Неявная типизация
- Доступ к элементам массива. Обход элементов массива.
- Передача массива в метод
- Многомерные массивы
- Прямоугольные массивы
- Зубчатые массивы
- Класс System.Array
- Массивы массивов (Руководство по программированию на C#) Jagged Arrays (C# Programming Guide)
- Пример Example
Заполнение и вывод массива
Здравствуйте! не могу корректно написать код к задаче: Заполнить массив A(50), целыми случайными числами в диапазоне (10; 20). Распечатать массив. Найти элементы массива, кратные 5. Вывести количество таких элементов, индекс и значение каждого из таких элементов, сумму таких элементов.
привожу ниже код, но в нем недоработки, не пойму как заполнить второй массив, где будут храниться все числа, кратные 5, подскажите пожалуйста
Заполнение и вывод массива
нужно написать консольную программу которая заполняет массив в 1000000 элементов случайными.
Заполнение и вывод двумерного массива
Пробовал заполнить двумерный массив(матрицу) случайными числами и вывести в ячейках StringGrid но.
Заполнение массива и вывод на экран
В общем помогите срочно нужно написать программу. Условие: Необходимо создать одномерный массив.
Заполнение и вывод массива матриц
Здравствуйте. Уважаемые программисты прошу Вашей помощи. Преподаватель задал выполнить лабораторные.
Здравствуйте! не могу корректно написать код к задаче: Заполнить массив A(50), целыми случайными числами в диапазоне (10; 20). Распечатать массив. Найти элементы массива, кратные 5. Вывести количество таких элементов, индекс и значение каждого из таких элементов, сумму таких элементов.
привожу ниже код, но в нем недоработки, не пойму как заполнить второй массив, где будут храниться все числа, кратные 5, подскажите пожалуйста
Значения найденных элементов будут храниться во втором массиве.
А где нужно сохранять их индексы?
Добавлено через 1 минуту
Если надо могу скинуть проект, а то из-за большого количества label можно не разобраться
Добавлено через 11 минут
ну вот с комментариями код
Как только переменная rnd создана, мы можем генерировать случайные числа, вызывая метод Next() это переменной: rnd.Next(); В скобках указывается диапазон значений. Например, если необходимо сгенерировать числа от 0 до 10, то следует написать так: rnd.Next(10);
a[i] = rnd.Next(10) + 10; //генерация целого числа, в диапазоне от 0 до 10, которое увеличивается на 10
Элементы заполненного массива, кратные 5, нужно складывать в отдельный массив, a5[50]. Индексы элементов, удовлетворяющих заданному условию, сохраняются в отдельной переменной (строка).
Для вывода массива на экран используется строковая переменная. Для вывода массива в виде матрицы, а не одной строкой, используется символ перехода на новую строку «\n»
Источник
Как создать массив в Form
Добрый день.Работаю в M Visual Studio 10. Объявил класс как в хидере
Хочу добавить в Форму одним из членов массив из экземпляров таких классов. Вот что написал
Создать win form, используя шаблон windows form в clr, однако такого шаблона на моей студии 2013 нет
есть необходимость создать win form используя шаблон windows form в clr, однако такого шаблона на.
как создать такую form’y
Подскажите, пожалуйста, как создать такую форму с такими же полями и галочка то бы была цветная.
Как создать и открыть новую form?
Привет, создаю программу, в которой должно быть две и более form, так же хочу, чтоб form2.
Вылетает с ошибкой: Сылка на объект не указывает на объект.
Подскажите пож где еще чего не хватает
Вложения
Test.rar (669.7 Кб, 16 просмотров) |
Решение
Вложения
Test.rar (671.6 Кб, 43 просмотров) |
Вложения
Finder.rar (816.4 Кб, 14 просмотров) |
Плохая идея.Надо вынести в отдельный файл.
Комментарий модератора | ||
|
Как создать меню в Windows Form
Здравствуйте, подскажите как создать меню в форме. Есть элемент MenuStrip. При нажатии на пункт.
Как создать Windows Form на vs 2017?
Готовая консольная программа есть. Вообще не понятно, в интернете размыто.
Как в Contact Form 7 создать checkbox?
Там есть кнопка checkbox, но что бы я не делал, checkbox не появляется. Спасибо.
Как создать базу данных программно из Windows Form?
Заранее извиняюсь, возможно не в тот раздел пишу, но я новичок и хочу узнать ответ на один из.
Источник
Массивы в C#
На данный момент мы знаем, что такое переменная, как задаётся её тип и как переменную инициализировать. С массивами C# мы уже сталкивались в работе, когда рассматривали циклы в C#. Но глубоко в тему не погружались. Теперь, когда мы знаем какие виды циклов имеются в C# и в чём их отличия, можно детально изучать вопросы, связанные с использованием массивов C#.
Вместо введения
Массив — это структура данных, которая содержит ряд переменных одного типа, доступ к которым осуществляется по индексу. Массивы в C# могут быть одномерными, многомерными, пустыми, также в C# массивы могут быть зубчатыми (массивы массивов). Но обо всём по порядку.
Как создать массив в C#
Чтобы объявить массив в C# необходимо использовать следующую конструкцию:
где Type — это тип элементов массива, а ArrayName — его имя. То есть, визуально, массив от обычной переменной отличает наличие после названия типа данных квадратных скобок. Например, вот так можно определить массив целых чисел типа int :
Так можно объявить массивы строк и вещественных чисел:
Например, создадим массив, который будет хранить 5 чисел типа int :
Теперь у нас есть экземпляр массива, который может хранить пять чисел. По умолчанию C# задал каждому элементу значение 0 (ноль). Проверить это легко с помощью уже известного нам цикла foreach :
Язык C# достаточно гибкий, поэтому разработчики языка предусмотрели и тот вариант, что уже на этапе создания массива вы можете знать какие значения будут содержать его элементы, в этом случае, мы можем использовать такую конструкцию:
Здесь мы объявили переменную-массив, инициализировали её и сразу задали каждому элементы своё значение. Оба варианта: и задание значения каждому элементу в по-отдельности и как в примере выше полностью равнозначны. Но и на этом разработчики C# не остановились, чтобы дать разработчику максимум удобства работы с этим языком программирования. Ниже я покажу какие ещё варианты создания массивов могут применяться в C# на примере всё того же массива из пяти чисел:
Итого — целых пять возможных вариантов того, как задать массив в C#.
Перебор элементов одномерного массива в C#
В цикле foreach
Выше я показал один из способов как перебрать элементы массива с использованием цикла foreach :
В цикле for
С этим циклом мы тоже уже знакомы. Попробуем реализовать озвученный выше вариант перебора элементов массива — прочитать значения только элементов с чётными индексами. С циклом for это можно сделать, например, вот так:
Вывод консоли будет выглядеть следующим образом:
Счётчик цикла: 1. Читаем элемент с индексом 2 значение: 16
Счётчик цикла: 3. Читаем элемент с индексом 6 значение: 80
Счётчик цикла: 4. Читаем элемент с индексом 8 значение: 90
Счётчик цикла: 5. Читаем элемент с индексом 10 значение: 102
Условие в теле цикла:
Требуется для того, чтобы мы не вышли за границы массива. Так, уже на шестом шаге цикла мы бы получили то, что должны прочитать элемент с индексом 6*2=12 которого не существует (максимальный индекс у нас в примере — 10 ) и программа бы выдала нам исключение:
Сообщение = Index was outside the bounds of the array.
Выход за границы массива. Поэтому мы и обезопасили себя от этого исключения сделав проверку — элемент массива с каким индексом мы пытаемся проверить, а сам цикл закончился аккурат на пятом шаге.
В приведенном выше примере остается ещё один, возможно, непонятный для новичков в C# момент, а именно, условие выхода из цикла:
Многомерные массивы
До сих пор мы имели дело с так называемыми одномерными массивами, которые можно себе представить в уме как ряд переменных (числовых, строковых, символьных и т.д.). Визуально, наши одномерные массивы выглядели так:
Однако, на одном измерении массива C# не заканчивается. Теоретически мы можем задать массив с любым количеством измерений (которые кстати, называются рангом), но на практике, обычно встречаются одно-, двух- и намного реже — трехмерные массивы. Образно, двумерный массив можно представить как обычную таблицу, а трехмерный массив — как куб переменных. Например, чтобы задать двумерный массив чисел (ранг = 2), необходима сделать вот такое объявление переменной:
обратите внимание на запятую в квадратных скобках. В C# существует простое правило: ранг массива всегда на единицу больше количества запятых в квадратных скобках. Массив с рангом равным 3 (трехмерный) будет объявляться так:
Инициализируются многомерные массивы точно также, как и одномерные — необходимо задать количество элементов в каждом измерении. Например, зададим массив состоящий из двух столбцов и пяти строк:
Теперь, чтобы обратиться как какому-либо элементу массива, нам необходимо указывать два индекса — индекс строки и индекс столбца. Например, получим значение из четвертой строки второго столбца. Так как нумерация элементов в массивах начинается с нуля, то код будет такой:
Для создания многомерных массивов могут использоваться те же самые языковые конструкции, которые показаны выше для одномерных массивов. Возможно, что на первом этапе работы с массивами в C# сложность будет представлять перебор элементов многомерных массивов. На самом деле, ничего сложного в этом нет.
Основные методы и свойства для работы с массивами в C#
Для того, чтобы показать перебор элементов многомерных массивов, нам придётся забежать немного вперед и прояснить для себя один момент. В C# массивы представляют собой объекты со своими свойствами и методами. Если Вы имели дело с другими языками программирования, например, с Delphi, то знаете, что для получения, например, длины массива необходимо использовать отдельный метод — Length(). В C# же, в силу того, что массив — это объект, вы можете вызвать методы и читать свойства этого объекта просто написав его имя и нажав точку. В результате вы увидите вот такой список:
Подобная функциональность C# достаточно сильно упрощает изучение языка — нам не надо держать в голове перечень отдельных методов для работу с тем или иным типов данных, всё, что нам необходимо — это вызвать список методов и свойств объекта и выбрать необходимый. О том, как такое поведение осуществляется в C# мы обязательно обсудим в одной из статей блога, а пока я перечислю основные свойства и методы объектов-массивов в C#.
Свойства массивов C#
Название | Тип данных | Описание |
Length | int | Возвращает общее число элементов во всех измерениях массива |
Rank | int | Получает ранг (число измерений) массива |
Long Length | long | Возвращает 64-разрядное целое число, представляющее общее число элементов во всех измерениях массива |
Методы массивов в C#
Название | Тип данных | Описание |
Get Length() | int | Возвращает 32-разрядное целое число, представляющее количество элементов в заданном измерении массива |
Get Lower Bound() | int | Получает Индекс первого элемента заданного измерения в массиве |
Get Upper Bound() | int | Получает Индекс последнего элемента заданного измерения в массиве. |
Это далеко не все свойства и методы для работы с массивами в C#, но приводить их сейчас не имеет смысла, так как, во-первых, перечисленных свойств достаточно, чтобы понять как работать с массивами и, во-вторых, даже приведя перечень оставшихся свойств и методов, мы не сможем ими правильно воспользоваться, так как знаний у нас с вами пока не достаточно.
Перебор элементов многомерного массива C#
В цикле foreach
Цикл foreach предоставляет нам самый простой и понятный способ доступа к каждому элементы массива. Например, возьмем наш двумерный массив и попробуем перебрать все его элементы в цикле foreach:
В результате, в консоли появится строка, содержащая элементы массива:
В цикле for
Как я уже говорил выше, цикл for даёт более гибкий механизм работы с массивами C#. Итак, получим все значения элементов из последнего столбца. Приведу только два варианта. Вариант 1 — когда ранг массива известен и мы знаем размерность (количество элементов) последнего измерения:
Второй вариант — нам надо прочитать значения в последнем столбце массива, но, при этом мы не знаем размерность второго измерения. Чтобы было по-понятнее, я объявил в коде две дополнительные переменные :
В цикле мы запрашиваем элемент с индексами:
Соответственно, если необходимо пройти по всем элементам массива, то можно использовать вложенные циклы for и организовать доступ к элементам массива в любом порядке — построчно, по столбцам…да хоть по диагонали — тут всё будет зависеть от задачи.
Массивы массивов в C#
Массив массивов — это массив, элементы которого сами являются массивами. Элементы массива массивов могут иметь различные измерения и размеры. Массив массивов также иногда называется нерегулярным или зубчатым массивом. Объявление массива массивов выглядит следующим образом:
здесь мы объявили массив массивов на три элемента где каждый элемент — это отдельный массив. Так как массивы в C# относятся к ссылочным типам данных, то по умолчанию каждый элемент массива равен null и, чтобы использовать элементы такого массива, нам необходимо их также инициализировать. Например, так:
Теперь наш массив содержит три массива на 2, 3 и 4 элемента соответственно и каждый из этих массивов будет содержать целые числа. Чтобы заполнить массив значениями элементов, можно воспользоваться любым из способов, которые мы рассмотрели для одномерных массивов, например, так:
Для доступа к элементам массива массивов необходимо использовать вот такую языковую конструкцию:
Неявно типизированные массивы
Как и обычные переменные, C# допускает объявление неявно типизированных массивов. При этом, компилятор сам определить наиболее подходящий тип элементов такого массива. Например,
При этом, если Вы попытаетесь объявить вот такой массив:
то компилятор C# вернет следующую ошибку:
Работать с такими массивами можно точно также, как и со всеми другими типами массивов, которые были рассмотрены выше.
Итого
Итак, сегодня мы рассмотрели массивы в C# — для чего нужны массивы, какие бывают массивы, как получить доступ к элементам массива, а также их основные свойства и методы в C#. Возможно, что пока тяжело понять всю мощь и преимущества использования массивов в программировании, но, со временем всё встанет на свои места.
Источник
C#. Урок 8. Массивы
Одной из наиболее часто используемых структур данных является массив. О том как работать с массивами в C# вы узнаете в этом уроке.
Исходный код примеров из этой статьи можете скачать из нашего github-репозитория.
Объявление массивов и инициализация массивов
Объявление массивов
Массив – это структура данных для хранения элементом определенного типа, имеющая фиксированный размер. Доступ к элементам массива производится по числовому индексу.
Для объявления массива, после указания типа его элементов, ставятся квадратные скобки:
Перед использованием, массив обязательно нужно проинициализировать, это можно сделать сразу, при его объявлении:
Либо после объявления:
Для доступа к элементам массива используются числовые индексы. Значения элементов массива будут равны значению по умолчанию для типа, массив которого был создан.
Например, для указанного выше a3 – это будут нули, так как для типа int значение по умолчанию: 0;
Если попытаться вывести элементы массива na1 :
то приложение не будет собрано, т.к. массив предварительно нужно проинициализировать.
Инициализация массивов
Рассмотрим различные варианты инициализации массива. Как уже было сказано, можно просто указать количество элементов в массиве, при этом его элементам будут присвоены значения по умолчанию:
После объявления массива значения элементам присваиваются через индекс:
Есть возможность задать конкретные значения в момент объявления с использованием ключевого слова new и указанием типа:
Либо без ключевого слова new:
Неявная типизация
Либо предоставить возможность “поработать” системе вывода типов:
Доступ к элементам массива. Обход элементов массива.
Как уже было сказано выше, за доступ к элементам массива отвечают числовые индексы:
При этом, если вы укажете индекс больше, чем максимально возможный, то будет выброшено исключение:
Приведенная выше строка приведет к выбросу следующего исключения:
Более удобным для обхода элементов будет foreach :
Преимущество цикла for состоит в том, что в нем вы можете модифицировать элементы массива:
Передача массива в метод
Массивы являются ссылочным типом данных, это означает, что их значения хранятся в куче, а имя переменной массива является ссылкой на соответствующую область памяти. При передаче массива в качестве аргумента в метод, происходит присваивание значения переменной массива переменной определяющей аргумент, а так как имя массива – это ссылка, то фактически происходит передача ссылки на значение в куче. Поэтому, если вы передали массив в функцию и внутри этой функции произошла модификация этого массива, то исходный массив тоже изменится.
Вызовем его в методе Main :
Ниже приведена иллюстрация того, как массив и ссылки на него располагаются в памяти.
Многомерные массивы
Массивы имеющее более одного измерения называются многомерными. До этого мы работали с одномерными массивами. В C# предлагается к использованию два вида многомерных массивов: прямоугольные и зубчатые, которые иногда называются массивы массивов.
Прямоугольные массивы
Прямоугольные массивы могут содержать несколько измерений (два и более), при этом количество элементов в каждом подизмерении (в каждой строке) одинаково.
Рассмотрим на примерах работу с такими массивами:
Зубчатые массивы
В зубчатых массивах элементами верхнего уровня являются другие массивы, это позволяет создавать многомерные структуры, у которых строки имеют разную длину:
Класс System.Array
Свойства класса System.Array
Имя свойства
Назначение
Число элементов в массиве. Учитываются все измерения.
Ранг массива – число измерений.
Методы класса System.Array
Символ * после названия метода означает, что он имеет более одной сигнатуры, за дополнительной информацией обращайтесь к официальной документации.
Имя метода
Назначение
Выполняет поиск элемента в массиве.
Clear(Array, Int32, Int32)
Присваивает значение по умолчанию определенному количеству элементов массива начиная с заданного индекса.
Создает копию массива (неполную).
Copy(Array, Array, Int32)*
Копирует данные из одного массива в другой в заданном количестве.
Копирует элементы из текущего массива в заданный, начиная с указанного индекса.
Exists (T[], Predicate )
Определяет наличие элемента удовлетворяющему предикату.
Возвращает значение по указанному индексу.
Возвращает индекс первого вхождения элемента в массиве.
Задает обратный порядок для элементов в массиве.
Сортирует элементы массива.
Для вывода содержимого массива в консоль создадим метод PrintArray :
Ниже приведены примеры использования представленных выше методов и свойств класса System.Array :
Исходный код примеров из этой статьи можете скачать из нашего github-репозитория.
Источник
Массивы массивов (Руководство по программированию на C#) Jagged Arrays (C# Programming Guide)
Массив массивов — это массив, элементы которого являются массивами и могут быть различных размеров. A jagged array is an array whose elements are arrays, possibly of different sizes. Массив массивов иногда называется нерегулярным массивом. A jagged array is sometimes called an «array of arrays.» В следующих примерах показано, как объявлять и инициализировать массивы массивов, а также получать доступ к ним. The following examples show how to declare, initialize, and access jagged arrays.
Ниже объявляется одномерный массив из трех элементов, каждый из которых является одномерным массивом целых чисел: The following is a declaration of a single-dimensional array that has three elements, each of which is a single-dimensional array of integers:
Каждый элемент представляет собой одномерный массив целых чисел. Each of the elements is a single-dimensional array of integers. Первый из них содержит 5 целых чисел, второй — 4, а третий — 2. The first element is an array of 5 integers, the second is an array of 4 integers, and the third is an array of 2 integers.
Кроме того, с помощью инициализаторов можно заполнять элементы массива значениями (при этом вам не потребуется знать размер массива). It is also possible to use initializers to fill the array elements with values, in which case you do not need the array size. Пример: For example:
Также массив можно инициализировать при объявлении, как показано ниже: You can also initialize the array upon declaration like this:
Доступ к отдельным элементам массива можно получить способами, показанными в следующих примерах: You can access individual array elements like these examples:
Массивы массивов и многомерные массивы можно смешивать. It’s possible to mix jagged and multidimensional arrays. Ниже показаны объявление и инициализация одномерного массива массивов, элементами которого являются двухмерные массивы разного размера. The following is a declaration and initialization of a single-dimensional jagged array that contains three two-dimensional array elements of different sizes. Дополнительные сведения см. в разделе Многомерные массивы. For more information, see Multidimensional Arrays.
В этом примере демонстрируется доступ к отдельным элементам, для чего отображается значение элемента [1,0] первого массива ( 5 ): You can access individual elements as shown in this example, which displays the value of the element [1,0] of the first array (value 5 ):
Метод Length возвращает число массивов, содержащихся в массиве массивов. The method Length returns the number of arrays contained in the jagged array. Допустим, предыдущий массив был объявлен с использованием следующей строки: For example, assuming you have declared the previous array, this line:
возвращает значение 3. returns a value of 3.
Пример Example
В этом примере создается массив, элементы которого являются массивами. This example builds an array whose elements are themselves arrays. Все элементы массива имеют разный размер. Each one of the array elements has a different size.
Источник
Loops
Programming often requires repeated execution of a given sequence of operations. Loop is a basic programming design that allows multiple execution of a source code snippet. Depending on the type of the loop, the program code in it is repeated either a fixed number of times or while a condition is in effect.
A loop that never ends is called an infinite loop. The use of an infinite loop is rarely required except in cases where the break operator is used in the body of the cycle to stop its execution prematurely. Let’s take a look at the Cycle constructs in the C# language.
While loop
The simplest and most used loop. Code structure and block scheme are as shown:
while (condition) { Loop body; }
For the while loop, the boolean expression (condition) is first calculated and if the result is true, the sequence of operations in the body of the loop is performed. Then the input condition is checked again and, if true, the body of the cycle is again performed. All this is repeated over and over again until at some point the conditional statement returns false. At this point, the loop ends and the program continues from the next row immediately after the loop.
Do-While loop
It is similar to the While loop, except that the boolean condition is checked after the loop runs. This type of loop is called a post-test loop. A do-while loop looks like this:
do { Loop body; } while (condition);
The body of the loop is initially executed. Then condition is checked. If it is true, the body of the loop is repeated, otherwise the loop ends. This logic is repeated until the loop condition is violated. The body of the loop is repeated at least once. If the loop condition is always true, the loop will never end.
The Do-While loop is used when you need to ensure that the sequence of operations in it is executed repeatedly and at least once at the beginning of the loop.
For loop
These loops are a bit more complicated than the While and Do-While loops, but they can solve more complicated tasks with less code.
Logic scheme is shown on the picture.
for (initialization; condition; counter refresh) { Loop body; }
Since none of the listed elements of the for-loop is mandatory, all of them can skipped and an infinite loop will be created:
for ( ; ; ) { Loop body; }
For loop – initialization
for (int num = 0; ...; ...) { // num variable can be accessed only inside the for loop } // outside the num variable cannot be accessed and used
Initialization runs only once, just before entering the loop. Typically, the initialization block is used to declare the variable-counter (also called the leading variable) and set its default value. This variable is «visible» and can only be used within the loop. It is possible for the initialization block to declare and initialize more than one variable.
For loop – condition
for (int num = 0; num< 10; ...) { Loop body; }
The loop condition is performed once before each iteration of the loop, just as with the while loops. When the result is true, the loop body is executed, and when false it is skipped and the loop ends (passes to the rest of the program immediately after the loop).
For loop – refreshing counter
for (int num = 0; num< 10; num++) { Loop body; }
This code is executed after each iteration after the completion of the loop body. It is most often used to update the counter value.
For loop – loop body
The body of the loop contains an arbitrary block of source code. It contains the leading variables declared in the initialization block of the cycle.
Foreach loop
This loop serves to crawl all elements of an array, list, or other collection of elements.
Here’s how one foreach loop looks like:
foreach (variable in collection) { statements; }
It is preferred by programmers because it saves writing code when required to craw all elements of specific collection.
Break operator
It is used to prematurely exit a loop before it completes its execution in its natural way. When break operator occurs, the loop is terminated and the execution of the program continues from the next row immediately after the body of the loop. The termination of a loop with the break operator can only occur from his body when it is executed in the iteration of the loop. When a break is executed, the code after it in the body of the loop is skipped and not executed.
Continue operator
The operator stops the current iteration of the innermost loop without escaping from it.
Array
The arrays are an integral part of most programming languages. They represent sets of variables that are called elements:
The array elements in C# are numbered 0, 1, 2, … N-1. These element numbers are called indexes. The number of elements in an array is called the array length.
All elements of an array are of the same type, whether primitive or reference. This helps to present a group of homogeneous elements such as ordered sequenced sequence and to process as a whole.
The arrays can be of different sizes, the one-dimensional and two-dimensional arrays are being the most common. One-dimensional arrays are also called vectors, and two-dimensional arrays – matrix.
List<T>
List<T> is the template version of ArrayList. When initializing a List<T> object, you specify the type of items that the list will contain; replace T-type markings with some real type of data (such as a number or string). The List class is represented in memory as an array, one of which holds its elements, and the rest is free and is kept as a backup. Thanks to the spare empty elements in the array, the addition operation almost always manages to add the new element without expanding the array. Sometimes, of course, resizing is required, but since each resizing doubles the size of the array, it happens so rarely that it can be ignored against the background of the number of additions.
Sample tasks
1) Create Windows Forms application which demonstrates all types of loops.
Solution:
Create new Windows Forms Application project and design the form as show on the picture:
Name the controls as follows:
— ListBox – lbResult;
— Button „For” – bFor;
— Button „While“ – bWhile;
— Button „Endless“ – bEndless;
— Button „Do“ – bDo;
— Button „Nested“ – bNested;
— Button „Foreach“ – bForeach;
— Button „Graphic1“ – bGraphic1;
— Button „Graphic2“ – bGraphic2.
Replace the content of the source code file with the following:
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; namespace Loops { public partial class Form1 : Form { int number, P, x1, y1, hlf; string S; bool bGraph1Clicked =false; bool bGraph2Clicked = false; Pen myPen = new Pen(Color.Cyan, 3); public Form1() { InitializeComponent(); } private void bFor_Click(object sender, EventArgs e) { lbResult.Items.Clear(); lbResult.Items.Add("For loop with step 1:"); for (number = 0; number <= 5; number++) lbResult.Items.Add(number); lbResult.Items.Add("For loop with step 5:"); for (number = 0; number <= 25; number += 5) lbResult.Items.Add(number); } private void bWhile_Click(object sender, EventArgs e) { lbResult.Items.Clear(); number = 1; lbResult.Items.Add("Powers of 2:"); while (number <= 1000) { number *= 2; lbResult.Items.Add(number); } } private void bEndless_Click(object sender, EventArgs e) { lbResult.Items.Clear(); for (; ; ) lbResult.Items.Add("Endless loop..."); } private void bDo_Click(object sender, EventArgs e) { lbResult.Items.Clear(); number = 10; do { lbResult.Items.Add(number); number =- number; } while (number == 0); } private void bNested_Click(object sender, EventArgs e) { lbResult.Items.Clear(); for (number = 1; number <= 10; number++) { S = " " + number + " : "; for (P = 2; P <= 4; P++) S = S + Math.Pow(number, P) + " "; lbResult.Items.Add(S); } } private void bForeach_Click(object sender, EventArgs e) { lbResult.Items.Clear(); string[] pets = { "dog", "cat", "bird" }; foreach (string value in pets) { lbResult.Items.Add(value); } } private void InitDrawingTools(PaintEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; myPen.DashStyle = DashStyle.Solid; myPen.Color = Color.DarkMagenta; myPen.Width = 1; } private void DrawCircle(int x, int y, int width, int height, Pen myPen, PaintEventArgs e) { e.Graphics.DrawEllipse(myPen, x, y, width, height); } private void bGraphic1_Click(object sender, EventArgs e) { bGraph1Clicked = true; this.Refresh(); } private void bGraphic2_Click(object sender, EventArgs e) { bGraph2Clicked = true; this.Refresh(); } private void Form1_Paint(object sender, PaintEventArgs e) { InitDrawingTools(e); if (bGraph1Clicked) { x1 = 260; y1 = 40; for (number = 1; number <= 25; number = number + 5) DrawCircle(x1, y1, number, number, myPen, e); } if (bGraph2Clicked) { x1 = 260; y1 = 100; for (number = 2; number <= 26; number = number + 4) { hlf = number / 2; DrawCircle(x1 - hlf, y1 - hlf, number, number, myPen, e); } } } } }
2) Crete Windows Forms application with the following functionalities:
- Draw numbers from 1 to 10 with words on English and Bulgarian;
- Create a button that, when pressed, alternates colors pre-set in an array, for a background of the form
- A ComboBox control to be used to also loads predefined colors in an array to change the color of the shape.
- Set the number of days in the months in an array and use a DateTimePicker control to indicate how many days have passed since the beginning of the year to the selected day.
Solution:
Create new Windows Forms Application project and design the form as shown in the picture:
Name the controls as follows:
— Button „Initialize“ – bInitialize
— Button „Change Form Color“ – bChangeFormColor
— Button „Add Color“ – bAddColor
— ComboBox control – cbColors
— DateTimePicker control – dateTimePicker1
— TextBox control – tbDateTime
Replace the content of Form1.cs with the following:
using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace Arrays { public partial class Form1 : Form { int number, x1, y1, widht, height; int colorCount = 0; string[] EnglishNumbers; string[] BulgarianNumbers; string[] EnglishColors; int[] Days = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; Color[] Colors; Color[] EnglishColor; List<Color> colorList = new List<Color>(); bool bInitializeClicked = false; bool bAddColorClicked = false; SolidBrush myBrushDrawText = new SolidBrush(Color.DarkCyan); Font drawFont = new Font("Courier New", 10, FontStyle.Bold); string drawString = ""; Pen myPen = new Pen(Color.Black, 2); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { EnglishNumbers = new string[11]; EnglishNumbers[0] = "zero"; EnglishNumbers[1] = "one"; EnglishNumbers[2] = "two"; EnglishNumbers[3] = "three"; EnglishNumbers[4] = "four"; EnglishNumbers[5] = "five"; EnglishNumbers[6] = "six"; EnglishNumbers[7] = "seven"; EnglishNumbers[8] = "eight"; EnglishNumbers[9] = "nine"; EnglishNumbers[10] = "ten"; BulgarianNumbers = new string[11] {"нула", "едно", "две", "три", "четири", "пет", "шест", "седем", "осем", "девет", "десет"}; Colors = new Color[3]; Colors[0] = Color.Red; Colors[1] = Color.Brown; Colors[2] = Color.Green; EnglishColorsFunc(); } private void EnglishColorsFunc() { EnglishColors = new string[4] {"Red", "Yellow", "Blue", "Green"}; EnglishColor=new Color[4] {Color.Red, Color.Yellow, Color.Blue, Color.Green}; cbColors.Text = "Select color:"; for (number = 0; number < 4; number++) cbColors.Items.Add(EnglishColors[number]); } private void Form1_Paint(object sender, PaintEventArgs e) { if (bInitializeClicked) StringInitialize(e); if (bAddColorClicked) DisplayColors(e); } private void DrawStrings(string drawString, Font drawFont, Brush myBrushDrawText, int x, int y, PaintEventArgs e) { e.Graphics.DrawString(drawString, drawFont, myBrushDrawText, x, y); } private void DrawEllipse(int x1, int y1, int width, int height, Pen myPen, PaintEventArgs e) { e.Graphics.DrawEllipse(myPen, x1, y1, width, height); } private void bInitialize_Click(object sender, EventArgs e) { bInitializeClicked = true; this.Refresh(); } private void StringInitialize(PaintEventArgs e) { x1 = 20; y1 = 50; for (number = 0; number <= 10; number++) { drawString = number.ToString(); DrawStrings(drawString, drawFont, myBrushDrawText, x1, y1, e); DrawStrings(EnglishNumbers[number].ToString(), drawFont, myBrushDrawText, x1 + 50, y1, e); DrawStrings(BulgarianNumbers[number].ToString(), drawFont, myBrushDrawText, x1 + 100, y1, e); y1 = y1 + 15; } } private void bChangeFormColor_Click(object sender, EventArgs e) { colorCount++; if (colorCount > 2) colorCount = 0; this.BackColor = Colors[colorCount]; } private void cbColors_SelectedIndexChanged(object sender, EventArgs e) { number = cbColors.SelectedIndex; this.BackColor = EnglishColor[number]; } private bool IsDate(string inputDate) { DateTime dt; return DateTime.TryParse(inputDate,out dt); } private void dateTimePicker1_ValueChanged(object sender, EventArgs e) { int mounth = dateTimePicker1.Value.Month; int julian = dateTimePicker1.Value.Day; int year = dateTimePicker1.Value.Year; if (IsDate("2/29/" + year)) Days[2] = 29; else Days[2] = 28; for (int m = 1; m < mounth - 1; m++) julian = julian + Days[m]; tbDateTime.Text = "Day " + julian; } private void DisplayColors(PaintEventArgs e) { x1 = bAddColor.Location.X; y1 = bAddColor.Location.Y + bAddColor.Height; widht = height = 25; foreach (Color getColorFromList in colorList) { myPen.Color = getColorFromList; DrawEllipse(x1, y1, widht, height, myPen, e); x1 = x1 + 30; if (x1 > this.Width - 15) { x1 = bAddColor.Location.X; y1 = y1 + 30; } } } private void bAddColor_Click(object sender, EventArgs e) { bAddColorClicked = true; colorDialog1.ShowDialog(); colorList.Add(colorDialog1.Color); this.Refresh(); } } }
Self-assignments
1) Create Windows Forms application that contains two arrays: arrayMounth of type string and arrayDays of type int. When a button is pressed, display the number of days for each month in format > Month: Number of Days.
2) Create an application that allows the insertion of a matrix [3×3] and a calculation of its determinant. Entered matrix elements to be stored in a three-dimensional array. Entering matrix elements to take place via DataGridView control.