Лабораторная работа № 2_5.
Обработка числовых последовательностей с использованием текстовых файлов
Написать программу, последовательно выполняющую перечисленные ниже задачи. Предусмотреть печать приглашения на ввод (строки, поясняющей пользователю, какие действия от него ждет программа) и информативный вывод данных.
Задание 1. Длина последовательности целых чисел – случайное число от 10 до 30. Последовательность генерируется случайным образом или вводится с клавиатуры по желанию пользователя. Обработать эту последовательность без использования массива в соответствии с номером варианта. При вводе или генерации последовательность записать в файл Input.txt (первая компонента файла – количество элементов последовательности, остальные компоненты представляют собой элементы последовательности).
Задание 2. Из файла Input.txt, подготовленного в процессе выполнения Задания 1, вводится последовательность целых чисел известной длины (эта длина записана на первом месте в файле). Обработать эту последовательность без использования массива в соответствии с номером варианта. В процессе обработки записать результаты в файл Output.txt (все компоненты представляют собой элементы вновь получаемой последовательности).
Задание 3. Из файла Output.txt, подготовленного в процессе выполнения Задания 2, вводится последовательность целых чисел. Обработать эту последовательность без использования массива в соответствии с номером варианта. Результаты обработки вывести на экран.
Внимание!!!
Файлы после записи необходимо закрывать. Для разных заданий лучше использовать файловые потоки с разными именами.
Для того чтобы обрабатывать пары чисел, необходимо определить 2 переменные: например, A_old и A. В процессе обработки используются оба значения, затем происходит переприсвоение A_old = A; и вводится очередное, текущее значение переменной A. Необходимо следить, чтобы после прочтения последнего числа из файла циклический процесс завершался.
Соответственно, чтобы обрабатывать тройки чисел, необходимо определить 3 переменные: например, A_old, A и A_next. В процессе обработки используются все три значения, затем происходит переприсвоение A_old = A; A = A_next; и вводится очередное, текущее значение переменной A_next.
//Пример записи в текстовый файл для MS_VS случайных чисел от 0 до 10,
//а затем чтения этих чисел из файла и нахождения их суммы и количества
#include <fstream> #include <iostream>
#include <ctime> |
// для генерации случайных чисел начиная с произвольного |
|
числа |
|
|
using namespace std; |
|
|
int main() |
|
|
{ |
|
|
srand((unsigned)time(NULL)); // для генерации случайных чисел начиная с произвольного числа |
||
ofstream strm; |
|
// выходной поток-объект |
strm.open("c:/oonumber.txt"); |
// открываем |
|
if (strm.is_open()) |
|
// проверка открытия |
{ |
|
|
for(int i = 0; i < 10; i++) strm << rand()%10 << endl; strm.close(); // закрываем выходной поток-файл
//суммирование чисел, записанных в файле
//открываем тот же текстовый файл для чтения ifstream strm("c:/oonumber.txt");
if (strm) |
// проверка открытия |
{int number, summa = 0, count = 0;
// с файлом обращаемся так, как будто не знаем, сколько в нём чисел
while(strm >> number) |
// ввод числа |
{ ++count; |
// подсчет количества |
summa+=number; |
// суммирование |
} |
// вывод результатов |
cout << summa << "; " << count; |
|
strm.close(); |
// закрываем поток-файл |
}
}
system("pause"); return 0;
}
На следующей странице приведен аналог этой программы, выполненный в CodeBlcks (с
небольшой разницей, в чём она состоит – определите самостоятельно) Наберите текст программы и выполните её.
Сравние содержимое Вашего файла с тем, что выведено на экран. Почему так происходит и что необходимо сделать?
Варианты заданий
Вари- |
Условия задания 1 |
|
|
Условия задания 2 |
|
Условия задания 3 |
||
ант |
|
|
|
|||||
|
|
|
|
|
|
|
|
|
1. |
Сообщить |
порядковый |
В выходную последовательность |
записать |
Найти среднее арифметическое |
|||
|
номер и значение числа, |
только те числа, которые больше своих |
элементов последовательности |
|||||
|
превосходящего |
все |
соседей (если первое число больше второго, то |
|
||||
|
остальные |
по абсолютной |
его надо записать, если второе число больше |
|
||||
|
величине |
|
|
первого |
и третьего – надо записать второе |
|
||
|
|
|
|
число, |
если |
последнее |
больше |
|
|
|
|
|
предпоследнего – |
надо записать |
последнее |
|
|
|
|
|
|
|
|
число). |
|
|
|
|
|
|
|
|
|
|
|
|
2. |
Найти |
|
|
количество |
В |
выходную |
последовательность |
записать |
Найти минимальное число и его |
||||||||||
|
положительных, |
|
|
только те числа, которые вместе с соседями |
порядковый номер |
|
|
|
|||||||||||
|
отрицательных |
и |
нулевых |
составляют число N (если первое число в |
|
|
|
|
|
|
|||||||||
|
элементов |
|
в |
|
этой |
сумме со вторым даёт N, записываем первое |
|
|
|
|
|
|
|||||||
|
последовательности. |
|
число, если первое, второе и третье числа в |
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
сумме дают N, записываем второе число, если |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
последнее и предпоследнее числа в сумме |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
дают N, записываем последнее число) |
|
|
|
|
|
|
|
|||||
3. |
Найти |
|
|
|
среднее |
В |
выходную |
последовательность |
записать |
Найти |
максимальное |
чётное |
|||||||
|
арифметическое |
|
|
только те числа, которые меньше суммы своих |
число и его порядковый номер, |
||||||||||||||
|
положительных |
элементов |
соседей (если первое число меньше второго, |
при отсутствии |
чётных чисел |
||||||||||||||
|
данной |
|
|
|
|
|
записываем первое число; если второе число |
сообщить об этом |
|
|
|
||||||||
|
последовательности. |
|
меньше суммы первого и третьего числа, |
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
записываем второе число, если последнее |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
меньше |
предпоследнего, |
записываем |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
последнее число) |
|
|
|
|
|
|
|
|
|
|||
4. |
Найти |
|
|
|
среднее |
В |
выходную |
последовательность |
записывать |
Найти |
первое |
отрицательное |
|||||||
|
арифметическое элементов |
суммы соседних элементов (на 1 место – |
число |
и сообщить |
порядковый |
||||||||||||||
|
последовательности, |
|
сумму первого и второго, на второе – сумму |
номер, в случае отсутствия |
|||||||||||||||
|
принадлежащих диапазону |
второго и третьего, на последнее – сумму |
отрицательных |
чисел |
сообщить |
||||||||||||||
|
[a; b] |
|
|
|
|
|
предпоследнего и последнего). |
|
|
об этом. |
|
|
|
|
|||||
5. |
Найти |
|
|
|
среднее |
В |
выходную |
последовательность |
записать |
Найти |
полусумму |
первого |
и |
||||||
|
арифметическое элементов |
только |
числа, |
равные |
|
среднему |
последнего |
положительных |
|||||||||||
|
последовательности, |
|
арифметическому своих соседей (если первое |
чисел, в случае отсутствия |
|||||||||||||||
|
заканчивающихся |
цифрой |
число равно второму – записываем первое |
положительных |
чисел |
сообщить |
|||||||||||||
|
«7». |
|
|
|
|
|
число, если второе число равно полусумме |
об этом. |
|
|
|
|
|||||||
|
|
|
|
|
|
|
первого и третьего – записываем второе число, |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
если последнее число равно предпоследнему – |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
записываем последнее число). |
|
|
|
|
|
|
|
|
||||
6. |
Указать |
пары |
соседних |
В |
выходную |
последовательность |
записать |
Найти |
среднее |
арифметическое |
|||||||||
|
элементов |
|
|
данной |
только числа, заканчивающиеся цифрой «3» |
положительных |
|
|
элементов |
||||||||||
|
последовательности |
{ai}, |
|
|
|
|
|
|
|
последовательности |
|
|
|
||||||
|
удовлетворяющих условию |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
ai < ai+1 и количество таких |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
пар |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7. |
Сообщить, |
имеется |
ли |
В |
выходную |
последовательность |
записать |
Найти |
|
|
минимальное |
||||||||
|
среди введённых чисел три |
только каждое третье число |
|
|
положительное |
число |
и |
его |
|||||||||||
|
подряд |
идущих элемента, |
|
|
|
|
|
|
|
порядковый номер, в случае |
|||||||||
|
которые |
могут |
являться |
|
|
|
|
|
|
|
отсутствия положительных числе |
||||||||
|
длинами |
|
|
|
сторон |
|
|
|
|
|
|
|
сообщить об этом |
|
|
|
|||
|
треугольника и количество |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
таких троек. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8. |
Указать |
пары |
соседних |
В |
выходную |
последовательность |
записать |
Найти |
максимальное двузначное |
||||||||||
|
элементов |
|
|
данной |
только числа, по абсолютной величине |
число и его порядковый номер, в |
|||||||||||||
|
последовательности, |
|
превосходящие заданное число N |
|
|
случае |
отсутствия |
двузначных |
|||||||||||
|
имеющих |
|
|
|
|
|
|
|
|
|
|
|
чисел сообщить об этом |
|
|
||||
|
противоположные |
знаки и |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
количество таких пар. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
9. |
Указать |
|
|
соседние |
В |
выходную |
последовательность |
записать |
Найти |
полусумму |
минимума и |
||||||||
|
элементы, |
|
имеющие |
только числа, кратные N или являющиеся |
максимума. |
|
|
|
|
||||||||||
|
одинаковую |
чётность |
(оба |
делителями числа N. |
|
|
|
|
|
|
|
|
|
||||||
|
чётные или оба нечётные), |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
если |
таковых |
|
не |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
обнаружится, |
|
|
вывести |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
соответствующее |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
сообщение. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
Указать |
те |
|
из |
чисел, |
В |
выходную |
последовательность |
записать |
Найти наименьшее из чисел, |
|||||||||
|
которые |
в |
|
сумме |
с |
только |
нечётные |
двузначные |
числа |
расположенных на чётных местах |
|||||||||
|
предыдущим |
|
|
|
и |
(отрицательные числа не рассматривать). |
и сообщить его индекс. |
|
|
||||||||||
|
последующим |
элементами |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
составляют |
|
N, |
|
если |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
таковых |
не |
обнаружится, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
вывести |
соответствующее |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
сообщение. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
Найти |
|
|
количество |
В |
выходную |
последовательность |
записать |
Найти |
полусумму |
первого |
и |
|||||||
|
элементов |
|
|
|
|
только |
те |
числа, |
которые |
больше |
последнего |
положительных |
|
|
последовательности, |
|
предыдущего, |
но |
меньше последующего |
|
чисел, в случае отсутствия чисел |
||||||||||
|
|
кратных |
|
5, |
которые |
по |
(первое число записывается при условии, что |
|
сообщить об этом. |
|
|
|
||||||
|
|
абсолютной |
величине |
не |
оно меньше второго, последнее – при условии, |
|
|
|
|
|
|
|||||||
|
|
превосходят |
N |
(число |
что оно больше предпоследнего) |
|
|
|
|
|
|
|
||||||
|
|
элементов |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
последовательности). |
|
|
|
|
|
|
|
|
|
|
|
|
||||
12 |
|
Указать |
|
пары |
соседних |
В |
выходную |
последовательность |
записать |
|
Найти |
первое |
отрицательное |
|||||
|
|
элементов |
|
данной |
только те числа, которые делятся на свою |
|
число |
и сообщить порядковый |
||||||||||
|
|
последовательности, |
|
последнюю цифру. |
|
|
|
номер, в случае отсутствия |
||||||||||
|
|
среднее |
|
арифметическое |
|
|
|
|
|
|
отрицательных чисел |
сообщить |
||||||
|
|
которых |
|
равно |
N |
и |
|
|
|
|
|
|
об этом. |
|
|
|
||
|
|
количество таких пар. |
|
|
|
|
|
|
|
|
|
|
|
|
||||
13 |
|
Найти |
|
|
|
среднее |
В |
выходную |
последовательность |
записать |
|
Найти |
полусумму |
минимума и |
||||
|
|
арифметическое элементов |
только положительные числа, кратные трём |
|
максимума. |
|
|
|
||||||||||
|
|
последовательности, |
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
расположенных |
после |
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
первого нулевого элемента |
|
|
|
|
|
|
|
|
|
|
|
|||||
14 |
|
Сообщить, |
имеется |
ли |
В |
выходную |
последовательность |
записать |
|
Найти наибольшее из чисел, |
||||||||
|
|
среди |
введённых чисел |
только числа, по абсолютной величине не |
|
расположенных |
на |
нечётных |
||||||||||
|
|
хотя бы три подряд идущих |
превосходящие заданное число N |
|
|
местах и сообщить его индекс. |
||||||||||||
|
|
элемента, |
|
образующих |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
возрастающую |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
последовательность. |
|
|
|
|
|
|
|
|
|
|
|
|
||||
15 |
|
Указать |
|
пары |
соседних |
В |
выходную |
последовательность |
записать |
|
Найти максимальное число и его |
|||||||
|
|
элементов |
|
данной |
только каждое второе нечётное число |
|
|
порядковый номер |
|
|
|
|||||||
|
|
последовательности, |
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
разность |
между |
которыми |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
равна 2 и количество таких |
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
пар. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.5. Критерии оценивания работы |
|
|
|
|
|
|
|
|
|
|
|
|||||||
В таблице приведены критерии, по которым студент может оценить свою работу. |
|
|
|
|
|
|||||||||||||
Критерии оценивания заданий |
|
|
|
|
|
|
|
|
|
|
|
Процент |
||||||
При наличии |
синтаксических ошибок (программа |
не транслируется) работа |
не оценивается |
(0 |
|
(общий |
||||||||||||
процентов выполнения). |
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
балл)*0 |
|||||||
Использование массивов или векторов |
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|||||||||
Реализована задача 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
количество элементов файла Input.txt– случайное число N записано на первом месте, в файле N+1 число. |
|
20 |
||||||||||||||||
организовано меню для выбора способа заполнения файла |
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
||||||||||||
на экран выведены результаты выполнения задания 1 |
|
|
|
|
|
|
|
|
||||||||||
Реализована задача 2 |
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|||||
в файле Output.txt – только те числа из файла Input.txt, которые отвечают условиям задания 2 |
|
|
||||||||||||||||
|
|
|
||||||||||||||||
Реализована задача 3 |
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|||||
на экране – только те числа из файла Output.txt, которые отвечают условиям задания 3 |
|
|
|
|||||||||||||||
|
|
|
|
|||||||||||||||
Итого - |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 баллов |
|
Дополнительно к этому общая оценка работы: |
|
|
|
|
|
|
|
|
|
|||||||||
Набор тестовых данных для ручного ввода, позволяющий продемонстрировать выполнение всех трёх |
|
15 |
||||||||||||||||
заданий (так, чтобы были результаты и для первой, и для второй, и для третьей задачи |
|
|
|
|
|
|||||||||||||
Защита на случай отсутствия файла или его пустоты |
|
|
|
|
|
|
|
|
15 |
|||||||||
Аккуратное форматирование, комментариев необходимое и достаточное количество. |
|
|
|
|
5 |
|||||||||||||
Программа выводит сведения о разработчике и номер варианта |
|
|
|
|
|
|
5 |
|||||||||||
Итого |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 % |
Примерная блок-схема
(меню выбора способа заполнения файла не показано)
пуск
N=rand%(b-a)+a
i = 1, N
ввод A
вывод A в файл
Обработка элемента А
i = 1, N
чтение A из файла
A удовлетворяет |
да |
|
|
условию |
|
|
вывод A в файл |
не конец файла |
|
да |
|
чтение A из файла |
|
Обработка элемента А |
|
вывод результатов |
|
стоп |
|