ABA


"יש לכם הצעות לשיפור הקוד (K&R תרגיל 1-13)"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10766 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10766
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   23:02   05.07.12   
אל הפורום  
  יש לכם הצעות לשיפור הקוד (K&R תרגיל 1-13)  
 

#include <stdio.h>
#define MAX 20

/* PRINT A VERTICAL HISTOGRAM OF WORD LENGTHS
IN A SENTENCE. */

main() {

int c, i, j, k, l, m, n, WORD_COUNT, BIG_VALUE, C_NUM;
int length;
c = j = BIG_VALUE = 0;


for (i = 0; i < 20; i++)
length = 0;

while ((c = getchar()) != EOF && j < MAX) {
if (c == '\n' || c == '\t' || c ==' ')
j++;
else length++;
}

WORD_COUNT = j;

for (k = 0; k < MAX; k++) {
if (length > BIG_VALUE)
BIG_VALUE = length;
C_NUM = BIG_VALUE;
}

for (l = 0; l < BIG_VALUE; l++) {
printf("%d | ", C_NUM);
for (m = 0; m < WORD_COUNT; m++) {
if (length >= C_NUM)
printf("# ");
else
printf(" ");
}

printf("\n");
C_NUM = C_NUM-1;
}

printf(" ");

for (n = 0; n < WORD_COUNT; n++)
printf("--");

printf("\n ");
for (n = 0; n < WORD_COUNT; n++)
printf("%d ",n+1);

printf("\n");
}

אולי לעזור לו לשקול פחות?
אפשר לוותר על ריבוי המשתנים בלולאות?

כלומר להשתמש באותו משתנה לכל ללואות ה-for?
כי בין כה וכה אני מאפס אותו בכל התחלה של לולאה.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  היום היה לי מבחן, שפת C . dvir8 06.07.12 01:51 1
     רשום בתחילת הקוד מה התוכנית אמורה לעשות, אני ארחיב מחר, כובען  06.07.12 02:05 2
     אוקיי שיפרתי את הקוד (והוספתי הערות) לפי מה שכתבת: כובען  06.07.12 02:15 3
         לא הגדרת את length כמערך, הגדרת אותו כ int. dvir8 06.07.12 02:25 4
             הרצתי אחי. לגמרי הרצתי.. כובען  06.07.12 02:41 5
                 אהההה חחחח לא עשית המרת סוגרים מרובעות dvir8 06.07.12 02:45 6
                     מה זה אומר המרת סוגריים מרובעות? כובען  06.07.12 02:47 7
                         אהה במערכים.. קיצור מה אתה אומר על הקוד עכשיו? :-) כובען  06.07.12 02:48 8
                             סבבה אבל אם אתה ממש רוצה לחסוך, dvir8 06.07.12 02:52 9
                                 לא הבנתי, כובען  06.07.12 02:55 10
                                     אה אוקי.. dvir8 06.07.12 02:56 11
                                         מי אמר לך שזה ברמה אקדמית? כובען  06.07.12 02:57 12
                                             אהה הבנתי... שיהיה בהצלחה :] dvir8 06.07.12 02:57 13
                                                 אקדמית ת''א יפו כובען  06.07.12 03:00 14
                                                     ניתן לעשות אפיק מעבר אם הציונים טובים וכאלה? dvir8 06.07.12 03:10 15
                                                         לא ממש.. כובען  06.07.12 06:14 16

       
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   01:51   06.07.12   
אל הפורום  
  1. היום היה לי מבחן, שפת C .  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 06.07.12 בשעה 02:00 בברכה, dvir8
 
ומה זאת הלולאה בהתחלה שרצה 20 פעם על ריק?

אחרי שאתה מוצא מילה אתה לא מאפס את length.
יוצא לך ש length באורך של כל המילים או שזאת המטרה?

תרשום מה התוכנית אמורה לעשות יהיה יותר קל לעזור :]

-למה אתה משתמש ב j אם יש לך את WORD_COUNT? תבצע increase ישירות עליו.
-במקום לשאול if tab if new line, תשתמש ב define יותר קריא ויותר נכון
-אם MAX הוא 20 למה לא השתמשת בו בלולאה הראשונה? (למרות שלא הבנתי מהי בכלל)
-למה להשתמש בכל לולאה במשתנה אחר? אתה יכול להשתמש במשתנה אחד עבור כל הלולאות הרי אין לך תלות בהמשך הקוד במשתנים הקודמים.
-מה הלולאה איפה ש k אמורה לעשות? היא לא משנה שום דבר, זה לא מובן.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   02:05   06.07.12   
אל הפורום  
  2. רשום בתחילת הקוד מה התוכנית אמורה לעשות, אני ארחיב מחר,  
בתגובה להודעה מספר 1
 
אני פשוט חייב ללכת לישון.

תודה רבה על התגובה ולילה טוב.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   02:15   06.07.12   
אל הפורום  
  3. אוקיי שיפרתי את הקוד (והוספתי הערות) לפי מה שכתבת:  
בתגובה להודעה מספר 1
 

#include <stdio.h>
#define MAX 20

/* PRINT A VERTICAL HISTOGRAM OF WORD LENGTHS
IN A SENTENCE. */

main() {

int c, i, j, WORD_COUNT, BIG_VALUE, C_NUM;
int length;
c = j = WORD_COUNT = BIG_VALUE = 0;

//Initialize array
for (i = 0; i < MAX; i++)
length = 0;

//Get input and count chars in every word
while ((c = getchar()) != EOF && j < MAX) {
if (c == '\n' || c == '\t' || c ==' ')
WORD_COUNT++;
else length++;
}

//Determinate biggest value in array
for (i = 0; i < MAX; i++) {
if (length > BIG_VALUE)
BIG_VALUE = length;
C_NUM = BIG_VALUE;
}

//Print histogram
for (i = 0; i < BIG_VALUE; i++) {
printf("%d | ", C_NUM); //Printing numbers
for (j = 0; j < WORD_COUNT; j++) {
if (length >= C_NUM)
printf("# ");
else
printf(" ");
}

printf("\n");
C_NUM = C_NUM-1;
}

printf(" ");

for (i = 0; i < WORD_COUNT; i++)
printf("--");

printf("\n ");
for (i = 0; i < WORD_COUNT; i++)
printf("%d ",i+1);

printf("\n");
}

- הלולאה איפה שהיה K מאפסת את כל התאים במערך,
זה חשוב לי בשביל המשך העבודה כדי שהתוכנית תדע מה לעשות
במקרה שהערך שווה ל-0 או גדול ממנו.
- מה הכוונה לעשות define יתור קריא ויותר נכון?

שוב תודה רבה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   02:25   06.07.12   
אל הפורום  
  4. לא הגדרת את length כמערך, הגדרת אותו כ int.  
בתגובה להודעה מספר 3
 
   ערכתי לאחרונה בתאריך 06.07.12 בשעה 02:33 בברכה, dvir8
 
לגבי ה define
התכוונתי שאתה יכול לרשום דבר כזה

#define SPACE ' '
#define TAB \t
#define NEW_LINE \n

זה יותר נחמד לקורא, וגם סוג של אימון טוב במיוחד ללימודים.

אני מניח שאתה לא הרצת את התוכנית אתה מנסה לפתור על יבש נכון?


אגב,
אם הבנתי נכון אתה רוצה להראות עבור כל שורה בקלט את אורך המילה הארוכה ביותר שלה?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   02:41   06.07.12   
אל הפורום  
  5. הרצתי אחי. לגמרי הרצתי..  
בתגובה להודעה מספר 4
 
המטרה של התוכנית היא לקבל קלט וליצור גרף שמציג
את האורך של כל מילה בקלט.

למה הייתי צריך להגדיר את המערך כ-length ולא int?

למשל:
http://i.imgur.com/Tn7S4.png

כשהציר ה-x מסמן את מספר המילה ו-y את מספר התווים בה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   02:45   06.07.12   
אל הפורום  
  6. אהההה חחחח לא עשית המרת סוגרים מרובעות  
בתגובה להודעה מספר 5
 
   ואני לא מבין איך זה עובד לך חחח


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   02:47   06.07.12   
אל הפורום  
  7. מה זה אומר המרת סוגריים מרובעות?  
בתגובה להודעה מספר 6
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   02:48   06.07.12   
אל הפורום  
  8. אהה במערכים.. קיצור מה אתה אומר על הקוד עכשיו? :-)  
בתגובה להודעה מספר 7
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   02:52   06.07.12   
אל הפורום  
  9. סבבה אבל אם אתה ממש רוצה לחסוך,  
בתגובה להודעה מספר 8
 
   ערכתי לאחרונה בתאריך 06.07.12 בשעה 02:55 בברכה, dvir8
 
אתה יכול לבטל את cnum ואת i
ופשוט להדפיס את הלולאה של ההדפסה מהמקסימום כלומר מ BIG ל 0
ופשוט להדפיס את BIG כל פעם פחות 1. לא?

דבר נוסף את הבדיקה של המילה הכי גדולה אתה יכול לדחוף ללולאה הראשונה שיוצרת את הגודל של המילים.
כלומר לאחר כל סוף לולאה לשאול אם array במקום ה i גדול מ bigValue


אגב, ביקשו מכם יעילות או העיקר שיעבוד?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   02:55   06.07.12   
אל הפורום  
  10. לא הבנתי,  
בתגובה להודעה מספר 9
 
אבל זה לא קריטי, אני סה"כ עמוד 24 בספר לימוד חח
לא ביקשו ממני שום דבר שקשור לחסכון, סתם בשביל האתגר
רציתי לעשות אופטימיזציה לקוד...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   02:56   06.07.12   
אל הפורום  
  11. אה אוקי..  
בתגובה להודעה מספר 10
 
   זה כבר סוף סמסטר לא? איך אתם רק בהתחלה?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   02:57   06.07.12   
אל הפורום  
  12. מי אמר לך שזה ברמה אקדמית?  
בתגובה להודעה מספר 11
 

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   02:57   06.07.12   
אל הפורום  
  13. אהה הבנתי... שיהיה בהצלחה :]  
בתגובה להודעה מספר 12
 
   איפה נרשמת?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   03:00   06.07.12   
אל הפורום  
  14. אקדמית ת''א יפו  
בתגובה להודעה מספר 13
 
היו חסרות לי 7 נקודות בממוצע בגרות (100) בשביל להתקבל
לאונ' ת"א, למרות שממש ממש רציתי פשוט לא היה לי את הכוחות
להתחיל שוב פעם בגרויות (שלא בטוח שהייתי מצליח בהן) או פסיכומטרי (אותו סיפור).


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   03:10   06.07.12   
אל הפורום  
  15. ניתן לעשות אפיק מעבר אם הציונים טובים וכאלה?  
בתגובה להודעה מספר 14
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
כובען  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.3.10
24350 הודעות, 21 פידבק
   06:14   06.07.12   
אל הפורום  
  16. לא ממש..  
בתגובה להודעה מספר 15
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net