עזרה נואשת.

BravoMan

Active member
כל מילה בסלע!

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

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

מה שאומר שכל מה שהתגובה הזו טובה בשבילו זה לרמות בשיעורי בית.
ללמוד ממנה משהו יהיה קשה מאוד.

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

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

אז מה פתרון כזה עוזר לתלמיד, מעבר ליכולת לעשות copy/paste???
 

mistero

New member
דבר ראשון אתה מצטייר כיהיר, וזה לא יפה. עכשיו

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

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

nocgod

New member
דעתך האישית...

מניסיון אומר לך שמי שלא יודע לשחק עם if ו for לא יצליח בהמשך הקורס כשיבקשו ממנו לבנות תוכניות עם יותר תקשורת משתמש ומידע, שלא נדבר על לוגיקה מסובכת. אישית הייתי צריך למגר מפחד מחלה ממחזור שלם שלא ידע מה זה do-while ופחד מזה פחד מוות.
אני נפגשתי עם הדברים האלה לא פעם ולא פעמיים במהלך שנה וחצי שאני מתגבר סטודנטים בקורסים של מבוא למדעי המחשב ומדעי המחשב מתקדם.

זה מתחיל מזה שהם לא מבינים איך לבנות מחלקות פשוטות ב++C, ממשיך בזה שהורשה בשבילם זה סוף העולם ונגמר בזה שהם קונים עבודה שלוקח 10 שעות של עבודה נטו. בדרך הזו הם מפסידים גם כסף וגם את כל התהליך הלימודי.
מבחינתם מצביעים זה מילה גסה, reference זה מיותר, כל פונקציה חדשה שלומדים זה צביטה בלב וכל נושא חדש תמיד מתקבל עם השאלה "זה נחוץ?"

לדעתי עדיף להכשל בהתחלה מאשר להבין שזה שלא בשבילך בבסוף הזה ולהנכס לייאש.
אני לא מורה, אני סטודנט שצורת הלימוד שלו אומרת "לעולם לא נתתי לבית הספר לפגוע בהשכלתי "(א. אינשטיין), את הקורסים למדתי לבד, את העבודות הכנתי לבד ואת המבחן עברתי עם 94 (מה שלא קל להשיג במבחן כתיבה על דף) אותו הסיפור בקורס של ++C שנגמר עם 94 וקורס Java שנגמר עם 100 במבחן. הגישה הזאת גם עזרה לי ללמוד #C לבד מהספר והאינטרט ולהגיש בשפה פרוייקט תוכנה שקיבל 92 סופי (100 על הפרוייקט בנטו ניירת קצת הורידה ציון). אני מאמין שיש לי סוג של נוסחא שעובדת, וראיתי האת הנוסחא של "עזרה" בהסוואה של "תעשה בשבילי", ואני לא מסכים איתה.

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

nocgod

New member
מה גם ש...

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

רק לצורך בדיקה עצמית
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int c=0;
char str[] = "hello this is my world";
char res_string[200];
printf("Before\n");
printf("String: %s\nLength: %d\n", str, strlen(str));
while(str[c]!=NULL)
{
if(str[c]=' ')
{
res_string[c]=str[c+1];
res_string[c+1]=' ';
c=c+2;
}
else
c++;
}
printf("after\n");
printf("String: %s\nLength: %d\n", str, strlen(str));
printf ("%s\n",res_string);

return 0;
}
}


תבדוק ותראה שכל שינוי שעשיתי זה הוספת ה printfים והstr...

עכשיו בוא תספר לי מה התועלת מתשובה "מקצועית" כזאת שגם לא מבצעת את מה שהיא צריכה לבצע וגם לא מוסברת בה לוגיקת פיתרון?
 

pilot23

New member
התגובה שלי בעניין

אני מאוד מעריכה את העזרה שלך בפורום.... ואין לי **שום** כוונה, אבל שום כוונה שמישהו יעשה בשבילי ויביא לי פתרון מוכן!!! אתה לא מכיר אותי ולא יכול לקבוע דבר כזה עליי... ולקבוע אם יש לי מטרה מול העיניים או לא! או אם אני בן אדם שמגדיל ראש או לא...
וכן, קראתי את ה- 100 העמודים הראשונים של K&R ולא קיבלתי תשובות.... וכן, במהלך הלימודים שלי באוניברסיטה אני קוראת המון ספרים מעבר למה שאני צריכה.. ובאנגלית...
ובעיני התרגיל קשה... מה לעשות..
 

pilot23

New member
תוספת

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

nocgod

New member
אין לי שום בעיה עם זה שאת שואלת שאלות

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

מה למדת מהתשובה שהוא נתן לך?
 

pilot23

New member
עשיתי משהו אחר בעצמי עם כמה מערכי עזר.. מקווה

זה יעבוד.
 

pilot23

New member
ולגבי K&R,

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

nocgod

New member
כל ה 100 עמודים מסבירים את זה.

כל מה שאת צריכה לדעת בשביל לפתור את הבעיה זה:
להצהיר על משתנים
control-flow
מבנה של מחרוזת.

bravoman כתב לך שכשיש לך בעיה להבין מה לעשות תפרקי את זה לחלקים קטנים יותר והביא דוגמא של pseudocode.
אני אביא לך גם דוגמא של איך פותרים את אחד הסעיפים. מחיקה של רווחים מההתחלה ומהסוף:
מצאי אינקדס של תו ראשון ששונה מרווח נקרא לו i
מצאי אינדקס של תו אחרון ששונה מרווח נקרא לו j
העתיקי (אפשר אפילו לאותה המחרוזת) את התת-מחרוזת החל מi עד j
הציבי \0 בסוף המחרוזת החדשה
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
char str1[] = " hello this is my world ";
char str2[] = "No spaces in the beginning ";
char str3[] = " no spaces in the end";
char str4[] = "no spaces on the edges";
char *str;
int i = 0, j = 0;
int firstNonBlankChar;
int lastNonBlankChar;
int strLength;

str = str1;

//find first non space character
while (str == ' ')
i++;
firstNonBlankChar = i;

// find string length -----> could be found using strlen
while (str != NULL)
i++;
strLength = i;

// last non space character
i = strLength;
while (str[i-1] == ' ') // -1 compensate for the \0 character
i--;
lastNonBlankChar = i;

for (i = firstNonBlankChar; i < lastNonBlankChar; i++)
str[j++] = str;

str[j] = '\0';

printf("%s.\n", str);
}


כדי לראות שהקוד עובד עבור כל מקרה יש שורה שכתוב בה str = str1 תחליפי את האחד ב1 עד 4 .

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

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

pilot23

New member
תשובה

אני לא יכולה להשתמש בסיפרייה #include <stdlib.h>
וגם כתבת char *str.. מה אומרת הכוכבית ? אם זה פויינטר אז לא למדתי ואני לא יכולה להשתמש בזה עדיין.
"כדי לראות שהקוד עובד עבור כל מקרה יש שורה שכתוב בה str = str1 תחליפי את האחד ב1 עד 4" . למה ב- 1 עד 4 ?
העבודה שלי היא על קודים: piglatin, space code וכו'... יש לעשות המרה מאנגלית לקוד ולהפך. צריך להשתמש באינפוט של המשתמש ב- char בגודל 64.. והתוצאה לא תעלה על 128 bytes.
 

nocgod

New member
את הסיפריה

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

למה ב1-4? כי תשימי לב שיש 4 מחרוזות שקראתי להם str1 עד str4 , גם זה חלק מהבדיקה שעשיתי לפני ששלחתי את הקוד, אם לא הבנת את זה, אז לא נורא כי אני משתמש במצביע שם כדי שיהיה לי נוח. עוד לא למדתם.
הקוד הזה לא מוגן מטעויות (נגין מחרוזת רייקה שיש בה רק \0 תפיל את התוכנית, צריך לעשות תנאי שאם המחרוזת ריקה אז לטפל בזה בצורה שונה) הרעיון היה להציג את הפסדוקוד ולא את הפרטים הקטנים שאת צריכה לחשוב עליהם לבד.

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

pilot23

New member
תודה רבה.

אם אפשר הסבר למה שעשית זה מאוד יעזור.
 
למעלה