פורסם 2010 בינואר 2115 שנים יש לי רעיון שלדעתי הרבה יותר קל לביצוע, יש סיכוי שאני טועה בהבנת התרגיל אבל אני בספק... בעיקרון אתה צריך לולאת WHILE אחת שתסתיים כשהקלט הוא -1, ואז לקלוט מספרים לתוך מחסנית, ובסוף לבדוק מי הכי קטן במחסנית...ובסוף כמובן לפלוט אותו... מקווה שהבנת את הרעיון.. אם אתה צריך עזרה בביצוע דבר איתי!
פורסם 2010 בינואר 2115 שנים תיאורטית כן, אבל אז צריך להתעסק עם מבני נתונים, וסיבוכיות הזכרון עולה מ-(O(1 ל-(O(n.גם ככה צריך לעבור על כל איבר ברשימה רק פעם אחת, אז למה לטרוח לשמור אותם במבנה בצד?
פורסם 2010 בינואר 2115 שנים מחבר יש לי רעיון שלדעתי הרבה יותר קל לביצוע, יש סיכוי שאני טועה בהבנת התרגיל אבל אני בספק... בעיקרון אתה צריך לולאת WHILE אחת שתסתיים כשהקלט הוא -1, ואז לקלוט מספרים לתוך מחסנית, ובסוף לבדוק מי הכי קטן במחסנית... ובסוף כמובן לפלוט אותו... מקווה שהבנת את הרעיון.. אם אתה צריך עזרה בביצוע דבר איתי! מכיוון שאני לקראת פתרון, אני חושב שאני אדבוק בשיטה הנוכחית מלבד זה שלא ממש שואלים על מבני נתונים בד"כ בבחינה... כשאתה עושה lowest_num=frst' date=' אתה מאבד את הערך שלו מההפעלות הקודמות של הפונקציה. למעשה, זה כאילו לא הגדרת אותו להיות סטטי בכלל. [/quote'] באיזו פקודה אני אמור להחליף את זה ע"מ שהתוכנית תעבוד ? (היא כבר גמורה אני רק צריך את התוספת הקטנה הזו... :)
פורסם 2010 בינואר 2115 שנים תאתחל אותו רק בשורת ההצהרה שלו (כי האתחול הזה יקרה רק פעם אחת, ולא בכל קריאה לפונקציה).
פורסם 2010 בינואר 2115 שנים מחבר הוא לא נותן לי, הוא רושם: initializer is not a constant #include <stdarg.h>#include <stdio.h>int lowest_ever (int frst,...){ va_list mylist; static int lowest_num=frst; static int next_num; va_start (mylist, frst); /*Initialize the argument list*/ next_num= va_arg(mylist, int); while (next_num!=-1) { if (next_num <lowest_num) lowest_num= next_num; next_num = va_arg(mylist, int); } va_end (mylist); /*Clean up */ return lowest_num;}intmain (void){ /*This call prints 5*/ printf ("%d\n", lowest_ever (90, 78, 5, 20, -1)); /*This call prints 2*/ printf ("%d\n", lowest_ever (70, 40, 2, -1));/*This call prints 2*/ printf ("%d\n", lowest_ever (40, 30, -1)); return 0;}
פורסם 2010 בינואר 2115 שנים מחבר גם לא עובד... נותן לי הכל אפסים... :'(#include <stdarg.h>#include <stdio.h>int lowest_ever (int frst,...){ va_list mylist; static int lowest_num=0; static int next_num; va_start (mylist, frst); /*Initialize the argument list*/ next_num= va_arg(mylist, int); while (next_num!=-1) { if (next_num <lowest_num) lowest_num= next_num; next_num = va_arg(mylist, int); } va_end (mylist); /*Clean up */ return lowest_num;}intmain (void){ /*This call prints 5*/ printf ("%d\n", lowest_ever (90, 78, 5, 20, -1)); /*This call prints 2*/ printf ("%d\n", lowest_ever (70, 40, 2, -1));/*This call prints 2*/ printf ("%d\n", lowest_ever (40, 30, -1)); return 0;}
פורסם 2010 בינואר 2115 שנים זה לא מפתיע - אתחלת אותו להיות 0, ולכן הוא נמוך יותר מכל המספרים. תחשוב איך אפשר לאתחל אותו בצורה יותר חכמה.
פורסם 2010 בינואר 2115 שנים מחבר כן אבל לכל ערך שאני מאתחל אותו אני מקבל פשוט אותו בפלט.אם אני ארשום 1- באתחול אני אקבל בתדפיס 3 פעמים 1- ואם אני ארשום 1 אני אקבל 3 פעמים 1...
פורסם 2010 בינואר 2115 שנים זה כי 1- ו-1 קטנים יותר מכל המספרים שאתה מזין לפונקציה.קרא שוב את התרגיל ותחשוב איך אפשר לאתחל אותו.
פורסם 2010 בינואר 2115 שנים בבקשה.אגב, שים לב שעדיין יש לך שני באגים קטנים:מה קורה אם האיבר הקטן ביותר הוא הארגומנט הראשון? לדוגמה, (lowest_ever(3,5,6,-1?מה קורה אם לא מועבר שום מספר לרשימה, פרט ל-1-? כלומר, (lowest_ever(-1?
פורסם 2010 בינואר 2115 שנים מחבר את התנאים האלה אני יכול להוסיף פשוט בתוך ה- while נכון ? אין לי מה לשנות מחוץ ל- while במקרי הקצה האלה נכון ?
פורסם 2010 בינואר 2115 שנים מחבר חשבתי להכניס for-ים נוספים לתוך ה- while אבל זאת כנראה לא הדרך... :-[יש מצב לרמז ?
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.