Нужна процедура нахождения предпоследнего элемента - 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.

Объяснение кода листинга программы

  1. Создается тип данных fois (file of integer), который представляет собой файл, содержащий целые числа.
  2. Определяются три процедуры: inp_f, outp_f и minimum. В процедуре inp_f создается новый файл, в котором записываются случайные целые числа. В процедуре outp_f считывается содержимое файла и выводится на экран. Функция minimum находит минимальное значение из прочитанных.
  3. Определяется функция otr, которая считывает файл построчно и находит предпоследний отрицательный элемент. Если таких элементов нет, то возвращается 0.
  4. Создается переменная f, которая представляет собой файл.
  5. Считывается имя файла с помощью функции readln.
  6. Задается переменная s типа string[20], которая будет хранить имя файла.
  7. Вызывается процедура inp_f для записи случайных чисел в файл.
  8. Выводится содержимое файла с помощью процедуры outp_f.
  9. Вычисляется минимальное значение с помощью функции minimum.
  10. Вызывается функция otr для поиска предпоследнего отрицательного элемента.
  11. Выводится результат: если в файле нет отрицательных элементов, то выводится сообщение Двух отрицательных элементов нет. Если есть хотя бы один отрицательный элемент, то выводится его значение и сумма с минимальным значением.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5
Похожие ответы