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

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



  #16  
ישן 29-03-2005, 20:01
  AlexKarpman AlexKarpman אינו מחובר  
 
חבר מתאריך: 20.12.01
הודעות: 20,962
איציק התייחס לזה בעקיפין:
בתגובה להודעה מספר 15 שנכתבה על ידי cyberia_2ooo שמתחילה ב "דבר אחרון שהזניחו כאן"

כשהפך את הלולאה ל-while שבודק את לא הגענו ל-NULL...
זה אחד אחד מהקטעים שהופכים את C ו-CPP לשפות מגעילות בעיני(בניגוד לשפות עיליות) -
למרות שהעקרון של תכנות פרוצדולרי אומר שפונקציה היא "קופסה שחורה", ולא אכפת לך מה
קורה בפנים - כל עוד אתה מכיר את הממשק שלה(כלומר: הפרמטרים, טיפוסיהם ומשמעותם,
וטיפוסו ומשמעותו של ערך ההחזרה), ב-C אתה חייב לדעת איך פועל הקוד בפנים כדי לכתוב
קוד טוב. (במקרה שלנו, אתה חייב לדעת שבניגוד ל-pascal strings, פה לא נשמר גודל המחרוזת
בשום מקום, והדרך היחידה לקבל אותו היא לסרוק אותו עד לסוף המחרוזת, ולספור אורך)

המסקנה מפה, ד.א., היא שהקוד של איציק(שעובר על המחרוזת עד ה-NULL) עדיף מההצעה
שלך לקרוא לפונקציה בהתחלה, לשמור את הערך במשתנה, ואז לסרוק את המחרוזת בחיפוש
אחר התו המבוקש: למרות שהסיבוכיות תהיה זהה, פונקציות זמן -הריצה יהיו שונות, מאחר
ואצלך סורקים את המחרוזת פעמיים - פעם אחת בקריאה ל-strlen, ופעם נוספת בחיפוש עצמו
[כלומר פונקציות זמן הריצה יהיו n+k ו 2n+m בהתאמה, כאשר k ו-m קבועים. אפילו אם m שלך
יהיה קטן יותר, המקדם של n חשוב יותר(אפשר להתייחס אליו כמקדם של n בחזקת אחד, כאשק
k או m הם מקדמים של n בחזקת אפס, והחזקה הגבוהה יותר משמעותית יותר...)]

טוב, חפרתי...
לילה טוב, טל
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #18  
ישן 29-03-2005, 20:53
  AlexKarpman AlexKarpman אינו מחובר  
 
חבר מתאריך: 20.12.01
הודעות: 20,962
העיקר עכשיו התייחסנו? :)
בתגובה להודעה מספר 17 שנכתבה על ידי cyberia_2ooo שמתחילה ב "זה שבקוד של איציק לא היה את הבעיה הנ"ל"

אני לא מבין כל-כך את החלוקה לדורות(במיוחד, כי כל-אחד מחלק איך שבא לו), אבל לפי החלוקה
המוכרת לי ג'וואה ובייסיק הן "שפות עיליות", בעוד ש-C היא "שפת ביניים"(כלומר, "דור" אחד למטה
בשרשרת המזון התכנותית). ב-C(וב-CPP) עפ"י ההגדרה, אתה צריך להתעסק בדברים הללו - C
נוצרה כשפה לבניית מערכות הפעלה(ליתר דיוק: מערכת הפעלה מסויימת ), ולכן נותנת לך את
האפשרות, ומחייבת אותך, לעשות הכל, להגדיר הכל, לקבוע הכל - אבל גם דורשת ממך, בהתאם,
להבין ולדעת הכל...
ג'אווה ובייסיק, בתיאוריה, מנסות כן לפעול בשיטת ה"קופסה השחורה". את ג'אווה אני לא מכיר
עד-כדי כך, אבל אני יכול לומר שבייסיק לא כל-כך הצליחה בתחום הזה: בזמן הדוס, כל התכנות
התבסס על טריקים(מישהו אמר overloading או XMS? ), ולכן ב-QB נאלצת להתעסק בהמון
שטויות(למען האמת, כדי להשתמש ב-XMS כתבו מודולים ב-C או ASM, וקישרו אותם לקוד ה-QB).
ב-VB, בגלל שמדובר ב-MS, אתה נאלץ תמיד לדעת מתי כתוב משהו אחד, והפונקציה עושה
משהו שונה לחלוטין(לעזאזל, Usenet מלא בזה...)...
מצד שני, נדמה לי שבג'אווה המצב טוב יותר

לעניין המחרוזות, בג'אווה ובבייסיק אכן משתמשים ב-pascal strings(בג'אווה זה אפילו יותר
מתוחכם), אבל מעבר לכך, באופן כללי הגישה היא שאתה לא אמור להתעסק בזוטות, כל הקוד
שסופק לך פועל(ופועל טוב), ואתה לא צריך לדאוג מתי להשתמש בו ומתי לא(כמובן שזה בא
על חשבון ביצועים, ואין מה לעשוות את ג'אווה או VB ל-C או CPP...)
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #20  
ישן 29-03-2005, 22:47
צלמית המשתמש של scripter
  scripter scripter אינו מחובר  
 
חבר מתאריך: 04.08.02
הודעות: 4,468
...
בתגובה להודעה מספר 15 שנכתבה על ידי cyberia_2ooo שמתחילה ב "דבר אחרון שהזניחו כאן"

שים לב טל, לא התייחסתי לקוד שהוא הביא במיוחד.
אמנם כפי "הערתם" לפני, אכן יכלתי להחליף בקלות בדוגמא שכתבתי מint ל char.
נכון, במקרה הזה לא היה משנה, אבל כפי אמרת, אם היה מעורב שם פונקציות קריאה מstdin, אז זה היה שונה.
אמנם זה כ"כ default, בפונקציות stdio להשתמש בint, שעם הזמן, זה הפך להיות סטנדרט אצלי גם.
שים לב prototypes הבאים:



char * strchr ( const char * string, int c );
char * strrchr ( const char * string, int c );
void * memchr ( const void * buffer, int c, size_t num );
לא שמים קריאה לפונקציה שערך החזרה שלה נשמר קבוע לאורך הלולאה בתוך הלולאה
לדוגמא, strlen כתנאי...
אין מה להתווכח. אמנם זה לא הופיע בקוד שהבאתי כדוגמא, זה בהחלט שווה הערה.
אבל עדיין, אם אתה מסתכל על זה, אין צורך בכלל לדעת מה האורך של המחרוזת, לכן הייתי עדיין ממשיך עם מצביעים כדי לפתור את זה.

עכשיו נעזוב את התקנים/פונקציות/משתנים הכל..
מה שלומך? טוב לראות אותך מסתובב בפורום עדיין.
איציק.

נערך לאחרונה ע"י scripter בתאריך 29-03-2005 בשעה 22:52.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #21  
ישן 01-04-2005, 09:21
  cyberia_2ooo cyberia_2ooo אינו מחובר  
 
חבר מתאריך: 17.12.01
הודעות: 1,604
אני בהחלט מסכים
בתגובה להודעה מספר 20 שנכתבה על ידי scripter שמתחילה ב "..."

פשוט לא הבנתי את ההקשר של הEOF לדוגמא הנוכחית...
אם אתה מתייחס לזה כאל סטנדרט של השוואה של int לchar כדי שתוכל גם לזהות EOF וכד'
זה בהחלט מקובל (ע"ע K&R אם הם עשו משהו כל העולם גם יכול)

בכל מקרה גם העניין של להשתמש במצביעים (או באינדקסים שזה קצת יוצר קוד יותר ברור) על מנת לגלות את סוף המחרוזת בלי להשתמש בכלל בstrlen זה בהחלט יותר אפקטיבי
אבל אם אתה בוחר להשתמש מתישהו בstrlen הנק' הייתה שלא תחשב אותה מחדש בכל איטרציה כי זה, אולי בדברים שהבחור כותב עכשיו לא מורגש...

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

בכל מקרה, אלכס (עניתי כאן כדי לא לפתוח הודעה חדשה)
עם נרד מעניין הדורות שניה, אפילו ב#C כשאתה רוצה ליעל תוכנה, זה חשוב לדעת את המימוש של שפת התכנות שאתה עובד איתה. העניין הוא שבשפות גבוהות כמו #C וJAVA אז הדברים האלו הם הצרה הקטנה שלך, למרות זאת, גם כשאני כותב ב#C אני משתמש במשתני עזר...
משתני עזר זה דבר חשוב ואין שום סיבה לא להשתמש בעשרות משתני עזר, זה גורם לקוד שלך להיות יותר ברור, זה חוסך ביצוע פעולות, וזה נעלם באופטימיזציה אם אפשר...
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

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

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

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

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



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

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

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

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