robicon פורסם 2012 במאי 20 מחבר Share פורסם 2012 במאי 20 קראתי אבל אני עדיין לא מבין למה.אחרי שאני ''שולף'' את האות הפונקציה מצביע לNULL אבל האות קיימת אצלי במשתנה אז אי אפשר להשתמש בפונקציה הזאת להוציא מהקלט הזה את האות האחרונה? קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 במאי 20 Share פורסם 2012 במאי 20 תסתכל על המחרוזת בדיוק. לא רק על התו הראשון שלה, אלא על כל המחרוזת. תבדוק מה האורך שלה אם צריך. תקרא בפירוט את התיעוד של fgets ותבין למה המחרוזת לא מכילה רק את התו 'a'. קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 20 מחבר Share פורסם 2012 במאי 20 זה מוסיף לי אחרי ה'a' " ואז מופיעים הפקודות שכתבתי לפני. קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 20 מחבר Share פורסם 2012 במאי 20 סדרתי את זה בעזרת:g[strlen(g) - 1] = '\0'; מקווה שזה לא יעשה בעיות בהמשך קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 21 מחבר Share פורסם 2012 במאי 21 ברגע שמבצעים פעולת הזזה של ביט : s>>=1לא ניתן להשתמש בו שוב?אני עושה בדיקה אם הביט דולק ואם כן אני מדפיס את המיקום שלו אבל אחרי שאני מסיים את הפונקציה הזאת ורוצה שוב להשתמש בה הוא לא מדפיס לי כלום... קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 במאי 21 Share פורסם 2012 במאי 21 אני מציע לך שתעשה חזרה על אופרטורים ותבין מה ההבדל בין אופרטור & ואופרטור =&. קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 21 מחבר Share פורסם 2012 במאי 21 קראתי שוב...הסתדרתי מבחינת שמירת הנתונים על יד יצירת משתנה שיחזיק את הנתונים.אבל זה מדפיס לי בנוסף עוד מספרים לא קשורים.אם הבנתי נכון כאשר אני רוצה לבדוק ביט אחד שמאלה אני עושה :b>>1 ואז אם b היה למשל: 00000101 הוא ניהיה 00000010ואז אני עושה בדיקה b&1==1 לא ככה? קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 במאי 21 Share פורסם 2012 במאי 21 אתה יודע, מותר לשלב יותר מאופרטור אחד בביטוי. אתה לא חייב להגדיר משתנה, להפעיל עליו <<, לשמור את התוצאה במשתנה חדש, ואז להפעיל על זה &. אפשר לעשות הכל בשורה אחת פשוטה וברורה.הבעיה היא שאתה מתחיל לערבב דברים, ואתה בטעות משנה את המידע שאתה אמור לשמור עליו (ע"י כך שאתה משתמש באופרטור =<< במקום סתם <<). קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 21 מחבר Share פורסם 2012 במאי 21 אני מתעסק בזה קצת יותר מחצי שנה ככה שאני עדיין טרי בזה ולא למדתי לכתוב מאקרו. זה הקוד של ההדפסה. אני לא מאבד מידע...אבל אכשהו נוסף לי מידע זאת אומרת אם אני מכניס למשל 3 מספרים זה מדפיס לי בנוסף עוד שני מספרים לא קשורים for(i=0;i<=12;i++){ k=0;=*s[i]; while(k<=7){ if(b&1==1){ printf("%d,",d); d++; k++; j++; b>>=1; if(j==16){ printf("/n"); j=0; } }else{ d++; k++; b>>=1; } } } אני יודע שזה שהקוד לא אלגנטי.. קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 במאי 21 Share פורסם 2012 במאי 21 מאקרו? מי אמר בכלל לכתוב מאקרו?פונקציית ההדפסה שלך בכלל לא צריכה לגשת לאיברים של המערך. יש לך פונקציה שמקבלת מספר ובודקת האם הוא נמצא בקבוצה - תשתמש בה. אם אין לך את הפונקציה הזו עדיין, כתוב אותה.כמו שאמרתי קודם: כתוב את שלוש הפונקציות הנ"ל (הוספת מספר לקבוצה, הוצאת מספר מקבוצה, בדיקה האם מספר בקבוצה). כתוב main שבודק שהן עובדות (אל תתעצל - בדוק כל מיני מקרים, גם מספרים קטנים וגם גדולים, תכניס הרבה מספרים ולא רק אחד, וכן הלאה). אחרי שאתה יודע שהן עובדות, אתה יכול להשתמש בהן ולהיות בטוח ב-99% שהן בסדר, ואם יש לך באג אז הבאג הוא לא בהן. קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 21 מחבר Share פורסם 2012 במאי 21 בניתי פונקציה שמקבלת קבוצה ומספר ובודקת אם המספר הזה קיים והיא עובדת טוב.אבל עדיין זה מוצא לי מספרים בתאים שבכלל לא נגעתי בהם אני מכניס לפונקציה 1,2,3,4 וזה מוצא לי אותם ומוסיף לי 86,87 אין לי מושג איך זה קורה ואיך זה מדליק ביטים בתאים שבכלל אני לא מגיע אליהם חוץ מאשר שאני בודק אותם. קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 במאי 21 Share פורסם 2012 במאי 21 האם כתבת את כל שלוש הפונקציות?האם בדקת את שלושתן?האם פונקציית ההדפסה שכתבת משתמשת בפונקציות האלה?אם כן, תעלה לכאן את הקוד שלך. קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 21 מחבר Share פורסם 2012 במאי 21 כתבתי את זאת שמוסיפה וזאת שבודקת אם קיים מספר מסויים בקבוצה. להסיר ביט עדיין לא היה לי צורך בו. void print_set(){ set *b; int k=0; b=checkname();//b-point to the group for(int i=0;i<128;i++){ if(checkbit1(b,i)==1){ printf("%d,",i); k=1; } } if(k==0){ printf("the group is empty\n"); } printf("\n");} int checkbit1(set *s,int num){ char b=0; int i; i=num; i=i/8; num=num%8;=*s[i]; if(b>>num&1==1){ return 1; }else{ return 0; }} קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 במאי 21 Share פורסם 2012 במאי 21 אוקי, הקוד שלך נראה תקין (הפונקציה checkbit נראית קצת מסורבלת עם המשתנים, אבל היא בסדר). מה עושה checkname? האם אתה בטוח שהיא עובדת נכון? קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 21 מחבר Share פורסם 2012 במאי 21 היא בודקת את הקלט של המשתמש ומחזירה את הקבוצה המתאימהset* checkname(){ char *a,*b; int i=0; a=sets[i].name; b=strtok(NULL," ,"); while(strcmp(b,a)!=0&&i<=11){ i++; a=sets[i].name; } if(strcmp(b,a)!=0){ printf("No such group\n"); return 0; }else{ return sets[i].s; } return 0;} קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.