Logo

רד-בורד: ארכיון

ראשי > תיכנות > חידת מצא את השגיאה (דיבאגינג)

2004-05-15 13:03 Enn
כאן אפשר לפרסם "קודים שגויים" וננסה למצוא את הטעום בהם וכך לחזק את התאים האפורים. לא חייבים לקחת קוד מתוכנית שלא עובדת- אפשר לכתוב תוכנית מיוחדת שכל המטרה שלה זה שלא תעבוד :)

זאת יכולה להיות "טעות הקלדה"- למשל במקום לרשום (הדוגמה הבאה היא בQbasic)

print "abc"
לרשום
priny "abc"
וכשזה נמצא באמצע קוד של עשרות שורות זה מקשה על למצוא את השגיאה.

או אם רוצים לסבך עוד יותר את העניינים אז להציע קוד שאומנם נכון אבל לא מבצע בדיוק את מה שרוצים. למשל בVisual Basic אני רוצה נניח לעשות מחשבון אז בכפתור החיבור אני עושה
label1.caption = "=" + text1.text + text2.text



אז אנא הקוד הראשון שאמור לא לעבוד (בVB)

dim x as string
x=mid(text1.text,0,5)
msgdos x

2004-05-15 14:43 CoDeR
מה זה msgdos?
ודרך אגב...
כל קוד שאתה כותב שהוא שגוי צריך גם להוסיף מה הוא אמור לעשות...
כי לא תמיד ברור שזה אמור להיות msgbox...
2004-05-15 19:14 coolz
תוכנית בסיפיפי..



#include <iostream.h>
class TV
{
public:
viod SetStation (int station);
int GetStation() const;
private:
int itsStation;
};
int main()
{
TV myTV;
myTV.itsStation=9;
TV.SetStation(19);
tv my OtherTV(2);
return0;
}

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

[נערך על-ידי coolz בתאריך 5/15/2004 5:16:27 PM][נערך על-ידי coolz בתאריך 5/15/2004 5:17:04 PM]
2004-05-16 13:57 Echo
אתה נגש לשדה בprivate בשורה השנייה ב main
בשורה הלפני אחרונה רשמת tv באותייות ו C++ היא case sensitive אז הוא לא יכיר את זה
אבל אני יניח שזה שגיאת כתיב כי יותר גרוע נתת שם של משתנה עם רווחים וזה אסור בכל שפה ידוע
חוצמזה שניסת להשתמש בקונסטרקטור שמקבל ערך אבל לא הגדרת אחד כזה

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

יש פה קצת יותר מ 3 טעויות[נערך על-ידי Echo בתאריך 5/16/2004 11:59:18 AM]
2004-05-16 21:41 CoDeR
טוב הנה שגיאה שעיצבנה אותי מלא מלא זמן...

void main()
{
unsigned char a;
printf("Enter a Number: ");
scanf("%d",&a);
if (a&0x10==0x10)
printf("The 5th bit is On!");
else
printf("The 5th bit is Off!");
}

מי שלא מבין התוכנה קולטת מספר מ0-255 ובודקת עם סיבית חמישית דלוקה או לא...
מצאו את הבעיה (לא קומפילציה)....[נערך על-ידי CoDeR בתאריך 5/16/2004 8:00:13 PM]
2004-05-16 21:48 coolz
אקו, ה
TVmytv
זה בלי רווח..

חוץ מזה למקרה שלא הבנת, אמורים לתת תוכניות עם באגים.. ואם תספור שוב תראה שיש בידיוק 3! אז שההה
======================================

פריז, נראה לי לא הבנתי נכון אני לא אמור לתת דברים שאני יודע את הפתרון אליהם?[נערך על-ידי coolz בתאריך 5/16/2004 8:04:43 PM]
2004-05-17 14:11 Echo
ברור שצריך לתת תכניות עם באגים- זה כל הרעיון
ונראה שאתה כן אמור לדעת את התשובות
עמודים: 1