В данной статье будет разобрано решение следующей задачи:
Дан массив 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#, результат выполнения программы показан на рисунке выше. Спасибо и удачного программирования.
Автор: Евтеев Евгений Александрович

