Нужна процедура нахождения предпоследнего элемента - Pascal ABC
Формулировка задачи:
Решить задачу с использованием структуры типизированный файл.
Почти вся задача решена не хватает одной процедуры.
Найти сумму минимального и предпоследнего отрицательного элемента
Помогите пожалуйста
Решение задачи: «Нужна процедура нахождения предпоследнего элемента»
textual
Листинг программы
type foi= file of integer; //формирование файла procedure inp_f(var f: foi); var n, i, a: integer; begin n:=1+random(20); rewrite(f); for i:= 1 to n do begin a:=-25+random(51); write(f, a); end; close(f); end; procedure outp_f(var f: foi); var a: integer; begin reset(f); while not eof(f) do begin read(f, a); write(a:4); end; writeln; close(f); end; function minimum(var f: foi): integer; //минимальный элемент var a, m, i: integer; begin reset(f); read(f,m); while not eof(f) do begin read(f, a); if a < m then m := a; end; close(f); minimum := m; end; function otr(var f: foi):integer; //предпоследний отрицательный var k,i,a,o:integer; begin reset(f); k:=0; i:=filesize(f)-1; while(i>=0)and(k<2) do begin seek(f,i); read(f,a); if a<0 then k:=k+1; if k=2 then o:=a else i:=i-1; end; if k<2 then otr:=0 else otr:=o; close(f); end; var f: foi; s: string[20]; m,o,p: integer; begin write('Имя файла? '); readln(s); assign(f,s); inp_f(f); writeln('Содержание файла'); outp_f(f); m:=minimum(f); writeln('Минимальный элемент=',m); o:=otr(f); if o=0 then writeln('Двух отрицательных элементов нет') else begin writeln('Предпоследний отрицательный=',o); writeln('Их сумма=',m+o); end; end.
Объяснение кода листинга программы
- Создается тип данных
fois
(file of integer), который представляет собой файл, содержащий целые числа. - Определяются три процедуры: inp_f, outp_f и minimum. В процедуре inp_f создается новый файл, в котором записываются случайные целые числа. В процедуре outp_f считывается содержимое файла и выводится на экран. Функция minimum находит минимальное значение из прочитанных.
- Определяется функция otr, которая считывает файл построчно и находит предпоследний отрицательный элемент. Если таких элементов нет, то возвращается 0.
- Создается переменная
f
, которая представляет собой файл. - Считывается имя файла с помощью функции readln.
- Задается переменная
s
типа string[20], которая будет хранить имя файла. - Вызывается процедура inp_f для записи случайных чисел в файл.
- Выводится содержимое файла с помощью процедуры outp_f.
- Вычисляется минимальное значение с помощью функции minimum.
- Вызывается функция otr для поиска предпоследнего отрицательного элемента.
- Выводится результат: если в файле нет отрицательных элементов, то выводится сообщение
Двух отрицательных элементов нет
. Если есть хотя бы один отрицательный элемент, то выводится его значение и сумма с минимальным значением.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д