Если в нашем распоряжении имеется современная версия PascalABC.Net 3.2, то есть минимум два способа решить такую задачу. Массив мы будем заполнять случайными числами из интервала [1;98].
Первый способ - использовать имеющуюся в этой версии паскаля возможность находить максимумы и минимумы встроенными в язык средствами. Это очень быстро программируется и обычно страхyет от возможных ошибок при написании более детальных программ.
<em>// PascalABC.NET 3.2, сборка 1353 от 27.11.2016</em>
<em>// Внимание! Если программа не работает, обновите версию!</em>
begin
var a:=ArrRandom(30,1,98); a.Println;
Writeln('D=',a.Where(x->x.IsEven).Max-a.Where(x->x.IsOdd).Max)
end.
Пример
29 52 58 75 13 77 63 13 17 6 67 17 53 51 14 93 83 30 81 17 93 58 13 71 78 96 42 66 4 91
D=3
Второй способ не привязан к упомянутой выше версии языка, т.е. может быть использован в школах, исповедующих "доисторический стиль программирования" ))) Естественно, он длиннее и можно будет сравнить количество строк кода. Алгоритм основан на последовательном переборе элементов массива и одновременном получении максимума среди четных и нечетных его элементов.
const
n=30;
var
a:array[1..30] of integer;
i,a1max,a2max:integer;
begin
Randomize;
a1max:=0; a2max:=0;
for i:=1 to n do begin
a[i]:=Random(98)+1;
Write(a[i],' ');
if a[i] mod 2 <> 0 then
begin if a1max<a[i] then a1max:=a[i] end
else
if a2max<a[i] then a2max:=a[i]
end;
Writeln;
Writeln('D=',a2max-a1max)
end.
Замечу, что данный вариант программы содержит фрагмент, в котором школьники (да и не только школьники) часто делают ошибку.
if a[i] mod 2 <> 0 then
<u>begin</u> if a1max<a[i] then a1max:=a[i] <u>end</u>
else
if a2max<a[i] then a2max:=a[i]
Выделенные мной begin и end на первый взгляд не нужны. Но в этом-то и ошибка!
По правилам языка паскаль когда внутри одного if встречается другой if и хотя бы один из них неполный, т.е. не содержит else, последний else относится к самому последнему из if, который без его будет неполным.
Запутанно? Поясню на нашем фрагменте.
Его без этих begin ... end можно понимать так:
<u>if a[i] mod 2 <> 0 then</u>
if a1max<a[i] then a1max:=a[i]
<u>else</u>
<u> if a2max<a[i] then a2max:=a[i]</u>
Но можно и так:
if a[i] mod 2 <> 0 then
<u>if a1max<a[i] then a1max:=a[i]</u>
<u>else </u>
<u>if a2max<a[i] then a2max:=a[i]</u>
И паскаль, увы, понимает как раз по последнему варианту. Посему как раз begin ... end решают эту проблему. Но... встречается она не очень часто и о ней быстро забывают. А потом нарываютcя и не могут понять причины.
Что ж, выбор как решать - за вами!
Var
m: integer;
begin
for m:=12 downto 6 do
writeln (m*m*m);
readln;
end.
Где только находят такие задачи О_о ну вот :)
uses crt;
type auto=record
nom:string;
sht:integer;
end;
var f,g:text;
a:array[1..100] of auto;
s,s1:string;
n,k,i,j,c,p,r:integer;
x:auto;
begin
clrscr;
assign(f,'input.txt');
reset(f);
assign(g,'output.txt');
rewrite(g);
read(f,n);
readln(f,s);
readln(f,s);
k:=1;
a[k].nom:=copy(s,1,8);
delete(s,1,9);
val(s,a[k].sht,c);
for i:=2 to n do
begin
readln(f,s);
s1:=copy(s,1,8);
delete(s,1,9);
val(s,r,c);
p:=0;
j:=1;
while(j<=k) and(p=0) do
if s1=a[j].nom then
begin
p:=j;
a[p].sht:=a[p].sht+r
end
else j:=j+1;
if p=0 then
begin
k:=k+1;
a[k].nom:=s1;
a[k].sht:=r;
end;
end;
close(f);
for i:=1 to k-1 do
for j:=i+1 to k do
if a[i].sht<a[j].sht then
begin
x:=a[i];
a[i]:=a[j];
a[j]:=x;
end;
for i:=1 to k do
begin
writeln(g,a[i].nom,' ',a[i].sht);
writeln(a[i].nom,' ',a[i].sht);
end;
close(g);
end<span>.</span>
<span>Готовый кроссворд по информатике - на тему "Носители информации"</span>
Var
R:string;
begin
R:='0,017*100/2=0.85 ом';
writeln(R);
end.