Найти произведение максимального и второго по счёту отрицательного элемента - Pascal ABC

Формулировка задачи:

I. Решить задачу с использованием структуры «файл» (в файле хранятся целочисленные данные). Найти произведение максимального и второго по счёту отрицательного элемента. Если искомого элемента нет, сообщить об этом. Как переделать задачу, что бы она считала второй по счету отрицательный элемент??? «Процедура формирования файла»
procedure inp_f(var f: file of integer);
var n,i,a:integer;
begin
n:=1+random(100);
rewrite(f);
for i:= 1 to n do
  begin
  a:=-25+random(51);
  write(f,a);
  end;
  close(f);
  end;
  var f:file of integer;s:string[20];
  begin
   write('имяфайла: ');readln(s);
   assign(f,s);
   inp_f(f);
   end.
Программа:
type foi=file of integer;
procedure outp_f(var f:foi);
var a:integer;
begin
reset(f);
while not eof (f) do
begin
read(f,a);
write(a:5);
end;
writeln;writeln;close(f);
end;
 
function maximum(f:foi):integer;
var a,m,i:integer;
begin
reset(f);i:=0;m:=-1000;
while not eof(f) do
begin
read(f,a);
if a > m then
m:=a;
i:=i+1;
end;
maximum:=m;
end;
function minimum(f:foi):integer;
var a,min:integer;
begin
reset(f);min:=0;
while not eof(f) do
begin
read(f,a);
 
if a<0 then begin min:=a; break end;
end;
minimum:=min;
end;
 
var f: foi;
begin
assign(f,'1234');
outp_f(f);
 
if minimum(f)=0 then writeln('Отрицательныхэлементовнет') else
Writeln('Сумма=',maximum(f)+ minimum(f));
 
end.

Код к задаче: «Найти произведение максимального и второго по счёту отрицательного элемента - Pascal ABC»

textual
var
    f: File Of Integer;
    state: Boolean;
    fi: Integer;
//////////
state := False;
while (Not EoF(f)) do
begin
    Read(f, fi);
    if (fi < 0)
    then
    begin
        if (state)
        then
            Break //если нашли второе - прерываем цикл
        else
            state := True; //если нашли первое - отмечаем
    end;
    fi := 0; //если не вышли из цикла - обнуляем (ибо искомое может быть только отрицательным, то и берём 0 как показатель)
end;
if (fi < 0)
then
    Write('Найдено второе отрицательное')
else
    Write('Было найдено менее двух отрицательных');
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.

6   голосов, оценка 4.167 из 5


СДЕЛАЙТЕ РЕПОСТ