פורסם 2005 באוגוסט 1620 שנים מחבר אוקיי חברים יש לי בעיה חדשה ניסיתי לשפר את הקוד של אתמול בכדי שיצטרכו להכניס גם שם מישתמש וגם סיסמהאך לצערי הקוד לא עבר קומפילציההינה הקוד:program codeblue;varuser:text;pass:longint;beginwrite('welcome to protector 0.2');repeatwriteln('please enter the username:');readln(user);if user = abc thenwriteln('user is known. enter the password:');end elsebeginwriteln('the user is not recognized');end;readln(pass);if pass = 1000 thenwriteln('accses prmited');end elsebeginwriteln('the password is wrong');end;until pass=1000;end.אני מבקש הנחיה לפתרון הבעיהתודה לכל העוזרים
פורסם 2005 באוגוסט 1620 שנים קצת קשה למצוא את הטעות פה.אני ממליץ לך שתכתוב את זה יותר מסודר, תשתמש ב- TAB או ברווח מסוים, כשכל הקוד באותו קו זה קצת קשה.נראה לי שזה מנסה לזהות את 1000 ואת ABC כמשתנים, אולי אתה צריך להוסיף גרשיים בצדדים.בכל מקרה, בלי קשר ל-syntax יש שני דברים שאולי כדאי שתבדוק.היוזר לא ידע מה לעשות כשיקבל את ההודעה "user is not recongnized" לכן הוא לא יכניס סיסמא לפי הדרישה הבאה של התוכנהוהתוכנה לא תמשיך, אז תשתמש בלולאה אולי שתחזיר את התהליך לקלט של היוזר שוב.דבר שני, מה אתה רוצה בעצם שיקרה כשהיוזר יקיש יוזר וסיסמא נכונים? חוץ מההודעה כמובן, אני מניח שאתה רוצה לתת גישה או משהו כזה אז כדאי שתוסיף את זהאחרי access permitted.גם אני לא נגעתי בפסקל המון זמן, מקווה שעזרתי.עידו.
פורסם 2005 באוגוסט 1620 שנים יש סוג משתנה text???זה לא אמור להיות string??ואגב בקטע של ססמאות ויוזרים אתה לא אומר לו אם היוזר נכון או לאאתה מחכה ליוזר ולססמא ורק אז מודיע לו אם בכללי זה נכוןאם אחד מהם לא נכון אתה לא אומר לו מי מהם
פורסם 2005 באוגוסט 1620 שנים אתה תגלה מהר מאד שאפשר להכניס לתוכנית שלך כל שם משתמש העיקר שהססמא תהיה 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.
פורסם 2005 באוגוסט 1620 שנים הקוד של Burton נראה נכון, אך הTurbo Pascal 7.0 כותב לי לגבי (הסמן שמראה איפה הטעות, מופיע על הסוגריים)until (pass = 1000)*(user = 'you');Type mismatchאבל אם תשנה את הסוג של "user" ל String זה יעבוד.
פורסם 2005 באוגוסט 1620 שנים מחבר תודה רבה לכולם אך עדיין יש לי בעיה בקימפול הוא רושם לי operand types do not match operator על השורה : until (pass = 1000)*(user = 'you');
פורסם 2005 באוגוסט 1620 שנים מחבר לא משנה הבעיה נפתרה בשינוי של: until (pass = 1000)*(user = 'you');ל-until (pass = 1000)end(user = 'you');
פורסם 2005 באוגוסט 1620 שנים אם כבר אז AND עם "A" ולא עם "E" או לחילופין "&" למרות שגם סימן הכפל אמור לעבוד
פורסם 2005 באוגוסט 2520 שנים השימוש שלך בשפה לקוי לחלוטין.על מנת להצליח לתכנת, וגם להתקדם צעדים קדימה (ולא סתם לעשות שטויות). אתה צריך להיות יותר מסודר.א) קרא למשתנים שלך בשמות בעלי ערך כלשהו, אם זה סיסמא קרא למשתנה 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).רן.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.