עבור לתוכן

בעיה בפסקל

Featured Replies

פורסם
  • מחבר

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

הינה הקוד:

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??

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

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

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

פורסם
  • מחבר

כן יש סוג מישתנה text

פורסם

אתה תגלה מהר מאד שאפשר להכניס לתוכנית שלך כל שם משתמש העיקר שהססמא תהיה 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.

פורסם

הקוד של Burton נראה נכון, אך הTurbo Pascal 7.0 כותב לי לגבי (הסמן שמראה איפה הטעות, מופיע על הסוגריים)

until (pass = 1000)*(user = 'you');

Type mismatch

אבל אם תשנה את הסוג של "user" ל String זה יעבוד.

פורסם

אמרתי לו שלפי דעתי זה צריך להיות string אבל הוא רוצה text משום מה

פורסם
  • מחבר

תודה רבה לכולם אך עדיין יש לי בעיה בקימפול

הוא רושם לי operand types do not match operator

על השורה :

until (pass = 1000)*(user = 'you');

פורסם
  • מחבר

לא משנה הבעיה נפתרה בשינוי של:

until (pass = 1000)*(user = 'you');

ל-

until (pass = 1000)end(user = 'you');

פורסם

אם כבר אז AND עם "A" ולא עם "E" או לחילופין "&" למרות שגם סימן הכפל אמור לעבוד

פורסם
  • מחבר

צודק זה עם a ולא עם e

  • 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).

רן.

ארכיון

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

דיונים חדשים