@dung3on_mast3r

Что я делаю не так? Не получается переписать код на С на код Паскаля. Как исправить?

Столкнулся с такой проблемой, код я переписал, но у меня тут возник вопрос, а как быть дальше? Вот сообственно сам код на паскале и С.
Ругается на переменную, якобы нельзя изменять переменную счетчик внутри цикла.

На Паскале:
program lr4_1__v46;

var a: array[1..100] of integer;
var i,j,n,r,lk,k,x,max:integer;

begin
  writeln('Введите размер массива n = ');
  readln(n);
  max:=a[1];
  writeln('Введите элементы массива');
  for i:=1 to n do begin
    writeln('A[',i,']: '); read(a[i]);
    max:=(a[i]);
    if a[i]>max then max:=a[i];
  end;
  for i:=1 to n do
    if a[i]>max then max:=a[i];
  r:=0;
  for i:=1 to n do begin
    if a[i]<0 then begin
      r:=r+1;
      lk:=j;
      if r >= 3 then begin
        j:=lk-2;
        while (i<=lk) do begin
          a[j]:=max;
          r:=0;
          j:=j-1;
        end;
      end;
    end;
    if a[i]>0 then r:=0;
  end;
  i:=j;
  writeln;
  for i:=1 to n do writeln('A[',i,']: ',a[i]);
end.


На С:
#include <stdio.h>
int main(){
int i,n, r, lk, k, x;
printf("Введите размер массива n= ");
scanf("%d",&n);
int a[n];
int max=a[0];
for (i=0; i<n; i++)
{
printf("A[%d]:",i);
scanf("%d",&a[i]);
max=a[i];
if(a[i]>max){max=a[i];}
}
for (i=0; i<n; i++)
{
if(a[i]>max){max=a[i];}
}
r=0;
 for (i=0; i<n; i++){
  if (a[i]<0){
        r=r+1; 
        lk=i;
          
         if(r>=3){
          for(i=lk-2; i<=lk; i++)
               a[i]=max; r=0;
                 i=i-1;}
  }
  if (a[i]>0){r=0;}
 }
printf("\n");
 
for (i=0; i<n; i++)
printf("A[%d]:%d\n",i,a[i]);
 
printf("Макс: %d\n", max);}
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Рекомендую для начала привести код на C в нормальный вид, с правильными отступами и нормальным стилем. У вас ошибка в восприятии блока
if(r>=3){
          for(i=lk-2; i<=lk; i++)
               a[i]=max; r=0;
                 i=i-1;}

который должен читаться как
if (r >= 3) {
    for (i = lk - 2; i <= lk; i++) {
        a[i]=max;
    }
    r = 0;
    i=i-1;
}

Потом стоит исправить ошибку в поиске максимума, когда переменной max присваивается значение неинициализированного элемента a[0].
Выбросить дубль цикла поиска максимума в массиве.
Ну и переписать цикл for на while, раз в паскале нельзя изменять значение переменной цикла.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
21 нояб. 2024, в 19:31
500 руб./за проект
21 нояб. 2024, в 19:28
200000 руб./за проект