errors-pascal - دانشگاه صنعتی شریف

Download Report

Transcript errors-pascal - دانشگاه صنعتی شریف

‫به نام خدا‬
‫خطاهای پاسکال‬
‫پروژه درس برنامهسازی پاسکال‬
‫دانشگاه صنعتی شریف‬
‫مجری‬
‫سجاد اعیانی ثانی‬
‫استاد درس‬
‫صادق دری نوگورانی‬
‫بهار ‪1391‬‬
‫‪1‬‬
‫معرفی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪2‬‬
‫در هر کدام از صفحات ابتدا یکی از خطاهای پاسکال معرفی شده است‪.‬‬
‫بعد از ترجمهی خطا‪ ،‬یک مثال از آن خطا آمده است‪.‬‬
‫قسمت خطادار برنامه با رنگ قرمز مشخص شده است‪.‬‬
‫قسمت اصالح شده در برنامهی مثال با رنگ سبز مشخص شده است‪.‬‬
‫در بعضی صفحات توصیههایی در رابطه با برنامه وجود دارد که با رنگ‬
‫صورتی مشخص شده است‪.‬‬
‫برنامهی درست با آبی آورده شده است‪.‬‬
‫در بعضی موارد برنامه دوباره تایپ نشده و با‬
‫پیکان‬
‫اصالح شده است‪.‬‬
‫قسمتهایی از برنامه که مرتبط با خطا هستند با رنگ بنفش مشخص‬
‫شدهاند‪.‬‬
‫سجاد اعیانی ثانی ‪ -‬خطاهای پاسکال ‪ -‬پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬
‫مرجع در مورد سایر خطاها‬
‫‪ ‬فهرست تمام خطاها در ‪ Free Pascal‬را میتوانید در فایل راهنمای‬
‫‪ User’s Manual‬که به همراه ‪ Free Pascal‬نصب میشود پیدا کنید‪.‬‬
‫‪3‬‬
‫سجاد اعیانی ثانی ‪ -‬خطاهای پاسکال ‪ -‬پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬
‫انواع خطاها‬
‫‪ ‬خطاهایی که در این اسالیدها به آن میپردازیم به دو دسته کلی تقسیم‬
‫میشوند‪:‬‬
‫‪ ‬خطاهای زمان کامپایل‪ :‬این خطاها در زمان کامپایل (ترجمه به زبان ماشین)‬
‫توسط کامپایلر تولید میشوند‪ .‬برنامه در صورت وجود یکی از این خطاها‪،‬‬
‫نادرست است و فایل اجرایی برای آن تولید نمیشود که بتواند اجرا شود‪.‬‬
‫(صفحه ‪ 129‬فایل راهنما)‬
‫‪ ‬خطاهای زمان اجرا‪ :‬وجود این خطاها تا زمان اجرا مشخص نمیشود‪ .‬در این‬
‫صورت برنامه اجرا میشود و به محض اینکه اجرای برنامه به یکی از این‬
‫خطاها منجر شود‪ ،‬برنامه متوقف میشود و خطا یا شماره آن نمایش داده‬
‫میشود و امکان ادامه برنامه وجود ندارد‪( .‬صفحه ‪ 176‬فایل راهنما)‬
‫‪4‬‬
‫سجاد اعیانی ثانی ‪ -‬خطاهای پاسکال ‪ -‬پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬
‫فهرست خطاهای زمان کامپایل در اسالیدها‬












Syntax error
‘ ; ’ expected
Illegal expression
Duplicate identifier
Begin expected
Identifier expected
Can’t read or write variables of
this type
Identifier not found
String constant exceeds line
Constant strings can't be longer
than 255 chars
Line too long
Lower bound greater than upper
bound












Incompatible type
Too many variables
Illegal assignment
Ordinal expression expected
Variable dose not seem to be
initialized
Can't determine which overloaded
function to call
Illegal qualifier
Unexpected end of file
Variable identifier expected
Incompatible types
To or downto expected
Pointer type expected
‫ پروژه درس برنامه نویسی‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
‫پاسکال دانشگاه شریف‬
5
‫فهرست خطاهای زمان اجرا در اسالیدها‬
 2 - File Not Found
 102 - File Not Assigned
 103 - File Not Open
 104 - File Not Open for Input
 105 - File Not Open For Output
 200 - Division by zero
 201 - Range check error
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
6
‫این خطاها در زمان کامپایل (ترجمه به زبان ماشین) توسط کامپایلر تولید میشوند‪.‬‬
‫برنامه در صورت وجود یکی از این خطاها‪ ،‬نادرست است و فایل اجرایی برای آن تولید‬
‫نمیشود که بتواند اجرا شود‪.‬‬
‫‪Syntax error‬‬
‫‪ ‬مثال‪ :1‬تایپ نشدن یک حرف یا عالمت‪.‬‬
‫‪var‬‬
‫;‪a,i:integer‬‬
‫‪begin‬‬
‫;‪for i=1 to 10 begin readln(a); a:=a+i‬‬
‫;‪writeln(a);end‬‬
‫‪end.‬‬
‫پیغام خطا ‪:‬‬
‫‘ = ‘ ‪Syntax error : ‘ := ‘ expected but found‬‬
‫‪ ‬باید دقت کنیم که برای انتساب از =‪ :‬استفاده میکنیم و برای مقایسه از =‬
‫‪ ‬هنگامی که دو متغیر را باهم مقایسه میکنیم باید هر دو از یک نوع باشند‪.‬‬
‫‪8‬‬
‫سجاد اعیانی ثانی ‪ -‬خطاهای پاسکال ‪ -‬پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬
Syntax error
‫ تایپ نشدن یک کلمه‬:2‫ مثال‬
var
a,i:integer;
begin
for i:=1 to 10 begin readln(a); a:=a+i; writeln(a);end;
end.
Syntax error : ’do’ expected but ‘begin’ found
var
a,i:integer;
begin
for i:=1 to 10 begin do readln(a);
a:=a+i; writeln(a);
end;
end.
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
9
‫‪Syntax error‬‬
‫‪ ‬بعضی از شناسه ها در پاسکال توسط برنامه نویس تعریف میشوند‪.‬‬
‫‪ ‬نامگذاری شناسه ها‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫شناسه ها در پاسکال با یک حرف یا با یک خط زیر( _ ) شروع میشوند‪.‬‬
‫در نامگذاری شناسه ها نباید از کاراکتر فاصله استفاده کرد‪.‬‬
‫شناسه ها نباید با عدد شروع شوند‪.‬‬
‫در نامگذاری شناسه ها نباید از کلمات تعریف شده در پاسکال مثل‬
‫‪ read,write,for,...‬استفاده کرد‪.‬‬
‫پیغام خطا‬
‫‪10‬‬
‫‪var‬‬
‫;‪a,8b:integer‬‬
‫‪begin‬‬
‫‪readln(a);end.‬‬
‫‪Syntax error, "identifier" expected but "ordinal const" found‬‬
‫سجاد اعیانی ثانی ‪ -‬خطاهای پاسکال ‪ -‬پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬
‘ ; ’ expected
var
a:array[1..10,1..10]of char;
i,j,n:integer;
begin
readln(n);
for j:=1 to n do begin
for i:=1 to n do begin
.‫ نیاز به ; است‬
.‫ دستورات پاسکال به ; ختم میشوند‬
‫ اگر در انتهای دستور یکی مانده به اخر عالمت‬
.‫سمی کالن قرار نگیرد پاسکال خطایی نخواهد گرفت‬
ERROR ';' ‫ در غیر این صورت با پیغام خطای‬
.‫مواجه میشویم‬EXPECTED
.‫نباید ; قرار داد‬ELSE ‫ قبل وبعد‬
if j>=i then a[i,j]:='*' else a[i,j]:=' ‘;end; end
for i:=1 to n do begin
for j:=1 to n do begin
write(a[i,j]);end; writeln; end;Readln end.
;
11
Illegal expression
program test;
var
n,i,s,j:integer;
p:boolean;
begin
readln(n);
s:=1;
for i:=1 to n do begin
for j:=1 to i do begin
s:=j*s;
end;
if s<=n then p:true;
end;
if p=true then writeln(s);
readln;
end.
program test;
‫عبارت نامعتبر‬
var
n,i,s,j:integer;
‫ یک عبارت نامعتبر‬P:true
p:boolean;
begin
‫است زیرا برای انتساب از‬
readln(n);
.‫ استفاده میشود‬:=
s:=1;
for i:=1 to n do begin
for j:=1 to i do begin
s:=j*s;
end;
if s<=n then p:=true;
end;
if p=true then writeln(s);
readln;
end.
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬


12
Duplicate identifier
.
Program Test;
Type
‫ تکرار در تعریف شناسه‬
M = Array[1..3, 1..3] of Real;
‫ دراین برنامه یک شناسه دوبار تعریف شده‬:‫ مثال‬
m =array[1..3,1..3]of real;
Procedure readmatrix(var A: M);
‫برای اصالح برنامه باید این خط را از برنامه حذف کرد‬
Var i,j: Integer;
Begin
For i:=1 To 3 Do Begin For j:=1 To 3 Do Begin
Write('A[',i,',',j,']?');
ReadLn(A[i,j]);
End; WriteLn; End;End;
Var Mat : M;
Begin
readMatrix(Mat);
Readln;
End.
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
13
Begin expected
progam fibonachi;
procedure fibo;
var
i,n:integer;
a:array[1..100]of integer;
begin
readln(n);
a[1]:=1;
a[2]:=1;
i:=3;
repeat
a[i]:=a[i-1]+a[i-2];
writeln(a[i]);
i:=i+1;
until i=n+1;
readln;
End;
.‫ است‬begin ‫ نیاز به‬
Begin
fibo;
end.
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
14
Identifier expected
program fibonachi;
procedure ;
var
i,n:integer;
a:array[1..100]of integer;
begin
readln(n);
a[1]:=1;
a[2]:=1;
i:=3;
repeat
a[i]:=a[i-1]+a[i-2];
writeln(a[i]);
i:=i+1;
until i=n+1;
readln; end;
begin
fibo;
end.
.‫نیاز به شناسه است‬
program fibonachi;
procedure fibo;
var
i,n:integer;
a:array[1..100]of integer;
begin
readln(n);
a[1]:=1;
a[2]:=1;
i:=3;
repeat
a[i]:=a[i-1]+a[i-2];
writeln(a[i]);
i:=i+1;
until i=n+1;
readln; end;
begin
fibo;
end.
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
15
Can’t read or write variables of this type
‫ و رشتهها قابل خواندن از کاربر و نوشتن روی‬،‫ حقیقی‬،‫فقط متغیرها از نوعهای صحیح‬
‫ را فقط میتوان نوشت و نمیتوان خواند (یعنی‬boolean ‫ متغیرهای‬.‫صفحه هستند‬
.)‫کاربر نمیتواند آن را وارد کند‬
var
A,b,max:integer;
c:boolean;
begin
readln(a);
readln(b);
Readln(c);
if c= true then max:=a else max:=b;
writeln(max);
end.
var
A,b,max:integer;
c:boolean;
begin
readln(a);
readln(b);
if a>b then c:=true;
if c= true then max:=a else max:=b;
writeln(max);
readln
end.
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
16
‫‪Can’t read variables of this type‬‬
‫مثال ‪ -2‬نمی تواند این متغیر را بخواند‬
‫‪17‬‬
‫یا‬
‫بنویسد‬
‫‪Identifier not found‬‬
‫‪ ‬شناسه شناخته شده نیست‪ .‬زمانی که یک متغیر‬
‫را تعریف نکرده ایم ولی از ان در طول برنامه‬
‫استفاده میکنیم این خطا نمایش داده میشود‪.‬‬
‫‪var‬‬
‫;‪a:array[1..10]of string‬‬
‫;‪s:string‬‬
‫‪begin‬‬
‫;'‪s:='sajjad‬‬
‫‪for i:=1 to length(s) do‬‬
‫;)‪a[i]:= copy(s,i,1‬‬
‫‪for i:=1 to length(s)do‬‬
‫;)]‪writeln(a[i‬‬
‫;‪readln‬‬
‫‪end.‬‬
‫پیغام خطا ; ’ ‪Error : Identifier not found : ‘ i‬‬
‫‪18‬‬
‫سجاد اعیانی ثانی ‪ -‬خطاهای پاسکال ‪ -‬پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬
Identifier not found
program fibonachi;
procedure fibo;
var
i,n:integer;
a:array[1..100]of integer;
begin
readln(n);
a[1]:=1;
a[2]:=1;
i:=3;
repeat
a[i]:=a[i-1]+a[i-2];
writeln(a[i]);
i:=i+1;
until i=n+1;
readln;
end;
begin
fibooo;
FIBO
end.
‫ صدا زده شده ولی شناخته شده‬Fibooo :2‫ مثال‬
.‫نیست‬
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
19
String constant exceeds line
program test;
const
n=100;
e='a';
t=' sajjad aayni sani iranian student
good strong brave
t=' sajjad aayni sani iranian studentgood strong bravebest'
best'
b=true;
.‫ طول ثابت رشته ای زیاد است‬
x:integer=100;
y:single=15.5;
‫کرد‬
‫کوتاه‬
‫را‬
‫ای‬
‫رشته‬
‫ثابت‬
‫طول‬
‫باید‬
:
‫اصالح‬

type
sublnt=1..10;
var
s:string;
begin
readln(s);
if s=t then
writeln(s);
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
20
end.
Constant strings can't be longer than 255 chars
.‫ کاراکتر است‬255 ‫دستورات پاسکال به ; ختم میشوند و حداکثر طول هر دستور‬
Var
f : Text; a,b,c,x : char;
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
S:integer;
sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss:iNTEGER;
Begin
Assign ( f , 'C:\test.txt' );
Rewrite ( f );
.‫ را باید کاهش دهیم‬sss… ‫بنابرین در مثال باید طول‬
c := x;
‫این خطا هنگام استفاده از ثابتهای رشتهای که‬
writeln ( f , 'a' , '* ' , c);
.‫ حرف دارند نیز پیش میآید‬255 ‫بیش از‬
Reset ( f );
read(f,a);
read(f,b);
Close ( f );
Writeln ( a , ' & ', b );
End.
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
21
Line too long
.‫خط طوالنی است‬
Procedure PrintMatrix(A: M);
Var i,j : Integer;
Begin
For i:=1 To 3 Do Begin For j:=1 To 3 Do Begin Write(A[i,j]:5:2, ' '); End; WriteLn; End;
Procedure PrintMatrix(A: M);
Var i,j : Integer;
Begin
For i:=1 To 3 Do
Begin
For j:=1 To 3 Do
Begin
Write(A[i,j]:5:2, ' ');
End;
WriteLn;
End; ‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
:‫مثال‬
22
Lower bound greater than upper bound
Var
a:array[10..1]of integer;
i:integer;
begin
for i:= 8 to 6 do
readln(a[i]);
readln; end.
.‫ حد پایین بزرگتر از حد باال است‬
Var
a:array[1..10]of integer;
i:integer;
begin
for i:= 8 downto 6 do
readln(a[i]);
readln; end.
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
23
Incompatible type
‫نوع نامتناسب‬
‫خروجی هر عبارت نوع مشخصی دارد و متغیری که این خروجی را دریافت میکند‬
.‫باید از همان نوع باشد‬
‫در این برنامه کاربر یک رشته را وارد میکند و برنامه حروف رشته را از آخر به‬:‫مثال‬
char ‫ نمی تواند در متغیر از نوع‬copy ‫در این برنامه خروجی تابع‬.‫اول چاپ میکند‬
var
var
.‫قرار بگیرد‬
i,n:integer;
ht,st:string;
pt:array[1..20]of char;
begin
readln(st); ht:='';
for i:= length(st) downto 1 do
pt[i]:=copy(st,i,1);
for i:=1 to length(st) do
ht:=concat(pt[i],ht);
writeln(ht);
readln;
end.
i,n:integer;
ht,st:string;
pt:array[1..20]of string;
begin
readln(st); ht:='';
for i:= length(st) downto 1 do
pt[i]:=copy(st,i,1);
for i:=1 to length(st) do
ht:=concat(pt[i],ht);
writeln(ht);
readln;
end.
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
24
Incompatible type
Program Pointers;
Type
PInteger = ^Integer; PReal = ^Real;
Var
A, B: PInteger;
E, F: preal;
Begin
New(A); New(B);
A^ := 10;
B^ := A ;
Readln(B^);
New(E);
E^ := A^ + B^;
new(f);
F^ := A^;
Dispose(A);
Dispose(B);
New(A);
new(b);
A^ := 42;
B^ := A^;
F^ := B^ * 2;
writeln(f^);
Dispose(B); Dispose(E); Dispose(F); readln;
‫نویسی پاسکال دانشگاه شریف‬
End.
‫نوع نامتناسب‬
‫اگر در برنامه از اشاره گر استفاده کرده باشیم و این‬
‫پیام نمایش داده شود به احتمال زیاد کالهک را‬
.‫فراموش کرده ایم‬
^
‫ پروژه درس برنامه‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
25
‫‪Too many variables‬‬
‫تعداد متغیر ها زیاد است‬
‫* در یک برنامه میتوان با استفاده از رویه ها تعداد متغیر ها را کاهش داد‬
‫* اگر تعداد زیادی متغیر تعریف کنیم ولی در طول برنامه از آن ها استفاده نکنیم برنامه اجرا‬
‫میشود‪.‬‬
‫‪26‬‬
‫سجاد اعیانی ثانی ‪ -‬خطاهای پاسکال ‪ -‬پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬
Illegal assignment
program fact;
var
m,n,i: integer;
begin
readln(n);
m:=1;
for i:=1 to 10 do
begin
m:= m*i;
if m<=n then
writeln(m:3);
i:=i+1;
end;
readln;
end.
program fact;
var
m,n,i: integer;
begin
readln(n);
m:=1;
for i:=1 to 10 do
begin
m:= m*i;
if m<=n then
writeln(m:3);
end;
readln;
end.
‫انتساب نامعتبر‬
‫شمارنده نباید درطول برنامه تغییر کند‬
‫بنابرین‬
‫ اشتباه است‬i:=i+1 ‫در این برنامه انتساب‬
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
27
Ordinal expression expected
Program test ;
Var
n:integer;
i:real;
Begin
Readln(n);
For i:=0 to 2.5 do begin
n:=n*8;
Writeln(n); end;readln; end.
.‫ نیاز به عبارت از نوع عددی یا ترتیبی است‬
Program test ;
Var
N,i:integer;
Begin
Readln(n);
For i:= 1 to 3 do begin
n:=n*8;
Writeln(n); end;readln; end.
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
28
Variable dose not seem to be initialized
.‫داده نشده است‬
Var
Var
t,h, i : Integer;
t,h, i : Integer;
a:boolean;
a:boolean;
Begin
Begin
i := 1;
i := 1;
While i <= 10 Do Begin
a:=true;
Writeln (i);
While i <= 10 Do Begin
i := i + 1;
t:=i mod 2;
if (a) and t=1 then writeln(h);
h:=i;
end;
if t=1 then writeln(h);
readln
i:=i+1;
end.
end;
readln
end.
‫ به متغیر مقدار اولیه‬
.‫اگر برنامه این اشکال را داشته باشد معموال اجرا میشود ولی ممکن است نتیجه نادرست بگیریم‬
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
29
Can't determine which overloaded function to call
‫ممکن است در یک برنامه از یک نام برای نامگذاری دو زیربرنامه مختلف استفاده کرده‬
. ‫باشیم و این پیام نمایش داده شود‬
Program TestVar;
Type
M = Array[1..3, 1..3] of Real;
Procedure PrintMatrix(A: M);
Var i,j : Integer;
Begin
For i:=1 To 3 Do Begin For j:=1 To 3 Do Begin
Write(A[i,j]:5:2, ' ');
End; WriteLn; End;End;
Procedure printMatrix(var A: M);
Var i,j: Integer;
Begin
For i:=1 To 3 Do Begin For j:=1 To 3 Do Begin
Write('A[',i,',',j,']?');
ReadLn(A[i,j]);
End; WriteLn; End;End;
Var Mat : M;
Begin
printMatrix(Mat);
PrintMatrix(Mat);
Readln;
‫برنامه نویسی پاسکال دانشگاه شریف‬
end.
Program TestVar;
Type
M = Array[1..3, 1..3] of Real;
Procedure PrintMatrix(A: M);
Var i,j : Integer;
Begin
For i:=1 To 3 Do Begin For j:=1 To 3 Do Begin
Write(A[i,j]:5:2, ' ');
End; WriteLn; End;End;
Procedure readmatrix(var A: M);
Var i,j: Integer;
Begin
For i:=1 To 3 Do Begin For j:=1 To 3 Do Begin
Write('A[',i,',',j,']?');
ReadLn(A[i,j]);
End; WriteLn; End;End;
Var Mat : M;
Begin
ReadMatrix(Mat);
PrintMatrix(Mat);
Readln;
‫درس‬End‫پروژه‬
- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
.
30
Illegal qualifier
program bazgashti;
type arr=array[1..100]of integer;
var
m,n,x,j:integer;
a:char;
begin
readln(n);
readln(m);
for j:=1 to n do begin
readln(a[j]);
writeln(a[j]);
end;
readln;
end.
program bazgashti;
type arr=array[1..100]of integer;
var
m,n,x,j:integer;
a:arr;
begin
readln(n);
readln(m);
for j:=1 to n do begin
readln(a[j]);
writeln(a[j]);
end;
readln;
:‫است‬
end.
‫ممکن‬
.‫• برای متغیری از اندیس استفاده کرده باشیم که آرایه نیست‬
.‫• فیلد متغیری را با نقطه انتخاب کرده باشیم که رکورد نیست‬
.‫• از کالهک یا ^ بر روی متغیری استفاده کرده باشیم که اشارهگر نیست‬
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
31
Unexpected end of file
program bazgashti;
type arr=array[1..100]of integer;
var
m,n,x,j:integer;
a:arr;
begin
readln(n);
readln(m);
for j:=1 to n do begin
readln(a[j]);
writeln(a[j]);
if a[j+1]=a[j] then begin
readln(a[j+2]);
end;
end;
end.
.‫ برنامه به صورتی غیر متتظره پایان یافته است‬
.‫ است‬end ‫ نیاز به‬:‫ راه حل‬
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
32
Variable identifier expected
.‫ نیاز به شناسه متغیر است‬
Program test ;
Var
I,n,p:integer;
Begin
Readln(n);
For 1 to n do begin
p:=i;
P:=p*p;
Writeln(p);
end;
end.
Program test ;
Var
I,n,p:integer;
Begin
Readln(n);
For i:=1 to n do begin
p:=i;
P:=p*p;
Writeln(p);
end;
end.
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
33
Incompatible types
.‫ به معنی ناسازگار است‬incompatible ‫کلمه ی‬
‫این خطا زمانی رخ میدهد که دو متغیر که از یک نوع نیستند را با یکدیگر مقایسه‬
.‫کنیم یا این که عملوند های یک عملگر با آن مطابقت نداشته باشند‬
.‫ باید برای تقسیم متغیرهای صحیح به کار رود‬div ‫ عملگر‬:‫مثال‬
program test;
var
a,i:integer;
begin
for i:=1 to 10 do
begin
readln(a);
a:= a / i ;
writeln(a);
end;
end.
program test;
var
a,i:integer;
begin
for i:=1 to 10 do
begin
readln(a); a:= a div i ;
writeln(a);
end;
end.
1 ‫اصالح‬
program test;
var
A:real;
i:integer;
begin
for i:=1 to 10 do
begin
readln(a); a:= a / i ;
writeln(a);
end;
end.
2 ‫اصالح‬
34
To or downto expected
program test;
var
n,s,i,j:integer;
begin
readln(n);
s:=1;
for i:=1to n do begin
for j:=I downto 1 do begin
s:=j*s;
end;
if s<=n then writeln(s);
end;
readln;
end.
.‫ نیاز است‬downto ‫ یا‬to ‫ به‬
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
35
Pointer type expected
Type
PInteger = ^Integer;
PReal = ^Real;
Var
A, B: PInteger; E, F: preal; g:real;
Begin
New(A); New(B);
A^ := 10;
B^ := A^;
Readln(B^);
New(E);
E^ := A^ + B^;
new(f);
F^ := A^;
Dispose(A);
Dispose(B);
New(A);
new(b);
A^ := 42; B^ := A^; F^ := B^ * 2; writeln(f^);
Dispose(
g );
DISPOSE(B)
Dispose(E); Dispose(F); readln; End.
.‫ نیاز به نوع اشاره گر است‬
‫ یک متغیر از نوع حقیقی است‬G
‫ به‬DISPOSE ‫ولی برای تابع‬
.‫نوع اشاره گر نیاز است‬
36
‫وجود این خطاها تا زمان اجرا مشخص نمیشود‪ .‬در این صورت برنامه اجرا میشود و به‬
‫محض اینکه اجرای برنامه به یکی از این خطاها منجر شود‪ ،‬برنامه متوقف میشود و خطا‬
‫یا شماره آن نمایش داده میشود و امکان ادامه برنامه وجود ندارد‪.‬‬
‫)‪File Not Found (Runtime Error 2‬‬
‫‪ ‬اگر فایلی وجود نداشته باشد و آن را با ‪ append‬یا ‪ reset‬باز کنیم این‬
‫پیغام نمایش داده میشود‪.‬‬
‫‪ ‬رفع خطا ‪ :‬فایل را ایجاد کن !‬
‫‪38‬‬
‫‪Var‬‬
‫;‪f : Text; a , c : String‬‬
‫‪Begin‬‬
‫;) '‪Assign ( f , 'C:\test.txt‬‬
‫;)‪RESET(F‬‬
‫;'‪c := 'Hello‬‬
‫;) ‪readln ( f , c‬‬
‫;) ‪read( f , a‬‬
‫;) ‪Close ( f‬‬
‫;) ‪Writeln ( a‬‬
‫‪End.‬‬
‫سجاد اعیانی ثانی ‪ -‬خطاهای پاسکال ‪ -‬پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬
File Not Assigned (Runtime Error 102)
Var
f : Text;
Begin
‫ اگر درون برنامه از فایل استفاده کرده باشیم ولی فایل مورد نظر را‬
.‫ نکرده باشیم این خطا نمایش داده میشود‬ASSIGN
a , c : String;
Assign ( f , 'C:\test.txt' );
PROJECT RAISED EXCEPTION
CLASS: RUNERROR 102
Rewrite ( f );
c := 'Hello';
writeln ( f , c );
Reset ( f );
read( f , a );
Close ( f );
Writeln ( a );
End.
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
39
‫‪File Not Open‬‬
‫)‪(Runtime Error 103‬‬
‫اگر فایل متنی را باز نکرده باشیم این خطا نمایش داده میشود‪.‬‬
‫قبل از این که برنامه بتواند از فایلی استفاده کند ‪ ،‬باید آن فایل را باز کند‪.‬‬
‫برای نوشتن اطالعات درون فایل متنی آن را با ‪ REWRITE‬و ‪ APPEND‬باز میکنیم و برای خواندن از ‪ RESET‬استفاده‬
‫میکنیم‬
‫‪PROJECT RAISED EXCEPTION‬‬
‫‪CLASS: RUNERROR 103‬‬
‫‪40‬‬
‫‪Var‬‬
‫;‪f : Text; a , c : String‬‬
‫‪Begin‬‬
‫;) '‪Assign ( f , 'C:\test.txt‬‬
‫;'‪c := 'Hello‬‬
‫;)‪RESET(F‬‬
‫;) ‪READLN( f , c‬‬
‫;) ‪read( f , a‬‬
‫;) ‪Close ( f‬‬
‫;) ‪Writeln ( a‬‬
‫‪End.‬‬
‫سجاد اعیانی ثانی ‪ -‬خطاهای پاسکال ‪ -‬پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬
File Not Open for Input
(Runtime Error 104)
.‫ باز کنیم ولی از آن اطالعات بخوانیم‬REWRITE ‫ فایلی را با‬
Var
f : Text; a , c : String;
Begin
Assign ( f , 'C:\test.txt' );
REWRITE(F);
RESET(F);
c := 'Hello';
readln ( f , c );
read( f , a );
Close ( f );
Writeln ( a );
End.
PROJECT RAISED EXCEPTION
CLASS: RUNERROR 104
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
41
File Not Open for Output
(Runtime Error 105)
.‫ باز کنیم و در آن اطلالعات بنویسیم‬RESET ‫ فایلی را با‬
Var
f : Text; a , c : String;
Begin
Assign ( f , 'C:\test.txt' );
REWRITE(F)
RESET(F);
c := 'Hello';
WRITELN( f , c );
read( f , a );
Close ( f );
Writeln ( a );
End.
PROJECT RAISED EXCEPTION
CLASS: RUNERROR 105
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
42
Division by zero (Runtime Error 200)
For i:= 10 downto -10 do begin
A:= 1000 div I ;
Writeln(a);
End;
.‫ تقسیم بر صفر رخ داده است‬
For i:= 10 downto -10 do if i<>0 then
begin
A:= 1000 div I ;
Writeln(a);
End;
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬
43
Range check error (Runtime Error 201)
program miangin;
var
sum,i,ave:integer;
a:array[-5..-1]of integer;
begin
sum:=0;
readln(a[1]);
i:=1;
while (a[i])<>0 do begin
sum:=sum+a[i];
i:=i+1;
readln (a[i]);
end;
ave:=(sum) div (i-1);
writeln(ave);
readln;
end.
program miangin;
var
‫خارج از حدود مجاز متغیر یا‬
sum,i,ave:integer;
‫اندیس آرایه‬
a:array[1..100]of integer;
begin
sum:=0;
readln(a[1]);
‫این خطا از نوع زمان اجرا‬
i:=1;
‫ یعنی برنامه اجرا‬.‫است‬
while (a[i])<>0 do begin
sum:=sum+a[i];
‫میشود ولی اگر اندیس آرایه‬
i:=i+1;
‫از حدود آرایه فراتر رود یا‬
readln (a[i]);
‫مقداری خارج از محدوده‬
end;
ave:=(sum) div (i-1);
.‫باشد برنامه متوقف میشود‬
writeln(ave);
readln;
end.
‫ پروژه درس برنامه نویسی پاسکال دانشگاه شریف‬- ‫ خطاهای پاسکال‬- ‫سجاد اعیانی ثانی‬


44
‫موفق باشید!‬