Проверьте, пожалуйста, код и исправьте - Turbo Pascal
Формулировка задачи:
Дан массив X(n) НАйти наибольший элемент и заменить его на сумму всех массивов.
Если я правильно понял то это так должно быть да ? если не правильно сделал исправьте пожалуйста
Листинг программы
- type
- mm=array[1..10]of integer;
- var
- m:mm;
- i,ii:integer;
- sum:integer;//здесь хранится сумма всех массивов
- res,res4,res5:integer;//здесь хранится самый большой массив
- res2:boolean;
- function proverka(m:mm;i:integer):integer;
- var
- ii,res4:integer;
- begin
- res4:=0;//округляем
- for ii:=1 to i do begin
- if i<>ii then begin //себя не проверять
- if m[ii]=m[i] then res4:=res4+1;//нашли похожую цифру увеличим щетчик
- end; end;
- //если щетчик больше 0 то нашли похожую цифру и сразу генерируем индекс массива
- // результат передаем в программу
- // если щетчик 0 то передаем себя
- if res4>0 then proverka:=1+random(10) else proverka:=m[i];
- end;
- //////////// конец функции
- begin;
- sum:=0;//округляем сумму всех массивов
- res:=1;//делаем самый большой первый эллемент массива
- randomize;//генератор случайных чисел
- for i:=1 to 10 do begin
- m[i]:=1+random(10);//генерируем число от 1 до 10 и записываем в массив под i индексом
- ///////////////////////
- //проверяем на повторения чисел в других эллементах массива
- res2:=false;
- repeat
- for ii:=1 to i do begin
- res5:=m[i];//записываем число с массива
- res4:=proverka(m,i);//переходим в фенкцию и записываем результат в res4
- //если возврат функции равен числу массива то выход из цикла
- //если нет то все заново
- if res4=res5 then res2:=true else begin m[i]:=res4;res2:=false;end;
- end;
- until res2=true;
- ////////////////////////
- write(m[i]:4);//выводим масив на экран для наглядрости под i индексом
- if m[res]<m[i]then res:=i;// если элемент массива под номером ? меньше масива настоящего(что счяс сгенерировался то res присваеваем номер элемента массива
- sum:=sum+m[i];//вычисляется сумма всех массивов
- end;
- //все сумма подсчитана всех массивов
- // самый большой элемент найден он будет m[res]
- m[res]:=sum;//меняем значения массива что было присвоено при генерации на сумму всех массивов
- //выводим результат на экран
- writeln;//перенос на новую строку
- for i:=1 to 10 do
- write(m[i]:4);
- end.
Решение задачи: «Проверьте, пожалуйста, код и исправьте»
textual
Листинг программы
- const nmax=50;
- type mm=array[1..nmax]of integer;
- //ФУНКЦИЯ НАХОЖДЕНИЯ ИНДЕКСА МАКСИМАЛЬНОГО ЭЛЕМЕНТА
- function max(m:mm;n:integer):integer;
- var i,imx:integer;
- begin
- imx:=1;
- for i:=2 to n do
- if m[i]>m[imx] then imx:=i;
- max:=imx;
- end;
- //ФУНКЦИЯ НАХОЖДЕНИЯ СУММЫ
- function summa(m:mm;n:integer):integer;
- var i,s:integer;
- begin
- s:=m[1];
- for i:=2 to n do
- s:=s+m[i];
- summa:=s;
- end;
- //ПРОЦЕДУРА СОЗДАНИЯ МАССИВА ИЗ РАЗНЫХ ЧИСЕЛ
- procedure massiv(var m:mm;var n:integer);
- var i,i1,k,x:integer;
- f:boolean;
- begin
- repeat
- write('Введите размер массива от 2 до ',nmax,' n=');
- readln(n);
- until n in [2..nmax];
- randomize;
- m[1]:=-n+random(2*n+1);
- k:=1;
- for i:=2 to n do
- begin
- repeat
- x:=-n+random(2*n+1);
- i1:=1;
- f:=true;
- while (i1<=k)and f do
- if x=m[i1] then f:=false else inc(i1);
- until f;
- m[i]:=x;
- k:=k+1;
- end;
- end;
- //ПРОЦЕДУРА ЗАМЕНЫ МАКСИМАЛЬНОГО НА СУММУ
- procedure zamena(var m:mm;n,imx,s:integer);
- begin
- m[imx]:=s;
- end;
- //ПРОЦЕДУРА ПЕЧАТИ МАССИВА
- procedure print(m:mm;n:integer;s:string);
- var i:integer;
- begin
- writeln(s);
- for i:=1 to n do
- write(m[i]:4);
- writeln;
- end;
- //НАЧАЛО ПРОГРАММЫ
- var x:mm;
- n,imx,s:integer;
- begin
- massiv(x,n);
- print(x,n,'Исходный массив');
- imx:=max(x,n);
- s:=summa(x,n);
- writeln('Максимальный элемент x[',imx,']=',x[imx]);
- writeln('Сумма=',s);
- zamena(x,n,imx,s);
- print(x,n,'Замена максимального суммой');
- end.
Объяснение кода листинга программы
- const nmax=50;
- type mm=array[1..nmax]of integer;
- function max(m:mm;n:integer):integer; var i,imx:integer; begin imx:=1; for i:=2 to n do if m[i]>m[imx] then imx:=i; max:=imx; end;
- function summa(m:mm;n:integer):integer; var i,s:integer; begin s:=m[1]; for i:=2 to n do s:=s+m[i]; summa:=s; end;
- procedure massiv(var m:mm;var n:integer); var i,i1,k,x:integer; f:boolean; begin repeat write('Введите размер массива от 2 до ',nmax,' n='); readln(n); until n in [2..nmax]; randomize; m[1]:=-n+random(2n+1); k:=1; for i:=2 to n do begin repeat x:=-n+random(2n+1); i1:=1; f:=true; while (i1<=k)and f do if x=m[i1] then f:=false else inc(i1); until f; m[i]:=x; k:=k+1; end; end; end;
- procedure zamena(var m:mm;n,imx,s:integer); begin m[imx]:=s; end;
- procedure print(m:mm;n:integer;s:string); var i:integer; begin writeln(s); for i:=1 to n do write(m[i]:4); writeln; end;
- procedure start(); var x:mm; n,imx,s:integer; begin massiv(x,n); print(x,n,'Исходный массив'); imx:=max(x,n); s:=summa(x,n); writeln('Максимальный элемент x[',imx,']=',x[imx]); writeln('Сумма=',s); zamena(x,n,imx,s); print(x,n,'Замена максимального суммой'); end;
- start();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д