В данной статье будет разобрано решение следующей задачи:
Дан массив a[1]..a[n] и число m < = n. Для каждой группы из m стоящих рядом членов (таких групп, очевидно, n-m+1) вычислить ее сумму.
Как мы решим эту задачку? Сразу хочу скачать, реализовать программу будем на C# в среде разработки Visual Studio 2008 как Windows приложение с формами.
Так что необходимо сначала создать проект с формой, разместить на ней все объекты как показано на картинке ниже и, изменить имена, созданных объектов. Для полей “Размер массива” и “Число m” изменяем имя на “textBox_n” и “textBox_m” соответственно. Кнопка будет называться “work”, а объекты типа “ListBox” назовем “data_mas” и “mas_gr“ соответственно.
Теперь приступим к написанию программного кода нашей программы. Для начала напишем функцию проверки вводимых данных в поля “Размер массива” и “Число m”. Она возвращает значение “false”, когда неправильно заполнено одно или несколько полей, или “true”, когда все нормально с вводимыми данными. Нужно два раза кликнуть по полю “textBox_m”, которое находится напротив текста “Число m”, чтобы создать процедуру обработки события изменения данных в данном поле и вписать в нее вызов функции “textBox_TextCh()”, готовый код приведен ниже:
private void textBox_m_TextChanged(object sender, EventArgs e) { textBox_TextCh(); } private bool textBox_TextCh() { if (textBox_n.Text.Length < = 0 || Convert.ToInt32(textBox_n.Text) <= 0 || Convert.ToInt32(textBox_m.Text) > Convert.ToInt32(textBox_n.Text)) { textBox_m.Text = ""; MessageBox.Show("Неверно заполнено одно или несколько полей!", "Ошибка при заполнении!"); return false; } else return true; }
Рассмотрим процедуру, которая вызывается всякий раз, когда происходит событие клика по кнопке “work”:
private void work_Click(object sender, EventArgs e) { if (textBox_TextCh()) { int count_gr = Convert.ToInt32(textBox_n.Text) - Convert.ToInt32(textBox_m.Text) + 1; data_mas.Items.Clear(); mas_gr.Items.Clear(); Random r = new Random(); int[] mass = new int[Convert.ToInt32(textBox_n.Text)]; for (int i = 0; i < Convert.ToInt32(textBox_n.Text); i++) { mass[i] = r.Next(1, 99); data_mas.Items.Add(i + 1 + ") " + mass[i]); } for (int i = 0; i < count_gr; i++) { string group = ""; int summa = 0; for (int j = i; j < i + Convert.ToInt32(textBox_m.Text); j++) { if(j < i + Convert.ToInt32(textBox_m.Text) - 1) group += mass[j] + " + "; else group += mass[j]; summa += mass[j]; } mas_gr.Items.Add(i+1 + ") " +group + " = " + summa); } } }
Что здесь происходит? Сначала происходит вызов функции “textBox_TextCh()”. Если ошибок ввода данных не обнаружено, продолжаем работу этой процедуры. Вычисляем количество возможных групп из m стоящих рядом членов, где m – размер группы и записываем это в переменную “count_gr”. Далее очищаем “data_mas” и “mas_gr“, и создадим массив “mass”. Заполняем массив числами сгенерированными в диапозоне от 1 до 99 и сразу выводим его в наш “ListBox” с именем “data_mas”. Заполнение происходит автоматически с помощью генератора случайных чисел, ручное заполнение – это процесс долгий и уж точно не для ленивых.
Следующий этап – это поиск в массиве групп нужной длины, нахождение их суммы и вывод результирующих данных в “ListBox” с именем “ mas_gr ”.
Задача решена и реализована на C#, результат выполнения программы показан на рисунке выше. Спасибо и удачного программирования.
Автор: Евтеев Евгений Александрович