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 :)