Проверьте, пожалуйста, код и исправьте - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Дан массив X(n) НАйти наибольший элемент и заменить его на сумму всех массивов. Если я правильно понял то это так должно быть да ? если не правильно сделал исправьте пожалуйста
Листинг программы
  1. type
  2. mm=array[1..10]of integer;
  3. var
  4. m:mm;
  5. i,ii:integer;
  6. sum:integer;//здесь хранится сумма всех массивов
  7. res,res4,res5:integer;//здесь хранится самый большой массив
  8. res2:boolean;
  9. function proverka(m:mm;i:integer):integer;
  10. var
  11. ii,res4:integer;
  12. begin
  13. res4:=0;//округляем
  14. for ii:=1 to i do begin
  15. if i<>ii then begin //себя не проверять
  16. if m[ii]=m[i] then res4:=res4+1;//нашли похожую цифру увеличим щетчик
  17. end; end;
  18. //если щетчик больше 0 то нашли похожую цифру и сразу генерируем индекс массива
  19. // результат передаем в программу
  20. // если щетчик 0 то передаем себя
  21. if res4>0 then proverka:=1+random(10) else proverka:=m[i];
  22. end;
  23. //////////// конец функции
  24. begin;
  25. sum:=0;//округляем сумму всех массивов
  26. res:=1;//делаем самый большой первый эллемент массива
  27. randomize;//генератор случайных чисел
  28. for i:=1 to 10 do begin
  29. m[i]:=1+random(10);//генерируем число от 1 до 10 и записываем в массив под i индексом
  30. ///////////////////////
  31. //проверяем на повторения чисел в других эллементах массива
  32. res2:=false;
  33. repeat
  34. for ii:=1 to i do begin
  35. res5:=m[i];//записываем число с массива
  36. res4:=proverka(m,i);//переходим в фенкцию и записываем результат в res4
  37. //если возврат функции равен числу массива то выход из цикла
  38. //если нет то все заново
  39. if res4=res5 then res2:=true else begin m[i]:=res4;res2:=false;end;
  40. end;
  41. until res2=true;
  42. ////////////////////////
  43. write(m[i]:4);//выводим масив на экран для наглядрости под i индексом
  44. if m[res]<m[i]then res:=i;// если элемент массива под номером ? меньше масива настоящего(что счяс сгенерировался то res присваеваем номер элемента массива
  45. sum:=sum+m[i];//вычисляется сумма всех массивов
  46. end;
  47. //все сумма подсчитана всех массивов
  48. // самый большой элемент найден он будет m[res]
  49. m[res]:=sum;//меняем значения массива что было присвоено при генерации на сумму всех массивов
  50. //выводим результат на экран
  51. writeln;//перенос на новую строку
  52. for i:=1 to 10 do
  53. write(m[i]:4);
  54. end.

Решение задачи: «Проверьте, пожалуйста, код и исправьте»

textual
Листинг программы
  1. const nmax=50;
  2. type mm=array[1..nmax]of integer;
  3.  
  4. //ФУНКЦИЯ НАХОЖДЕНИЯ ИНДЕКСА МАКСИМАЛЬНОГО ЭЛЕМЕНТА
  5. function max(m:mm;n:integer):integer;
  6. var i,imx:integer;
  7. begin
  8. imx:=1;
  9. for i:=2 to n do
  10. if m[i]>m[imx] then imx:=i;
  11. max:=imx;
  12. end;
  13.  
  14. //ФУНКЦИЯ НАХОЖДЕНИЯ СУММЫ
  15. function summa(m:mm;n:integer):integer;
  16. var i,s:integer;
  17. begin
  18. s:=m[1];
  19. for i:=2 to n do
  20. s:=s+m[i];  
  21. summa:=s;  
  22. end;
  23.  
  24. //ПРОЦЕДУРА СОЗДАНИЯ МАССИВА ИЗ РАЗНЫХ ЧИСЕЛ
  25. procedure massiv(var m:mm;var n:integer);
  26. var i,i1,k,x:integer;
  27. f:boolean;
  28. begin
  29. repeat
  30. write('Введите размер массива от 2 до ',nmax,' n=');
  31. readln(n);
  32. until n in [2..nmax];  
  33. randomize;
  34. m[1]:=-n+random(2*n+1);
  35. k:=1;
  36. for i:=2 to n do
  37. begin
  38. repeat
  39. x:=-n+random(2*n+1);
  40. i1:=1;
  41. f:=true;
  42. while (i1<=k)and f do
  43. if x=m[i1] then f:=false else inc(i1);
  44. until f;
  45. m[i]:=x;
  46. k:=k+1;
  47. end;
  48. end;
  49.  
  50. //ПРОЦЕДУРА ЗАМЕНЫ МАКСИМАЛЬНОГО НА СУММУ
  51. procedure zamena(var m:mm;n,imx,s:integer);
  52. begin
  53. m[imx]:=s;
  54. end;
  55.  
  56. //ПРОЦЕДУРА ПЕЧАТИ МАССИВА
  57. procedure print(m:mm;n:integer;s:string);
  58. var i:integer;
  59. begin
  60. writeln(s);
  61. for i:=1 to n do
  62. write(m[i]:4);  
  63. writeln;
  64. end;
  65.  
  66. //НАЧАЛО ПРОГРАММЫ
  67. var x:mm;
  68. n,imx,s:integer;
  69. begin
  70. massiv(x,n);
  71. print(x,n,'Исходный массив');
  72.  
  73. imx:=max(x,n);
  74. s:=summa(x,n);
  75. writeln('Максимальный элемент x[',imx,']=',x[imx]);
  76. writeln('Сумма=',s);
  77. zamena(x,n,imx,s);
  78. print(x,n,'Замена максимального суммой');
  79.  
  80. end.

Объяснение кода листинга программы

  1. const nmax=50;
  2. type mm=array[1..nmax]of integer;
  3. 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;
  4. 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;
  5. 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;
  6. procedure zamena(var m:mm;n,imx,s:integer); begin m[imx]:=s; end;
  7. 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;
  8. 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;
  9. start();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы