Hello. I apologize for possibly a stupid question, but I just started studying Pascal and already many that I tried to fix the problem, but it did not work out, so I decided to contact here. I have the following problem: when starting the program, it writes an error in line 19:

You cannot change the value of a loop variable inside this loop.

But the actual code itself:

uses crt; type Tmas=array[1..20] of real; Tmatr=array[1..20] of Tmas; procedure Per(k,n:integer;var a:Tmatr; var b:Tmas); var i,j:integer;z:real; begin z:=a[k,k];i:=k;//Ссли Π³Π»Π°Π²Π½Ρ‹ΠΉ элСмСнт строки (a[k,k])=0, z=0; Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ эту строку ///(i:=k;) for j:=k+1 to n do //ΠΎΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ стороки Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΈΡ‰Π΅ΠΌ самый большой элСмСнт Π² Ρ‚ΠΎΠΌ столбцС, Π³Π΄Π΅ 0 begin if abs(a[j,k])>z then //ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ поиск максимального begin z:=a[j,k]; i:=j; end; if i>k then //Ссли нашли большС ноля begin for j:=k to n do //Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅ΠΌ ΠΎΠ±ΠΌΠ΅Π½ элСмСнтами ΠΌΠ΅ΠΆΠ΄Ρƒ строкой с Π½ΠΎΠ»Π΅ΠΌ ΠΈ begin //строкой с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтом Π² столбцС с Π½ΠΎΠ»Π΅ΠΌ z:=a[i,j];a[i,j]:=a[k,j];a[k,j]:=z; end; z:=b[i];b[i]:=b[k];b[k]:=z; //ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Π΅ΠΌ свободныС Ρ‡Π»Π΅Π½Ρ‹ end; end; end; var a:Tmatr; //ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° систСмы b:Tmas; //массив свободных Ρ‡Π»Π΅Π½ΠΎΠ² x:Tmas; //массив ΠΊΠΎΡ€Π½Π΅ΠΉ систСмы n,i,j,k:integer; //счСтчики Ρ†ΠΈΠΊΠ»ΠΎΠ² z,r,g:real; //Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ расчСтах begin clrscr; write('Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ n='); readln(n); writeln('Π’Π²Π΅Π΄ΠΈΡ‚Π΅ коэффициСнты систСмы ΠΈ свободныС Ρ‡Π»Π΅Π½Ρ‹'); for i:=1 to n do for j:=1 to n+1 do read(A[i,j]); //Π²Π²ΠΎΠ΄ΠΈΠΌ Π² строку Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π» коэффициСнты ΠΈ свободный Ρ‡Π»Π΅Π½ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уравнСния, ΠΆΠΌΠ΅ΠΌ //Enter, //Π²Π²ΠΎΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку ΠΈ Ρ‚Π°ΠΊ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° clrscr; //ΠΎΡ‡ΠΈΡ‰Π°Π΅ΠΌ экран writeln('ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° коэффициСнтов ΠΈ свободных Ρ‡Π»Π΅Π½ΠΎΠ²'); //Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ систСмы for i:=1 to n do begin for j:=1 to n+1 do write(A[i,j]:6:2); writeln; end; //ΠŸΡ€ΡΠΌΠΎΠΉ Ρ…ΠΎΠ΄ Гаусса, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ коэффициСнтов Π² Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° //2,35 -5,36 4,56 16,25 //0,00 -3,25 7,26 25,39 //0,00 0,00 2,35 59,23 //здСсь ΠΏΠΎΡ‚ΠΎΠΌ Π½Π°ΠΉΠ΄Π΅ΠΌ 3-ΠΈΠΉ ΠΊΠΎΡ€Π΅Π½ΡŒ (59,23/2,35), Π° ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ Ρ…ΠΎΠ΄ΠΎΠΌ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ for i:=1 to n do b[i]:=a[i,n+1]; //присваиваСм значСния массиву свободных Ρ‡Π»Π΅Π½ΠΎΠ² (послСдний столбСц ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹) for k:=1 to n do //Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки begin if a[k,k]=0 then Per(k,n,a,b);//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° for j:=k+1 to n do //ΠΈΠ΄Π΅ΠΌ ΠΏΠΎ строкС Π²Ρ‹ΡˆΠ΅ Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° begin r:=a[j,k]/a[k,k]; //вычисляСм коэффициСнт привСдСния ΠΏΠ΅Ρ€Π²Ρ‹Ρ… коэффициСнтов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ //Ρ€Π°Π²Π½Ρ‹ ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠΈ Π΄Π°Π²Π°Π»ΠΈ 0 (освобоТдаСмся ΠΎΡ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ нСизвСстного), //Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ //1-Π΅ ΡƒΡ€. 2Ρ…1+3Ρ…1-4Ρ…3=12 //2-Π΅ ΡƒΡ€ -3Ρ…1+2Ρ…2+2Ρ…3=25 //r= -3/2, Ρ‚ΠΎΠ³Π΄Π° 2Ρ…1*-3/2=-3Ρ…1 //Π²Ρ‹Ρ‡Ρ‚Π΅ΠΌ ΠΈΠ· ΡƒΡ€.2-ΡƒΡ€.1, Ρ…1 исчСзнСт for i:=k to n do begin a[j,i]:=a[j,i]-r*a[k,i]; //сСйчас ΡƒΠΌΠ½ΠΎΠΆΠΈΠ² всС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΡƒΡ€Π°Π²Π°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π° -3/2, Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ end; //уравнСния Π²Ρ‚ΠΎΡ€ΠΎΠ΅ b[j]:=b[j]-r*b[k]; //ΠΈ свободнгыС Ρ‡Π»Π΅Π½Ρ‹ end; end; //систСма Π±ΡƒΠ΄Π΅Ρ‚ 1. 2Ρ…1+3Ρ…1-4Ρ…3=12 // 2. 0Ρ…1+(2-(3*-3/2))Ρ…2 +(2+(4*-3/2)=25-12*(-3/2) //ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Ρ…ΠΎΠ΄ Гаусса, Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΡ€Π½ΠΈ for k:=n downto 1 do //ΠΎΡ‚ послСднСй строки ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΉ begin r:=0; for j:=k+1 to n do //Π² строкС ΠΎΡ‚ Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ Π²ΠΏΡ€Π°Π²ΠΎ (Π³Π΄Π΅ Π½Π΅ Π½ΠΎΠ»ΠΈ) begin g:=a[k,j]*x[j]; //ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅ΠΌ коэффициСнты Π½Π° извСстныС ΡƒΠΆΠ΅ ΠΊΠΎΡ€Π½ΠΈ r:=r+g; //суммируСм end; x[k]:=(b[k]-r)/a[k,k]; //ΠΈΠ· ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ прямым Ρ…ΠΎΠ΄ΠΎΠΌ свободного Ρ‡Π»Π΅Π½Π° Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ //суммму ΠΈ Π΄Π΅Π»ΠΈΠΌ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ коэффициСнт (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ) end; writeln('ΠšΠΎΡ€Π½ΠΈ систСмы:'); //Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ for i:=1 to n do write('x[',i,']=',x[i]:0:2,' '); readln; end. 

PascalABC.Net Please help me fix the problem or tell me what is wrong. Thanks a lot in advance :)

  • Cycle (line 9) for variable j. Inside this loop (on line 19) you again set the loop on the variable j. There is an error. - vikttur
  • @vikttur, How else can I write it down? I now think that it is possible using the while loop (in line 19), but I am not sure that this is correct - Sergey M
  • @vikttur, thank you very much, it helped :) - Sergey M

1 answer 1

Loop (line 9) with variable j . Inside this loop (on line 19) you again set the loop on the variable j . There is an error.

Set another variable inside the loop, there are enough letters in the alphabet)