נעמה. פורסם 2009 במרץ 7 Share פורסם 2009 במרץ 7 אם אני רוצה לקלוט מחרוזת מהמשתמש ולפרק אותה למילים בעזרת STRTOK- איך אני מצהירה על המשתנה שישמור את המילים?למה משמשים int argc, char* argv[] -האם אפשר לשמור בהם נתונים או רק לקלוט מהם את הנתונים שנשלחו לתכנית? קישור לתוכן שתף באתרים אחרים More sharing options...
Henz16 פורסם 2009 במרץ 7 Share פורסם 2009 במרץ 7 1. את יוצרת משתנה זמני - TEMP.2. אפשר לקלוט מהם נותנים שנשלחו, בהתאם לתרגיל. קישור לתוכן שתף באתרים אחרים More sharing options...
נעמה. פורסם 2009 במרץ 8 מחבר Share פורסם 2009 במרץ 8 1. אבל מאיזה סוג המשתנה? איך מצהירים על מערך מסוג char דו מימדי (כי כל תא צריך להכיל מילה)? ובאיזה גודל? קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2009 במרץ 8 Share פורסם 2009 במרץ 8 או שתצהירי על מערך דו מימדי סטטי:char temp[10][20];(כשכמובן במקום 10 ו-20, שימי את מספר המחרוזות ואת אורך כל מחרוזת צפויה)החסרון של זה הוא שאת צריכה להניח מראש כמה מחרוזות יהיו לך, ומה יהיה האורך המקסימלי שלהן.אופציה שנייה היא להגדיר את המערכים באופן דינמי, באמצעות malloc. גם במקרה הזה את צריכה לדעת מראש כמה מחרוזות יהיו לך, וכמה מקום את צריכה לכל מחרוזת (אבל אפשר לחשב את זה בזמן ריצה).למדת כבר malloc? קישור לתוכן שתף באתרים אחרים More sharing options...
נעמה. פורסם 2009 במרץ 8 מחבר Share פורסם 2009 במרץ 8 אני יודעת להשתמש בפונקציה malloc להצהיר על מערך חד מימדי.לספור את גודל המערך אפשר שבלולאה יהיה מונה לספירת הרווחים, ואם אחליט על גודל קבוע למילה (לא יותר מ10 תוים)- איך אני מצהירה על זה? קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2009 במרץ 8 Share פורסם 2009 במרץ 8 יש שתי דרכים ליצור מערך דו מימדי באופן דינמי. דרך אחת היא ליצור מערך אחד גדול ואז לחלק אותו לתתי מערכים, ודרך שנייה היא ליצור מערך של מערכים.ככה מממשים את הדרך השנייה:קודם כל, המשתנה שלך הוא מצביע למצביע (כי את רוצה מערך של מערכים):char** temp;יוצרים מערך של מצביעים:temp = (char**)malloc(num_words * sizeof(char*));כאשר num_words כמובן הוא משתנה שיחזיק את מספר המחרוזות שאת רוצה.עכשיו, יש לך מערך של מצביעים - את צריכה שכל אחד מהם יצביע למערך חדש, כלומר:for (int i = 0 ; i < num_words ; ++i){ temp[i] = (char*)malloc(length * sizeof(char));}כש-length הוא האורך של כל מחרוזת שאת רוצה להקצות.שימי לב כמובן שכשאת משחררת את המערך, צריך לבצע free על כל אחד מאיברי המערך, ורק אחר כך לעשות free על המערך עצמו. קישור לתוכן שתף באתרים אחרים More sharing options...
נעמה. פורסם 2009 במרץ 8 מחבר Share פורסם 2009 במרץ 8 בעיה: מתי אני מצהירה על המערך הזה? <יש לי לולאה שעוברת על המחרוזת שנקלטה כדי לפרק אותה למילים, כדי שאוכל לשמור את המילים במערך - אני צריכה להצהיר עליו לפני הלולאה, אבל - אז מתי אני סופרת כמה מילים יש לי? לעשות פעמיים את הלולאה?> קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2009 במרץ 8 Share פורסם 2009 במרץ 8 כן, אין דרך הרבה יותר חכמה מזה. דרך אחרת היא כל הזמן להגדיל את המערך באופן דינמי (באמצעות realloc), אבל זה סתם מסורבל.(אם היית עובדת ב-++C אז היית יכולה לעבוד עם מחלקות שמנהלות רשימות דינמיות, שגדלות במקרה הצורך. אני מניח שגם ב-C יש חבילות כאלה, אבל זה כנראה פחות נוח) קישור לתוכן שתף באתרים אחרים More sharing options...
נעמה. פורסם 2009 במרץ 9 מחבר Share פורסם 2009 במרץ 9 ככה צריך לשחרר את הזכרון?for (int i = 0 ; i < num_words ; ++i){ free(temp[i]);}free(temp(; קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2009 במרץ 9 Share פורסם 2009 במרץ 9 בדיוק. קישור לתוכן שתף באתרים אחרים More sharing options...
chook_rl פורסם 2009 במרץ 9 Share פורסם 2009 במרץ 9 איך המרצה שלי באוניברסיטה אמר? הפונקציה הזאת היא מהשטן!!!! ולראיה: BUGS The System V strtok(), if handed a string containing only delimiter char- acters, will not alter the next starting point, so that a call to strtok() with a different (or empty) delimiter string may return a non-NULL value. Since this implementation always alters the next start- ing point, such a sequence of calls would always return NULL. וגם, כמובן שהיא לא תומכת ב multi threading קישור לתוכן שתף באתרים אחרים More sharing options...
binyamin1001 פורסם 2009 במרץ 10 Share פורסם 2009 במרץ 10 איך המרצה שלי באוניברסיטה אמר? הפונקציה הזאת היא מהשטן!!!! ולראיה: BUGS The System V strtok(), if handed a string containing only delimiter char- acters, will not alter the next starting point, so that a call to strtok() with a different (or empty) delimiter string may return a non-NULL value. Since this implementation always alters the next start- ing point, such a sequence of calls would always return NULL. וגם, כמובן שהיא לא תומכת ב multi threading תאר לך שהיית צריך לממש את הפונקציה הזו באסמבלי... קישור לתוכן שתף באתרים אחרים More sharing options...
chook_rl פורסם 2009 במרץ 10 Share פורסם 2009 במרץ 10 Not my cup of tea קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.