עבור לתוכן

הדפסה של מערך עם מחרוזות בסדר ABC בשפת C

Featured Replies

פורסם

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

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

  • תגובות 34
  • צפיות 6.8k
  • נוצר
  • תגובה אחרונה
פורסם

אפילו בכדורסל אם אתה לא יודע לשחק עם יד ימין אתה לא יכול להמשיך ולשחק בשמאל

קודם כל מלמדים אותך את הבסיס, ואחר כך אתה ממשיך לרמות יותר מתקדמות...

התרגיל הזה באמת מצריך חשיבה .. :)

פורסם

אני בכלל לא בעד הפתרון הזה, 2 סיבות:

1. להשמיד את מידע בתוך קוד שעושה פלט זה API מכוער, מאוד מאוד מכוער.

2. זה שבור לחלוטין, לדוגמה זה יעבוד:




char str[] = "blah...";
foo(str);

לעומת זאת, זה:

foo("blah...");

יתן לך seg fault והתוכנה שלך תתרסק.

מסכים עם ההערה למעלה. למרות שאופי התרגיל בעיקר דידקטי, עדיין חשוב לשמור על good practices ככל שמתאפשר.

הצעתי היא תוספת לרעיון מציאה חוזרת של מילה מינימלית שהועלה כאן כמה פעמים:

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

בצורה זו ישמרו 2 משתנים - מינימום קודם ומינימום נוכחי מלבד מערך התווים הנתון

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

אבל אלו בדרך כלל הדברים הקטנים (כמו לא לגעת בקלט!!) שמצטברים בסופו של דבר לאוסף של bad practices ויכולים לעשות את המוות למדבג / מתחזק התורן

פסאודו קוד:


void PrintInOrder (char* text)
{
char* currentMinWord = findMinimumWord(text);
char* lastMinWord = null;

while (currentMin != null)
{
printWord(currentMinWord);
lastMinWord = currentMinWord;
currentMinWord = findMinimalGreaterThan(lastMinWord, text);
}
}

פורסם

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

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

פורסם

אפילו בכדורסל אם אתה לא יודע לשחק עם יד ימין אתה לא יכול להמשיך ולשחק בשמאל

קודם כל מלמדים אותך את הבסיס, ואחר כך אתה ממשיך לרמות יותר מתקדמות...

התרגיל הזה באמת מצריך חשיבה .. :)

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

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

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

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

נכון, המטרה היא ללמוד לחשוב. אבל גם שחקני שח ורופאים לומדים לחשוב (אני מקווה...:)), למה לא לשחק שח במקום?

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

קונה במחיר הזה?

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

נראה לי שזה פשוט סוג של מעגל, ככה מלמדים כי ככה לימדו אותם (כמו השיר הזה של offspring... נו ברח לי השם! ).

אני לא מתכוון לפתוח flame war של "אקדמיה VS העולם". רק רציתי לשתף אתכם באיך זה נראה מהזווית שלי כ outsider, זה הכל.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים