טיפול במספר משתנה של ארגומנטים -- שפת C - עמוד 3 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

טיפול במספר משתנה של ארגומנטים -- שפת C


iem

Recommended Posts

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

בעיקרון אתה צריך לולאת WHILE אחת שתסתיים כשהקלט הוא -1,

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

ובסוף כמובן לפלוט אותו...

מקווה שהבנת את הרעיון.. אם אתה צריך עזרה בביצוע דבר איתי!

קישור לתוכן
שתף באתרים אחרים

  • תגובות 64
  • נוצר
  • תגובה אחרונה

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

בעיקרון אתה צריך לולאת WHILE אחת שתסתיים כשהקלט הוא -1,

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

ובסוף כמובן לפלוט אותו...

מקווה שהבנת את הרעיון.. אם אתה צריך עזרה בביצוע דבר איתי!

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

כשאתה עושה lowest_num=frst' date=' אתה מאבד את הערך שלו מההפעלות הקודמות של הפונקציה. למעשה, זה כאילו לא הגדרת אותו להיות סטטי בכלל.

[/quote'] באיזו פקודה אני אמור להחליף את זה ע"מ שהתוכנית תעבוד ? (היא כבר גמורה אני רק צריך את התוספת הקטנה הזו... ::))

קישור לתוכן
שתף באתרים אחרים

הוא לא נותן לי, הוא רושם: initializer is not a constant :nixweiss:


#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;
}

int
main (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;
}

קישור לתוכן
שתף באתרים אחרים

גם לא עובד... נותן לי הכל אפסים... :'(


#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;
}

int
main (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;
}

קישור לתוכן
שתף באתרים אחרים

כן אבל לכל ערך שאני מאתחל אותו אני מקבל פשוט אותו בפלט.

אם אני ארשום 1- באתחול אני אקבל בתדפיס 3 פעמים 1- ואם אני ארשום 1 אני אקבל 3 פעמים 1...

קישור לתוכן
שתף באתרים אחרים

בבקשה.

אגב, שים לב שעדיין יש לך שני באגים קטנים:

מה קורה אם האיבר הקטן ביותר הוא הארגומנט הראשון? לדוגמה, (lowest_ever(3,5,6,-1?

מה קורה אם לא מועבר שום מספר לרשימה, פרט ל-1-? כלומר, (lowest_ever(-1?

קישור לתוכן
שתף באתרים אחרים

ארכיון

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


×
  • צור חדש...