Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program lab10;
- {$APPTYPE CONSOLE}
- uses
- Windows,
- SysUtils;
- const
- n_max=10;
- type
- mat=array[1..n_max] of integer;
- var p,k,n,d: ShortInt;
- dat,rez:textfile;
- flag1,flag2:Boolean;
- a:mat;
- procedure check_n(var dat,rez:textfile; var n:shortint); {ввод и проверка n и u}
- begin
- Readln(dat,n);
- if (n<1) or (n>n_max) then
- begin
- writeln('Некорректное значение n.');
- close(dat);
- close(rez);
- writeln('...');
- readln;
- halt
- end;
- end;
- procedure input_a(const dat:textfile; var a:mat;const n:shortint);
- var i:shortint;
- begin
- for i:=1 to n do
- begin
- read(dat,a[i]);
- end;
- end;
- procedure find_first(const a:mat; const n:shortint; out k:shortint; var flag1:boolean); {поиск первого положительного элемента}
- var
- i:shortint;
- begin
- k:=1;
- i:=1;
- flag1:=true;
- while (i<n) and flag1 do
- begin
- if (a[i]<0) and (a[i] mod 2 <>0) then
- begin
- k:=i;
- flag1:=false;
- end;
- inc(i);
- end;
- end;
- procedure find_last(const a:mat; const n:shortint; out p:shortint; var flag2:boolean); {поиск первого положительного четного элемента}
- var
- i:shortint;
- begin
- p:=1;
- i:=n;
- flag2:=true;
- while (i>=1) and flag2 do
- begin
- if (a[i]>0) and (a[i] mod 2 =0) then
- begin
- p:=i;
- flag2:=false;
- end;
- dec(i);
- end;
- end;
- procedure poisklastmin(const k,p:ShortInt; const a:mat; var d:ShortInt);
- var i: ShortInt;
- begin
- d:=k;
- for i:=k to p do
- if (a[i]>0) and (a[i] mod 2 =0) and (a[i]<=a[d])
- then d:=i;
- end;
- procedure output(const a:mat; var rez:textfile; var n:shortint); {вывод}
- var
- i:shortint;
- begin
- writeln(rez,'Лабораторная работа №10.');
- writeln(rez);
- writeln(rez,'Длина массива: ',n);
- writeln(rez);
- writeln(rez);
- writeln(rez,'Массив A:');
- writeln(rez);
- for i:=1 to n do
- write(rez,a[i],' ');
- writeln(rez);
- writeln(rez);
- end;
- begin
- SetConsoleCP(1251);
- SetConsoleOutputcp(1251);
- AssignFile(dat, ParamStr(1));
- Reset(dat);
- AssignFile(rez, ParamStr(2));
- Rewrite(rez);
- check_n(dat,rez,n);
- input_a(dat,a,n);
- output(a,rez,n);
- find_first(a,n,p,flag1);
- if flag1 then p:=1;
- find_last(a,n,k,flag2);
- if (k<p) and flag2 then
- begin
- Writeln(rez, 'Поиск невозможен, так как первый отрицательный элемент лежит после последнего положительного или в массиве нет нужных элементов.');
- close(dat);
- close(rez);
- writeln('...');
- readln;
- halt
- end;
- poisklastmin(k,p,a,d);
- writeln(rez,'минимальный элемент, подходящий по условию под номером ',d);
- close(dat);
- close(rez);
- writeln('...');
- readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement