Данная статья является ответом на вопрос читателя Алексея.
Здравствуйте! Подскажите, пожалуйста, как после вышеизложенного заполнения массива отдельно просуммировать значения в четных и нечетных строках?? Массив заполнен десятичными дробями. Одно число в одной строке.
Как результат, мы напишем программу, которая будет считывать все строки из файла, суммировать значения четных строк и отдельно суммировать значения нечетных строк. Результат выполнения, сумму в нечетных и сумму в четных строках программа будет выводить в консоль(на экран).
Сперва покажу как работает программа, после покажу её код. А подробно объясню её написание еще ниже.
Результат работы программы
Имеем файл input.txt, в нем храним строки с числами.
1 2 3 4 5 6 7 |
2.4 2.1 5.5 7.7 12.2 13 4.8 |
Всего 7 строк. После запуска программы появляется консоль и выводит следующий результат:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
1) Num 2.4 added to B. 2) Num 2.1 added to A. 3) Num 5.5 added to B. 4) Num 7.7 added to A. 5) Num 12.2 added to B. 6) Num 13 added to A. 7) Num 4.8 added to B. Summa chetnyh strok(A): 22.8 Summa nechetnyh strok(B): 24.9 -------------------------------- Process exited after 0.05383 seconds with return value 0 Press any key to continue . . . |
То есть она посчитала сумму значений четных строк, которая равна 22.6 и сумму значений нечетных строк, которая равна 24.9, и вывела результат.
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include <fstream> #include <iostream> using namespace std; int main() { ifstream fin("input.txt"); double tmp = 0, A = 0, B = 0; char name_of_sum; for(int i = 1; ;++i) { fin >> tmp; if(fin.eof()) break; if(i%2 == 0) { A+=tmp; name_of_sum = 'A'; } else { B+=tmp; name_of_sum = 'B'; } cout << i << ") "<< "Num " << tmp << " added to " << name_of_sum << "." << endl; } cout << "Summa chetnyh strok(A): " << A << endl; cout << "Summa nechetnyh strok(B): " << B << endl; fin.close(); return 0; } |
Описание кода программы
Программе необходимо работать с файлом, чтобы считывать результат, для этого воспользуемся шаблоном считывания из файла.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <fstream> #include <iostream> using namespace std; int main() { ifstream fin("input.txt"); // Здесь будет наш код fin.close(); return 0; } |
Объявим и инициализируем переменные для хранения суммы значений четных(A) и нечетных строк(B), переменную для хранения значения числа текущей строки(tmp), переменную для хранения названия переменной(name_of_sum)(нужна будет для красивого вывода).
1 2 |
double tmp = 0, A = 0, B = 0; char name_of_sum; |
Создаем цикл, который пробегает по всем строкам файла. Условие выхода из цикла пустое, но его мы сделаем в теле цикла позже. Переменная i хранит в себе номер текущей строки, по значению этой переменной мы определим четность или нечетность строки.
1 2 3 4 |
for(int i = 1; ;++i) { } |
В теле цикла передадим значение текущей строки файла переменной tmp, после чего проверим не достиг ли файл конца, если достиг, то выходим из цикла. Определим четность строки с помощью переменной i, в соответствии с четностью или нечетностью прибавим к переменной A или B значение текущей строки(tmp). И в конце сделаем красивый вывод переменных в консоль.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
fin >> tmp; if(fin.eof()) break; if(i%2 == 0) { A+=tmp; name_of_sum = 'A'; } else { B+=tmp; name_of_sum = 'B'; } cout << i << ") "<< "Num " << tmp << " added to " << name_of_sum << "." << endl; |
После цикла выведем значения переменных A(сумма четных) и B(сумма нечетных).
1 2 |
cout << "Summa chetnyh strok(A): " << A << endl; cout << "Summa nechetnyh strok(B): " << B << endl; |
Уважаемый Николай Сергейчук!
С большим удовлетворением ознакомилась с Вашими материалами.
А как будет выглядеть программа не для Консольного приложения, а для C++ Приложения Windows Forms со считыванием файла и записью массива в dataGridView? Заранее благодарю.
Полякова Л.Ф. poljak-lf@yandex.ru
Санкт_Петербург. ПГУПС. Кафедра «Автоматизированное проектирование».