לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 13-04-2010, 21:18
צלמית המשתמש של RP.
  משתמש זכר RP. RP. אינו מחובר  
 
חבר מתאריך: 04.11.04
הודעות: 6,986
שאלה קטנה ב-ADT ב-C

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

קוד:
typedef void* Element; typedef struct list_rec* List;

קוד:
void removeTop (List list) { if ((!list)||(!list->n_elem)) { return; } list->lm_free(list->elem[list->n_elem-1]); //assert (!list->elem[list->n_elem-1]); list->n_elem--; }

קוד:
typedef int (*cmpFunc)(Element,Element); typedef Element (*cpyFunc)(Element); typedef void (*printFunc)(Element); typedef void (*freeFunc)(Element); struct list_rec { Element elem[MAX_LIST_SIZE]; int n_elem; cmpFunc lm_cmp; cpyFunc lm_cpy; printFunc lm_print; freeFunc lm_free; };

קוד:
Element charCopy (Element e) { char *newChar=NULL; newChar=(char*)malloc(strlen((char*)(e))-1); assert (newChar); strcpy(new,((char*)(e))); return newChar; }

קוד:
void charFree (Element e1) { if (e1) { free (e1); ///CRASH RIGHT AFTER THIS } }

אלא כל הפונקציות שנראות לי רלוונטיות, אם אתם רוצים לראות משהו נוסף תגידו, פשוט לא רציתי להעלות את כל הקוד...

כשאני משתמש בפונקציה freeInt אז זה עובד בסדר גמור, הבעיה היא עם char...
כמובן שאני מקצה זיכרון לכל איבר חדש שאני מאחסן ככה שכשאני מנסה לשחרר זה אמור להיות זיכרון שאני הקצאתי...

נערך לאחרונה ע"י RP. בתאריך 13-04-2010 בשעה 21:42.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #13  
ישן 15-04-2010, 06:56
צלמית המשתמש של hellfrost
  hellfrost hellfrost אינו מחובר  
 
חבר מתאריך: 07.12.09
הודעות: 7,072
בתגובה להודעה מספר 12 שנכתבה על ידי scripter שמתחילה ב "1. שטויות. הן לא מניחות שיש..."

1. כשאני אומר בסוף המחרוזת אני לא מתכוון בתא האחרון במערך, אלה בסוף הטקסט כלומר:
"abc" הופך ל:
[a,b,c,\0]

STRLEN לצורך העיניין מחזיר כמה תווים יש מהתו הראשון עד ה\0 הראשון. בכל מקרה הכוונה הייתה שאי אפשר להעתיק מערכים מטיפוס לא ידוע, עם STRCPY כי אם יש בייט עם 0 בתוכו איפשהו במערך ההעתקה תיעצר שם, ואם אין 0 בסוף אז הפונקציה תזרום אחרי גבול המערך ותשחית זכרון.

5. אני אולי לא מתכנת בC, בעיקר כי אני לא מזוכיסט, אבל יצא לי לכתוב בכמה שפות, ולתחזק בעוד כמה שפות, מPASCAL ולאחרונה F#, ככה שאני חושב שאני יכול להשוות. בכל מקרה בכל שפת תכנות אפשר לכתוב כל דבר, בכל שפה שטורינג אישר לפחות, השאלה זה איך. נניח לC++ יש יתרון עצום על C בזה שהיא מאפשרת תכנות ג'נרי, גם תכנות OOP כמובן, מה שהופך בניית ADTים למשהו הרבה יותר פשוט וטבעי, וגם אופרטורים זה נחמד...
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #14  
ישן 15-04-2010, 15:29
  cplusplus cplusplus אינו מחובר  
 
חבר מתאריך: 13.03.10
הודעות: 5
בתגובה להודעה מספר 13 שנכתבה על ידי hellfrost שמתחילה ב "1. כשאני אומר בסוף המחרוזת..."

ציטוט:
במקור נכתב על ידי hellfrost
אני אולי לא מתכנת בC, בעיקר כי אני לא מזוכיסט, אבל יצא לי לכתוב בכמה שפות, ולתחזק בעוד כמה שפות, מPASCAL ולאחרונה F#, ככה שאני חושב שאני יכול להשוות. בכל מקרה בכל שפת תכנות אפשר לכתוב כל דבר, בכל שפה שטורינג אישר לפחות, השאלה זה איך. נניח לC++ יש יתרון עצום על C בזה שהיא מאפשרת תכנות ג'נרי, גם תכנות OOP כמובן, מה שהופך בניית ADTים למשהו הרבה יותר פשוט וטבעי, וגם אופרטורים זה נחמד...

בהחלט, מנגנון הג'נריות של C++ הוא עצום(אפשר לראות את זה ב-STL, וכמובן הטכניקה של template meta-programming שבוסט השתלטתה עליה) חוץ מזה אני חושב שהפיצ'רים שלעצמם הם סתם משעממים, החיבור בניהם הוא מה שהופך את שפת C++ לחזקה. C++ תמיד היתה חזקה בנושא של Multi-paradigm programming. אם השפה שלך מספקת לך N פיצ'רים אבל מונעת ממך לתקשר ביניהם או להרכיב אחד את השני, אז זה די חלש, כי זה מונע ממך בעצם לשלב ולעשות עם זה דברים מתוחכמים יותר בקלות.
_____________________________________
There are only two kinds of languages: the ones people complain about and the ones nobody uses


נערך לאחרונה ע"י cplusplus בתאריך 15-04-2010 בשעה 15:32.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #15  
ישן 15-04-2010, 23:13
צלמית המשתמש של scripter
  scripter scripter אינו מחובר  
 
חבר מתאריך: 04.08.02
הודעות: 4,468
בתגובה להודעה מספר 13 שנכתבה על ידי hellfrost שמתחילה ב "1. כשאני אומר בסוף המחרוזת..."

1. אני חושב שאני מבין איך strlen עובדת.

5. הבעיה שלי עם הנקודה הקודמת שלך היא פשוטה, יש תחומים שעדיין מפתחים לרוב עם C.
במערכת ההפעלה שבעזרתה כתבת את תגובה, סביר להניח שיש בה יותר קוד C מאשר C++.
ומה ב-embedded programming? הרי לא תחום קטן ... ורוב הקוד שתראה בתחום הוא ב-C.

עכשיו בנימה אחרת, ברור שהייתי מעדיף ליישם את רוב ה-ADT שהבחור ילמד בקורס ב-C++.
אלך רחוק יותר ואומר שרוב הדברים שאני כיום מפתח אני בוחר בשפה שמספקת לי יותר כלים מאשר C.

אבל, וזה אבל גדול, יש תחומים רבים ש-OO פשוט לא ממש עוזר, ולעיתים בתחומים האלו דווקא גורם לסיבוך.

בכל מקרה, אני לא פה בשביל להתווכח.
אבל אני פשוט לא מבין למה להביא את הנושא של "שפת תכנות VS שפת תכנות" לאשכול שלא עוסק בזה בכלל.
_____________________________________
C pogrammers never die. They are just cast into void.


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #16  
ישן 16-04-2010, 10:33
  cplusplus cplusplus אינו מחובר  
 
חבר מתאריך: 13.03.10
הודעות: 5
בתגובה להודעה מספר 15 שנכתבה על ידי scripter שמתחילה ב "1. אני חושב שאני מבין איך..."

ציטוט:
במקור נכתב על ידי scripter
5. הבעיה שלי עם הנקודה הקודמת שלך היא פשוטה, יש תחומים שעדיין מפתחים לרוב עם C.
במערכת ההפעלה שבעזרתה כתבת את תגובה, סביר להניח שיש בה יותר קוד C מאשר C++.
ומה ב-embedded programming? הרי לא תחום קטן ... ורוב הקוד שתראה בתחום הוא ב-C.

אני חושב שה-embedded world הולך להיות התחום הגדול הבא של C++, בעיקר בגלל העוצמה ש-C++ מעניקה לך על ידי שימוש ב-templates, אבל זה די תלוי, הסיבה שבדרך כלל אנשים בוחרים לתכנת בשפת C במקום ב++C היא בעיקר בגלל שיש קומפיילרים ממש גרועים ל-C++, במקרה כזה זו באמת בחירה חכמה לתכנת ב-C. אך יש קומפיילרים טובים מאוד ל-C++ שמאפשרים לך אפילו ליצור קוד יותר טוב מאשר אם היית מתכנת ב-C

ציטוט:
במקור נכתב על ידי scripter
אבל, וזה אבל גדול, יש תחומים רבים ש-OO פשוט לא ממש עוזר, ולעיתים בתחומים האלו דווקא גורם לסיבוך.

כמו שאמרתי קודם, לא כותבים תוכנית רק על ידי שימוש ב-OO אלא משלבים בין כל הפרדיגמות שהשפה נותנת לך, וכאן ++C עוצמתית - תיכנות פרוצידורלי, תיכנות מונחה עצמים ותיכנות ג'נרי, אלו 3 מאוד גדולים, והשילוב בניהם הוא מה שמאפשר לך לכתוב תוכנית בצורה המתאימה והיעילה ביותר.
_____________________________________
There are only two kinds of languages: the ones people complain about and the ones nobody uses

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #17  
ישן 16-04-2010, 14:11
צלמית המשתמש של scripter
  scripter scripter אינו מחובר  
 
חבר מתאריך: 04.08.02
הודעות: 4,468
בתגובה להודעה מספר 16 שנכתבה על ידי cplusplus שמתחילה ב "[QUOTE=scripter] 5. הבעיה שלי..."

ציטוט:
ני חושב שה-embedded world הולך להיות התחום הגדול הבא של C++

אתה מדבר כאילו C++ שפה שהומצאה אתמול. ידידי, היא קיימת מעל 25 שנה ... 25 שנה היה ל-C++ זמן "לכבוש" את embedded.

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

זאת לא הסיבה בדיוק. הסיבה היא אחרת, ופשוטה: הם כותבים ב-C _בגלל_ שקיימים קומפיילרים ל-C לכל פלטפורמה שרק נתן לחשוב עליה. זאת עובדה שקשה להתווכח איתה - בחר פלטפורמה, ויש עבורה קומפיילר איכותי ו-well tested ל-C.

ציטוט:
כמו שאמרתי קודם, לא כותבים תוכנית רק על ידי שימוש ב-OO אלא משלבים בין כל הפרדיגמות שהשפה נותנת לך, וכאן ++C עוצמתית - תיכנות פרוצידורלי, תיכנות מונחה עצמים ותיכנות ג'נרי

אתה מחשיב את היכולת של C++ לאפשר קוד פרוצדוראלי ומונחה עצמים בו זמנית בתור פיצ'ר, אבל יש גם הרבה מאוד אנשים שפשוט לא חושבים על זה בתור פיצ'ר.

בכל מקרה, את הנקודות שלי העברתי.
אני לא מתכנת ששונא C++, להפך, מי שמכיר אותי יודע שאני מתכנת דווקא זמן רב ב-C/C++.
יום טוב ושבת שלום.
_____________________________________
C pogrammers never die. They are just cast into void.


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #22  
ישן 16-04-2010, 15:21
צלמית המשתמש של hellfrost
  hellfrost hellfrost אינו מחובר  
 
חבר מתאריך: 07.12.09
הודעות: 7,072
בתגובה להודעה מספר 21 שנכתבה על ידי שימי שמתחילה ב "ואתה טוען שיש מקום שבו..."

http://www.open-std.org/JTC1/SC22/W.../docs/n1256.pdf

זה נראה לי המסמך העדכני והכוללני...

6.5.3.4 The sizeof operator
Constraints

3 When applied to an operand that has type char, unsigned char, or signed char,
(or a qualified version thereof) the result is 1. When applied to an operand that has array
type, the result is the total number of bytes in the array.88) When applied to an operand
that has structure or union type, the result is the total number of bytes in such an object,
including internal and trailing padding
.


7.21.6.3 The strlen function
Synopsis
1 #include <string.h>
size_t strlen(const char *s);
Description
2 The strlen function computes the length of the string pointed to by s.
Returns
3 The strlen function returns the number of characters that precede the terminating null
character.


7.1.1 Definitions of terms
1 A string is a contiguous sequence of characters terminated by and including the first null
character. The term multibyte string is sometimes used instead to emphasize special
processing given to multibyte characters contained in the string or to avoid confusion
with a wide string. A pointer to a string is a pointer to its initial (lowest addressed)
character. The length of a string is the number of bytes preceding the null character and
the value of a string is the sequence of the values of the contained characters, in order.


חלק מזה חדש לי כן, C זה לא ה WEPON OF CHOICE שלי...
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #24  
ישן 16-04-2010, 15:50
  טוארג טוארג אינו מחובר  
 
חבר מתאריך: 13.02.09
הודעות: 365
בתגובה להודעה מספר 21 שנכתבה על ידי שימי שמתחילה ב "ואתה טוען שיש מקום שבו..."

עד כמה שאני מבין את הסטנדרט, char חייב לכסות בדיוק את הטווח של 256 ערכים (0 עד 255 ללא סימן, 128- עד 127+ עם סימן). באופן פרקטי זה אומר שגודלו הוא 8 ביטים לפחות - אבל מותר שיהיה יותר. נובע מזה שמבחינה פיזית char עלול לתפוס 16 ביטים למשל, אבל תחום הערכים שבו מכסה רק את 127 או 255 התוים המוכרים (ASCII למיניו) וממילא wide char או unicode או utf8 וכדומה אינם נכללים.

בשביל להסתיר את הבעייה של אורכי תוים חובה אצלנו להשתמש במאקרו T_ סביב כל תו או מחרוזת, ככה שהקבועים הופכים למחרוזות 8 ביטים או 16 ביטים ע"פ פרמטר בשעת קומפילציה. כנ"ל כל פונקציות המחרוזות - אנחנו עוקבים אחרי השמות של מיקרוסופט כגון tcscpy במקום strcpy גם בקוד שמיועד ללינוקס או סביבות אחרות.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 14:14

הדף נוצר ב 0.08 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר