HOME ПРИМЕРЫ THANKS НОВИЧКАМ ДОКИ LINKS JavaScript Mail |
|
|
program Max_search; uses crt; const m=50; type vector=array[1..m] of integer; var a:vector; i,imax,max,p:integer; Begin clrscr; randomize; writeln('Создание массива и его вывод'); for i:=1 to m do begin p:=random(50); a[i]:=p-30; write(a[i]:4); end; max:=a[1]; for i:=2 to m do if max<a[i] then begin max:=a[i]; imax:=i end; writeln; writeln('значение максимального=',max); writeln('Индекс максимального=',imax); writeln('Для завершения работы нажмите <Enter>'); readln END. |
Комментарии Замечания: 1. При выводе начального массива хорошо бы выводить не только сам элемент, но и его индекс. Иначе проверка задачи сильно усложнится даже для m=50. Поэтому я бы написал: write(' a[',i:3,']=',a[i]:4); 2. В случае если первый элемент окажется максимальным, значение imax будет неопределено. Поэтому должно быть: max:=a[1]; imax:=1; 3. В условии задачи сказано "и его индексов" - множественное число. Значит необходимо проверять не равны ли другие элементы максимальному и если да, то сохранять где-то в другом массиве эти индексы. При этом при смене максимума этот массив надо очищать. to top
|
program Max_search; uses crt; const m=50; type vector=array[1..m] of integer; var a:vector; min,imin,i,imax,max,p:integer; Begin clrscr; randomize; writeln('Создание массива и его вывод'); for i:=1 to m do begin p:=random(50); a[i]:=p-30; write(a[i]:4); end; max:=a[1]; for i:=2 to m do if max<a[i] then begin max:=a[i]; imax:=i end else if min>a[i] then begin min:=a[i]; imin:=i end; writeln; writeln('значение максимального=',max); writeln('Индекс максимального=',imax); writeln('значение минимального=',min); writeln('Индекс минимального=',imin); writeln('Для завершения работы нажмите <Enter>'); readln END. |
Комментарии 1. См. комментарии 1,2 предыдущего примера. 2. min изначально не определено. 3. Совершенно лишний оператор else. Возможно, и не существует набора данных при которых данный алгоритм будет работать неправильно, но это требует доказательства. Гораздо проще поставить в цикле операторные скобки begin end и убрать else. for i:=2 to m do begin if max<a[i] then begin max:=a[i]; imax:=i end; if min>a[i] then begin min:=a[i]; imin:=i end; end; Это будет работать однозначно. Хотя, если доказать, что набора данных при котором исходный алгоритм будет работать неправильно не существует, то он будет более эффективным, поскольку в нем будет на несколько операций сравнения меньше. to top
|
program post; uses crt; const m=15;a: array[1..m] of byte=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); var i,imax,max,p:integer; ... далее как в примере 14. |
Комментарии ОК to top Решение |
program T20; uses crt; const n=20; Var i,a,b,c,d:integer; mas:array [1..n] of integer; begin clrscr; randomize; for i:=1 to n do begin mas[i]:=random(25); write(mas[i]:3); end; writeln; for b:=1 to n do begin for i:=1 to n do begin if mas[i-1]<mas[i] then begin a:=mas[i-1];mas[i-1]:=mas[i]; mas[i]:=a; end; end; end; writeln; for i:=1 to n do write(mas[i]:3); readln; end. {переформатированный вариант - Модератор} program T20; uses crt; const n=20; var i,a,b,c,d:integer; mas:array [1..n] of integer; begin clrscr; randomize; for i:=1 to n do begin mas[i]:=random(25); write(mas[i]:3); end; writeln; for b:=1 to n do begin for i:=1 to n do begin if mas[i-1]<mas[i] then begin a:=mas[i-1]; mas[i-1]:=mas[i]; mas[i]:=a; end; end; end; writeln; for i:=1 to n do write(mas[i]:3); readln; end. |
HOME EXAMPLES |
|