עבור לתוכן

בעיה בלולאה בפסקל

Featured Replies

פורסם

כנראה אני אלמד בבצפר פסקל השנה אז החלטתי להקדים.. בכל אופן כשאני מריץ את הקובץ המהודר של הקוד הבא אני מקבל Syntax Error.

זה הקוד:


Var
Xxx: integer;

Begin
For Xxx:=0 to 10 do
Begin
WriteLn('Loop number ',Xxx);
End;
End.

מה הבעיה בקוד?

פורסם

מהי בדיוק ההודעה שאתה מקבל? באיזו שורה?

כתבת לפני קטע הקוד הזה Program SomeName; ?

פורסם
  • מחבר

מהי בדיוק ההודעה שאתה מקבל? באיזו שורה?

כתבת לפני קטע הקוד הזה Program SomeName; ?

לא רשום לי שורה. וכן רשמתי את זה ולא עזר.

אני פשוט מקבל: Syntax Error.

מוזר... כששיניתי את השם של הקובץ זה עבד. יש למישהו מושג למה?

פורסם

הקוד

Program MyProg;
Var
Xxx: integer;

Begin
For Xxx:=0 to 10 do
Begin
WriteLn('Loop number ',Xxx);
End;
End.

מתקמפל ורץ ללא שום שגיאה. תבדוק שאתה מעתיק אותו בדיוק.

פורסם

אם אני לא טועה וסיימתי עם השפה הזאת לפני כמה חודשים אז

For xxx=0 to 10 do

אני חושב שבFOR לא צריך להיות נקודותיים..

פורסם
  • מחבר

הבעיה שהוא לא נותן לי לשמור בתור if.exe או for.exe וכאלו. למה זה?

פורסם

מה זאת אומרת לשמור כ exe?

את קובץ המקור תשמור בכונן C למשל כקובץ pas (למשל MyProg.pas). אותו אתה מקמפל לקובץ exe.

עם איזה קומפיילר אתה עובד?

פורסם
  • מחבר

מה זאת אומרת לשמור כ exe?

את קובץ המקור תשמור בכונן C למשל כקובץ pas (למשל MyProg.pas). אותו אתה מקמפל לקובץ exe.

עם איזה קומפיילר אתה עובד?

טורבו פסקל 7... אני מתכוון שאם אני מקמפל בתור שם של if או for הוא לא מריץ את הקובץ.

ויש לי עוד בעיה בקוד הבא:

Program ClearScreen;

Uses Crt;

Var
LastKey: Char;

Begin
WriteLn('Click ''c'' button to clear the screen, Or ''x'' to exit.');
ReadLn(LastKey);

Repeat
If (LastKey='c') Or (LastKey='C') Then
Begin
ClrScr;
ReadLn(LastKey);
End
Else
Begin
WriteLn('You pressed: ', LastKey);
End;
Until
(LastKey='x') OR (LastKey='X');
End.

אני רוצה שאם אני לוחץ על כפתור אחר שהוא לא x או c אז זה ירשום אותו פעם אחת ולא מיליון פעם כמו עכשיו. איך אני עושה את זה?

פורסם

בקשר לקטע האחרון:

א. בקשר לשגיאה, אתה צריך לתחום כל תנאי בסוגריים.

ב. במקרה ולא הוקש c (או C) הדפסת הודעה מתאימה אבל לא קלטת מחדש תו, ככה שהייתה נוצרת לולאה אינסופית. אתה צריך לקלוט בתחילת כל איטרציה (סבב) של הלולאה. אין גם צורך בהוראת ReadLn נוספת לפני הלולאה.

ג. שכחת את משפט ה Until שמסיים את הלולאה ומציין את הלולאה. לא היה לך תנאי לסיום הלולאה ככה שהיא הייתה אינסופית. הוספתי בדוגמה שמתחת תנאי שכאשר תוכנס האות q הלולאה תסתיים.

ד. כעת כאשר יש הוראה אחת בתוך בלוק ה If וה Else אין צורך ב Begin ו End נוספים. כאשר ישנה שורה אחת בתוך ה If ואחריו בא Else לא צריך גם ;

הקוד הבא מתקמפל ועובד:

Program ClearScreen;

Uses Crt;

Var
LastKey: Char;

Begin
WriteLn('Click ''c'' button to clear the screen or ''q'' to quit');

Repeat
ReadLn(LastKey);
If (LastKey='c') or (LastKey='C') Then
ClrScr
Else
WriteLn('You pressed: ', LastKey);
Until LastKey='q';
End.

פורסם
  • מחבר

תודה רבה! :xyxthumbs:

אבל יש לי שאלה, למה בתנאי לא שמת Begin ו-End?

ואני צריך עזרה בעוד משהו.. לפי מה שהבנתי הקוד הבא אמור למחוק את התיקיה אבל אני מקבל שגיאה. זה הקוד:

Program DelDir;

Begin
RemoveDir('C:\Just');
WriteLn('C:\Just has been deleted.');
End.

זאת השגיאה שאני מקבל כשאני מנסה להדר:

Required Parameter missing.

השורה מדברת על שורת המחיקה.

פורסם

לא צריך Begin ו End כאשר יש לך שורה אחת בבלוק קוד. זה נכון לתנאים ולולאות למשל. אם בהוראות לביצוע (למשל בגוף הלולאה) ישנה רק שורה אחת, אין צורך ב Begin ו End.

בקשר למחיקה של התקייה, תנסה להשתמש בפרוצדורה RmDir במקום ב RemoveDir.

פורסם

אם אני לא טועה וסיימתי עם השפה הזאת לפני כמה חודשים אז

For xxx=0 to 10 do

אני חושב שבFOR לא צריך להיות נקודותיים..

לולאת FOR מציבה מספר במשתנה לפי הקוד.

כמו שניתן לראות הקוד (לדוגמא) for i:=1 to 10 do, ה i:=1 היא פעולת הצבה

אשר בה התוכנה מציבה את הספרה 1 במשתנה I.

אם תפעיל את הWATCH בפסקל, ותעבור פקודה פקודה בF7 תשים לב שכאשר תעבור

את שורת הFOR, במשתנה I יוצב הערך 1.

לכן בכתיבת הקוד ב-FOR כן יש נקודתיים.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים