Вычислить сумму каждой рядом стоящей группы чисел на C#

4 апреля 2009

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

Автор: Евтеев Евгений Александрович