בעיה בפסקל - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

בעיה בפסקל


MATTAN

Recommended Posts

אוקיי חברים יש לי בעיה חדשה ניסיתי לשפר את הקוד של אתמול בכדי שיצטרכו להכניס גם שם מישתמש וגם סיסמהאך לצערי הקוד לא עבר קומפילציה

הינה הקוד:

program codeblue;

var
user:text;
pass:longint;
begin
write('welcome to protector 0.2');
repeat
writeln('please enter the username:');
readln(user);
if user = abc then
writeln('user is known. enter the password:');
end else
begin
writeln('the user is not recognized');
end;
readln(pass);
if pass = 1000 then
writeln('accses prmited');
end else
begin
writeln('the password is wrong');
end;
until pass=1000;
end.

אני מבקש הנחיה לפתרון הבעיה

תודה לכל העוזרים

קישור לתוכן
שתף באתרים אחרים

קצת קשה למצוא את הטעות פה.

אני ממליץ לך שתכתוב את זה יותר מסודר, תשתמש ב- TAB או ברווח מסוים, כשכל הקוד באותו קו זה קצת קשה.

נראה לי שזה מנסה לזהות את 1000 ואת ABC כמשתנים, אולי אתה צריך להוסיף גרשיים בצדדים.

בכל מקרה, בלי קשר ל-syntax יש שני דברים שאולי כדאי שתבדוק.

היוזר לא ידע מה לעשות כשיקבל את ההודעה "user is not recongnized" לכן הוא לא יכניס סיסמא לפי הדרישה הבאה של התוכנה

והתוכנה לא תמשיך, אז תשתמש בלולאה אולי שתחזיר את התהליך לקלט של היוזר שוב.

דבר שני, מה אתה רוצה בעצם שיקרה כשהיוזר יקיש יוזר וסיסמא נכונים? חוץ מההודעה כמובן, אני מניח שאתה רוצה לתת גישה או משהו כזה אז כדאי שתוסיף את זה

אחרי access permitted.

גם אני לא נגעתי בפסקל המון זמן, מקווה שעזרתי.

עידו.

קישור לתוכן
שתף באתרים אחרים

יש סוג משתנה text???

זה לא אמור להיות string??

ואגב בקטע של ססמאות ויוזרים אתה לא אומר לו אם היוזר נכון או לא

אתה מחכה ליוזר ולססמא ורק אז מודיע לו אם בכללי זה נכון

אם אחד מהם לא נכון אתה לא אומר לו מי מהם

קישור לתוכן
שתף באתרים אחרים

אתה תגלה מהר מאד שאפשר להכניס לתוכנית שלך כל שם משתמש העיקר שהססמא תהיה 1000 והתוכנית תצליח

נסה את זה:

program codeblue;

var
user:text;
pass:longint;
begin
writeln('welcome to protector 0.2');
repeat
writeln('please enter the username:');
readln(user);
writeln('enter the password:');
readln(pass);
until (pass = 1000)*(user = 'you');
write('correct');
delay(5000)
end.

קישור לתוכן
שתף באתרים אחרים

  • 2 שבועות מאוחר יותר...

השימוש שלך בשפה לקוי לחלוטין.

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

א) קרא למשתנים שלך בשמות בעלי ערך כלשהו, אם זה סיסמא קרא למשתנה pass.

ב) נכון, המחשבים של היום יש בהם כמות מטורפת וlongint לא יתפוס לך כמעט כלום מהמשאבים, אבל זה לא אומר

שכדאי להשתמש במשתנה בטיפוס כזה. אל תשכח שאם אתה רוצה להיות מתכנת, או לעסוק בזה אתה צריך לדעת כמה שיותר לחסוך במשאבים.

ג) סדר כתיבה, השתמש ברווחים ע"מ להקל על קריאת התוכנית לאנשים אחרים והכי חשוב לך.

ד) כאשר אתה פעולת IF, ואחרי התנאי יש פעולה אחת, אין צורך להשתמש בBegin ו end.

משתמשים בהם רק כאשר יש "חבילת" פקודות אחרי התנאי.

ה) הצהרת משתנים תיהיה אך ורק לפני הBegin של התוכנית הראשית.

לכן הייתי ממליץ לך ללמוד את השפה בעזרת אולי קורס(או בביה"ס) או משו (אם זו השפה הראשונה שאתה לומד), על מנת

שיהיה לך בסיס נכון למתכנת.

בהמשך לסעיף ב', אני ממליץ לך להשתמש במשתנה integer, אשר תופס 2 בתים בלבד ותחום המספרים שלו הם מ :

32768- (מינוס)

עד

32768.

ואם הסיסמא שלך היא 1000, אז בכלל אין פה בעיה על המשתנה integer.

ולגבי התוכנית אני הייתי רושם אותה ככה :



Uses
  crt;

Var
  pass : integer;

Begin {Main}
  clrscr; {לא חובה}
  writeln('Enter password : ');
  readln(pass);
  while (pass<>1000) do
   begin
    writeln('Wrong password. Enter Again : ');
    readln(pass);
   end;
  writeln('Correct password .End of the Program');
readkey; {לא חובה}
end. {Main}

כמו שניתן לראות, התוכנית הזו יותר יעילה. אני משתמש פה פעם אחת בתנאי (ולא בIF ובREPEAT UNTIL).

התוכנית "לא תעזוב אותך" עד אשר תכניס את הסיסמא הנכונה.

ברגע שהסיסמא הנכונה תוקש, התוכנית תדפיס הודעה שהסיסמא נכונה ותחכה ללחיצה על מקש כלשהו ע"מ לסגור את התוכנית (readkey).

פעולת הclrscr, היא ע"מ לנקות את המסך. (clrscr וreadkey הן חלק מפעולות הספריה CRT).

רן.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...