שניצל פורסם 2012 במאי 17 Share פורסם 2012 במאי 17 הקבוצה היא משתנה ששמו A?אין דרך לדעת בזמן ריצה מהם שמות המשתנים שלך (אחרי הקומפילציה אין להם בכלל שמות יותר). קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 17 מחבר Share פורסם 2012 במאי 17 לא הבנתי....אז איך אני יכול מקלט כזה:read_set A,2,4,12,54,-1להכניס לתוך קבוצה A את המשתנים?A היא מערך של char בגודל 16 קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 במאי 17 Share פורסם 2012 במאי 17 מה זאת אומרת? פשוט תכתוב קוד שעושה את זה. כתבת את הפונקציות שמדליקות ומכבות את הביטים בטיפוס שלך? אז תקרא את המחרוזת, תנתח אותה (כאמור באמצעות הפונקציות strtok וחברותיה) ותשתמש בפונקציות הנ"ל כדי להדליק את הביטים באיזה משתנה שמחזיק את הקבוצה שלך.יש לך כמה קבוצות? אז תמצא דרך לתת "שמות" לקבוצות ולמפות בין שם הקבוצה למשתנה שמחזיק אותה (כי כמו שאמרתי, לשמות המשתנים אין משמעות בזמן ריצה). קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 18 מחבר Share פורסם 2012 במאי 18 הצלחתי לפרק את הstring שהמשתמש הכניסאני צריך בבקשה הסבר איך בונים ''מילון'', זאת אומרת למשל יש לי "char *b= "abcd אני צריך לקרוא לפונקציה abcd יש אופציה לעשות switch ב-C למצב כזה?תודה. קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 במאי 18 Share פורסם 2012 במאי 18 אי אפשר לעשות switch על מחרוזות, מקסימום אפשר על תו בודד. אתה יכול לעשות את מה שאתה רוצה עם שרשרת של ifים (נראה לי שזה הפתרון הכי פשוט כאן). תזכור שבשביל להשוות מחרוזות משתמשים בstrcmp. קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 18 מחבר Share פורסם 2012 במאי 18 תודה, אני אנסה ככה. קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 במאי 18 Share פורסם 2012 במאי 18 בבקשה.חוץ מזה, יש כמה דרכים די פשוטות לממש "מילון" פשוט ב-C. דרך אחת היא ליצור struct עם שני שדות - שם של האובייקט והאובייקט עצמו, ואז פשוט להחזיק מערך של ה-struct הזה. כשאתה מקבל מחרוזת אתה פשוט צריך לרוץ על המערך ולחפש את האובייקט עם השם המתאים. זה אמנם פתרון לא יעיל במיוחד, אבל כשמדובר ברשימה קטנה ופשוטה זה לא ממש משנה. קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 19 מחבר Share פורסם 2012 במאי 19 זה מה שעשיתי.struct{ char *name; set *s;}sets[]={ {"a",&A}, {"b",&B}, {"c",&C}, {"d",&D}, {"e",&E}, {"f",&F}, {"A",&A}, {"B",&B}, {"C",&C}, {"D",&D}, {"E",&E}, {"F",&F}, {"#",NULL}};אני בודק את הקלט הרלוונטי מהמשתמש בעזרת strcmpואז אני נתקל בבעיה....אני לא יודע איך להכנס לקבוצה ולערוך בה את השינויים שאני רוצה כי אני לא מצליח לשלוח את sets.s לפונקציה שמקבל משתנה מסוג set. קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 19 מחבר Share פורסם 2012 במאי 19 הצלחתי בסוף....הייתי צריך להוסיף * לפונקציה שמקבלת את ה set איך אני יכול לבדוק אם הפעולה של הדלקת הביט עובדת?כרגע זה הקוד הראשוני להדלקה למרות שאני לא חושב שהוא נכון.void setbit(set *s, int i){ char b; int j; j=i; b=b|1; i=8%i; b=b<<i; *s[j/8]=*s[j/8]|b;} אם אני מוריד את השיוויון הקומפיילר פשוט מדלג על זה. קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 במאי 19 Share פורסם 2012 במאי 19 שלוש הערות:1. שים לב שאתה משתמש ב-b בלי שיש בו ערך כלשהו.2. במקום לעשות x = x | y אתה יכול פשוט לעשות x |= y.3. אתה משתמש במודולו לא נכון. קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 19 מחבר Share פורסם 2012 במאי 19 תודה. סידרתיאני צריך לעשות פונקציה שמדפיסה את המספרים מתוך הקבוצהיש דרך פשוטה לעשות את זה או שצריך לעבור על כל המערך של הקבוצה ולספור כל ביט שדלוק עד שמגיעים לביט ה127?זה פשוט לא נראה לי יעיל.. קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 במאי 19 Share פורסם 2012 במאי 19 אין דרך יותר יעילה, אבל לולאה באורך 128 זה ממש לא דבר כבד. קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 20 מחבר Share פורסם 2012 במאי 20 יש לי בעיה בפונקציה שקוראת את הקלט ומסדרת את הביטים. א-אני לא יודע אם זה באמת מסדר את הביטים כמו שצריך כי אני לא מוצא דרך לבדוק ב- שאני משתמש ב strcmp למרות שלפי הקומפיילר שניהם למשל "a" עדיין זה לא שווה ל 0 למרות שזה אמור להיות. int x=0,i=0,j=0; char *y,*c,*z; y=strtok(NULL,",");//group name from string c=sets[i].name; //group name from sets while(strcmp(y,c)!=0&&i<13){//check if thr name equal i++; c=sets[i].name; } if(strcmp(y,c)!=0){ printf("No such group"); return; }else{ z=strtok(NULL,",");//find num char x=strtol(z,NULL,0);//convert to int while(x!=-1&&x<=127){//-1=end of string set *s=sets[i].s; char b=0; int j=x;=1; x=x%8; b<<=x; j=j/8; *s[j]|=b; z=strtok(NULL,","); x=strtol(z,NULL,0); } if(x>127){ printf("%d is out of range",x); return; } }} void read_set(){ קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 במאי 20 Share פורסם 2012 במאי 20 strcmp היא case sensitive. כלומר a ו-A הם לא אותו דבר.חוץ מזה, למה אתה לא משתמש בפונקציה setbit שכתבת קודם? קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 במאי 20 מחבר Share פורסם 2012 במאי 20 אני כרגע לא משתמש בה רק בגלל נוחות..ברגע שאני אדע שהיא פועלת אני אעשה את זה עם הפונקציה.משום מה אחרי הפעולה של הביטים אני רואה רק בתא הראשון של הקבוצה שבחרתי ריבוע ומספר - 16[] משהו כזה ובתאים אחרים יש 0 . כתבתי פונקציה שאמורה להדפיס את המספרים אבל משום מה זה לא עובד... printf("%d,",d); d++; *s[j]>>=1 if(*s[j]&=1==1){ d זה int שרץ עד ל 127 קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.