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
موفق باشید!