Для проектных работ по информатике нужен мощный ком , для монтирования видео и обработки фотографий , так вот , есть моноблок , в нем нет разъема THUNDERBOLT , как я могу вшить в моноблок тандерболт ?
Если в нашем распоряжении имеется современная версия PascalABC.Net 3.2, то есть минимум два решить такую задачу. Массив мы будем заполнять случайными числами из интервала [1;98].
Первый использовать имеющуюся в этой версии паскаля возможность находить максимумы и минимумы встроенными в язык средствами. Это очень быстро программируется и обычно страхyет от возможных ошибок при написании более детальных программ.
// PascalABC.NET 3.2, сборка 1353 от 27.11.2016 // Внимание! Если программа не работает, обновите версию!
begin var a:=ArrRandom(30,1,98); a.Println; Writeln('D=',a.Where(x->x.IsEven).Max-a.Where(x->x.IsOdd).Max) end.
Второй не привязан к упомянутой выше версии языка, т.е. может быть использован в школах, исповедующих "доисторический стиль программирования" ))) Естественно, он длиннее и можно будет сравнить количество строк кода. Алгоритм основан на последовательном переборе элементов массива и одновременном получении максимума среди четных и нечетных его элементов.
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 begin if a1max<a[i] then a1max:=a[i] end else if a2max<a[i] then a2max:=a[i] Выделенные мной begin и end на первый взгляд не нужны. Но в этом-то и ошибка! По правилам языка паскаль когда внутри одного if встречается другой if и хотя бы один из них неполный, т.е. не содержит else, последний else относится к самому последнему из if, который без его будет неполным. Запутанно? Поясню на нашем фрагменте. Его без этих begin ... end можно понимать так:
if a[i] mod 2 <> 0 then if a1max<a[i] then a1max:=a[i] else if a2max<a[i] then a2max:=a[i]
Но можно и так:
if a[i] mod 2 <> 0 then if a1max<a[i] then a1max:=a[i] else if a2max<a[i] then a2max:=a[i]
И паскаль, увы, понимает как раз по последнему варианту. Посему как раз begin ... end решают эту проблему. Но... встречается она не очень часто и о ней быстро забывают. А потом нарываютcя и не могут понять причины.
const n=10; var min,i: integer; a: array[1..n] of integer; begin randomize; min:=11; for i:=1 to n do begin a[i]:=random(1,10); write (a[i],' '); // для наглядности. можно удалить if (i mod 2 =1) and (a[i]<min) then min:=a[i]; end; writeln; writeln ('min = ',min) end.
Пример: 5 4 7 8 6 2 10 4 9 9 min = 5
2 задача:
const n=10; var max,count,i: integer; a: array[1..n] of integer; begin randomize; max:=0; count:=0; for i:=1 to n do begin a[i]:=random(1,10); write (a[i],' '); // для наглядности. можно удалить if a[i]>max then max:=a[i]; end; for i:=1 to n do if max=a[i] then count:=count+1; writeln; writeln ('max = ',max); writeln ('count = ',count); end.
Первый использовать имеющуюся в этой версии паскаля возможность находить максимумы и минимумы встроенными в язык средствами. Это очень быстро программируется и обычно страхyет от возможных ошибок при написании более детальных программ.
// PascalABC.NET 3.2, сборка 1353 от 27.11.2016
// Внимание! Если программа не работает, обновите версию!
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
begin if a1max<a[i] then a1max:=a[i] end
else
if a2max<a[i] then a2max:=a[i]
Выделенные мной begin и end на первый взгляд не нужны. Но в этом-то и ошибка!
По правилам языка паскаль когда внутри одного if встречается другой if и хотя бы один из них неполный, т.е. не содержит else, последний else относится к самому последнему из if, который без его будет неполным.
Запутанно? Поясню на нашем фрагменте.
Его без этих begin ... end можно понимать так:
if a[i] mod 2 <> 0 then
if a1max<a[i] then a1max:=a[i]
else
if a2max<a[i] then a2max:=a[i]
Но можно и так:
if a[i] mod 2 <> 0 then
if a1max<a[i] then a1max:=a[i]
else
if a2max<a[i] then a2max:=a[i]
И паскаль, увы, понимает как раз по последнему варианту. Посему как раз begin ... end решают эту проблему. Но... встречается она не очень часто и о ней быстро забывают. А потом нарываютcя и не могут понять причины.
Что ж, выбор как решать - за вами!
const n=10;
var
min,i: integer;
a: array[1..n] of integer;
begin
randomize;
min:=11;
for i:=1 to n do begin
a[i]:=random(1,10);
write (a[i],' '); // для наглядности. можно удалить
if (i mod 2 =1) and (a[i]<min)
then min:=a[i];
end;
writeln;
writeln ('min = ',min)
end.
Пример:
5 4 7 8 6 2 10 4 9 9
min = 5
2 задача:
const n=10;
var
max,count,i: integer;
a: array[1..n] of integer;
begin
randomize;
max:=0;
count:=0;
for i:=1 to n do begin
a[i]:=random(1,10);
write (a[i],' '); // для наглядности. можно удалить
if a[i]>max
then max:=a[i];
end;
for i:=1 to n do
if max=a[i] then count:=count+1;
writeln;
writeln ('max = ',max);
writeln ('count = ',count);
end.
Пример:
8 5 3 2 2 10 10 9 3 10
max = 10
count = 3