פורסם 2010 בספטמבר 1915 שנים מחבר אני מקווה שזה כבר שיפור:#include <stdio.h>#define TRUE 1#define FALSE 0int main (void){char ch;int dot_flag=TRUE;int geresh_flag=FLASE; while (ch=getchar() != EOF){ if ((geresh_flag == TRUE) && (ch=='"')) { geresh_flag=FALSE; } /*case dot flag*/ if (dot_flag==TRUE) { if ((ch >='a') && (ch <='z') ) { ch-=32; putchar(ch); } dot_flag=FALSE; } /*case geresh flag*/ if (geresh_flag==TRUE) { if ((ch >='a') && (ch <='z') ) { ch-=32; putchar(ch); } } /******** case '.' ********/ if (ch=='.') { dot_flag=TRUE; } /******** case '"' ********/ else if (ch=='"') { geresh_flag=TRUE; } }return 0;}אבל שוב אני לא יודע למעשה איך אני מתייחס למצב של מספרים בקוד הזה... :'(
פורסם 2010 בספטמבר 2015 שנים למספרים אתה פשוט עושה תנאי ראשון בתוך הלולאה... while (ch=getchar() != EOF){if (ch >='0' && ch <='9') continue;...
פורסם 2010 בספטמבר 2015 שנים התכנית שלך ממש ממש ממש ממש ממש ממש מבולגנת. הסיבה לזה היא גם מאוד פשוטה - במקום לנסות לבנות אותה שלב אחר שלב, אתה מנסה לעשות הכל ביחד, ומערבב את כל הדברים (לדוגמה - הטיפול שלך בגרשיים מפוזר בין תחילת הלולאה וסופה - למה?)ההצעה שלי היא כזו: תתחיל את התכנית מההתחלה. חלק את התרגיל לשלבים (סה"כ שישה שלבים - "שלב 0" הוא שתהיה לך תכנית שרק מדפיסה את הפלט בלי שום שינויים, ואז בכל שלב תוסיף את השינויים הדרושים מ-1 עד 5). בכל שלב (גם אחרי שלב 0), תוודא היטב שהתכנית שלך עובדת - מתקמפלת ועושה בדיוק את מה שאתה מצפה ממנה, בכל המצבים. חוץ מזה, תוודא שהתכנית שלך נראית טוב - מסודרת, בלי שכפול קוד מיותר וכו'. אם אתה רוצה, תעלה אחרי כל שלב את התכנית לפורום בשביל משוב.
פורסם 2010 בספטמבר 2015 שנים מחבר אני יכול להכניס את כל ה-IF-ים בהתחלה בתוך הלולאה, ואז להכניס את ההדפסה הרגילה כמצב default אם אף אחד מה-IF-ים לא התקיים בתור else כדי שלא יהיה מצב של הדפסה בכל מקרה לא ?כרגע נניח אם אני מתייחס לתנאי תחילת משפט, כלומר לאחר שדגל הנק' נמצא במצב TRUE ובמצב שנכנס תו רגיל לאחריו, אז התוכנית תהיה:(אני מזכיר שאני עושה כעצתך באופן מודולרי)#include <stdio.h>#define TRUE 1#define FALSE 0int main (void){char ch;int dot_flag=TRUE;int geresh_flag=FLASE; while (ch=getchar() != EOF){ if (ch=='.') { putchar(ch); dot_flag=TRUE; } if ((dot_flag==TRUE)&&(ch >='a') && (ch <='z')) { ch-=32; putchar(ch); dot_flag=FALSE; } else putchar(ch); }return 0;}ברור שיש עוד תנאים, אבל אני רוצה לוודא שמודולרית אני מתחיל לחשוב נכון בבניית התוכנית.
פורסם 2010 בספטמבר 2015 שנים אני כבר אומר לך מראש - אתה לא חושב נכון.תתחיל את התכנית מההתחלה. חלק את התרגיל לשלבים (סה"כ שישה שלבים - "שלב 0" הוא שתהיה לך תכנית שרק מדפיסה את הפלט בלי שום שינויים' date=' ואז בכל שלב תוסיף את השינויים הדרושים מ-1 עד 5). בכל שלב (גם אחרי שלב 0), תוודא היטב שהתכנית שלך עובדת - מתקמפלת ועושה בדיוק את מה שאתה מצפה ממנה, בכל המצבים. חוץ מזה, תוודא שהתכנית שלך נראית טוב - מסודרת, בלי שכפול קוד מיותר וכו'. אם אתה רוצה, תעלה אחרי כל שלב את התכנית לפורום בשביל משוב.[/quote']אני אתן לך עוד רמז קטן - המילה "putchar" צריכה להופיע בדיוק במקום אחד בתכנית.
פורסם 2010 בספטמבר 2015 שנים אלוגריתם בסיסי.לולאה (קבל תו)ספרה? דלגאם נקודה? הדלק דגלאחרת אם גרשיים? הדלק/כבה דגלאחרת אם אות?{אם דגל נקודה? הגדל אות וכבה דגלאחרת אם דגל גרשיים דולק? הגדל אותאחרת הקטן אות}הדפס תוסגור לולאה
פורסם 2010 בספטמבר 2015 שנים מחבר #include <stdio.h>#define TRUE 1#define FALSE 0int main (void){char ch;int dot_flag=TRUE;int geresh_flag=FLASE; while (ch=getchar() != EOF){ if ((ch>='0')&&(ch<='9')) { continue; } if (ch=='.') { dot_flag=TRUE; } else if (ch=='"') { geresh_flag=TRUE; } else if ((ch>='a')&&(ch<='z')||(ch>='A')&&(ch<='Z')) { if(dot_flag==TRUE) { ch-=32; dot_flag=FALSE; } else if (geresh_flag==TRUE) { ch-=32; } else ch-=32; } putch(ch); }return 0;}כתבתי את זה... עכשיו באמת זה אמור לעבוד כי אחרת באמת הייתי מדפיס אותיות בלבד כפי ששניצל אמר...
פורסם 2010 בספטמבר 2015 שנים א. סדר כבר את האינדנטציה! קשה להבין מה הולך שם.ב. אתה לא מכבה את geresh_flag בשום מקום.ג. יש לך באג - מה קורה כשיש כבר אות גדולה בתחילת משפט?
פורסם 2010 בספטמבר 2015 שנים אבל... הטריק לא חוסך כלום.אם כבר, אז:ch ^= 32שמבצע את שניהם (הופך אות קטנה לגדולה ולהיפך).כמובן, הוא ידפוק כל תו שאינו אות.
פורסם 2010 בספטמבר 2015 שנים בטח שחוסךהוא חוסך את הבדיקה אם האות גדולה או קטנה.אם אני צריך אות גדולה, אז ch &= 223;יגדיל לי את האות במקרה של אות קטנה, ולא ישפיע במקרה של אות גדולה.מכיוון שכבר יש תנאי בתרגיל שבודק אם מדובר באותיות, אז זה חוסךלו תנאי נוסף שבודק אם האות קטנה וצריך להגדיל.ובהתאם השני שרשמתי מקטין, וחוסך את הבדיקה שוב
פורסם 2010 בספטמבר 2015 שנים מחבר הכנתי את התוכנית:#include <stdio.h>#define TRUE 1#define FALSE 0int main (void){char ch;int dot_flag=TRUE;int geresh_flag=FLASE;while (ch=getchar() != EOF){ if ((ch>='0')&&(ch<='9')) { continue; } if (ch=='.') { dot_flag=TRUE; } else if (ch=='"') { if (geresh_flag==TRUE) { geresh_flag=FALSE; } else geresh_flag=TRUE; } else if ((ch>='a')&&(ch<='z')||(ch>='A')&&(ch<='Z')) { if(dot_flag==TRUE) { ch=ch&223; dot_flag=FALSE; } else if (geresh_flag==TRUE) { ch=ch&223; } else ch=ch&223; } putch(ch);}return 0;}אני עובד על עניין האינדנטציה אבל יש לי בעיה עם סביבת העבודה ואין לי תיקונים כמו בויזואל סטודיו אז אני מבצע את זה ידנית.אני חושב שפתרתי את בעיית הגרש ע"י שינוי מצב כל פעם ע"י בדיקת המצב והפיכתו, אבל בנוגע לבעיית האות הראשונה הגדולה, חשבתי קודם כל (לפי עצתו של שניצל) להעלות את ההתקדמות כרגע ואז להתייעץ לגבי בעיית האות הגדולה הראשונה.אם אני מריץ את זה על יבש אז אני נופל לתנאי הבא:else if ((ch>='a')&&(ch<='z')||(ch>='A')&&(ch<='Z'))אבל השאלה אם:ch=ch&223;לא פתר לי בעצם את בעיית הבדיקה ואז אני לא מחוייב בבדיקה פנימית בתוך ה-if ? ???
פורסם 2010 בספטמבר 2115 שנים לגבי האינדנטציה, תדאג שכל if וה-elseים שלו יהיו באותה רמה, כלומר, לא ככה:if (blabla) { blablabla } else if (bla) { bla }אלא ככה:if (blabla) { blablabla }else if (bla) { bla }ואפילו יותר טוב:if (blabla){ blablabla}else if (bla){ bla}ועוד טיפ קטן: תסתכל על הפונקציות שכאן.
פורסם 2010 בספטמבר 2115 שנים מחבר את ה-tolower Convert uppercase letter to lowercase (function)toupper Convert lowercase letter to uppercase (function)אני הכרתי כבר לפני תחילת התרגיל, אבל הנחתי שכוונת המרצה היתה לא להשתמש בפונק' ספרייה כרגע לפחות בתרגיל זה...השאלה אם כרגע התוכנית שלי עונה על כל התנאים הנדרשים ? כי בהרצה על הנייר זה נראה היה לי שזה עובד... השאלה אם פספסתי כאן משהו או שהתוכנית הושלמה ?תודה ;D
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.