עבור לתוכן

שאלה מביכה ב C [פיתוח אלגוריתם/פונקציה] =]

Featured Replies

פורסם

היי חבר'ה

אני די חדש ב C ואני ישמח אם תעזרו לי במשהו

כתוב פונקציה הקולטת שני זמנים ומוצאת את ההפרש בינהם

עכשיו אני לא כזה מבין בפונקציות ואת ה syntax שאני צריך לעשות

#include <stdio.h>
#include <conio.h>
#include <math.h>
int clock(int hour,int hour1,int min,int min1,int sec,int sec1,int totalseconds,int totalseconds1,int temp)
{
totalseconds=(hour*60+min)*60+sec;
totalseconds1=(hour1*60+min1)*60+sec1;
temp=abs(totalseconds1-totalseconds);
return temp;
}

void main()
{

int hour,hour1,min,min1,sec,sec1,temp;
printf("enter hour,min and sec");
scanf("%d %d %d",&hour,&hour1,&min,&min1,&sec,&sec1);
clock(hour,hour1,min,min1,sec,sec1);
printf("%d %d %d %d %d %d, ????)
}

יש לי כמה שאלות

*אני יכול להשתמש באותם משתנים גם בפוקנציה וגם בראשית?

*כל הקטע הזה בכלל נכון?איך אני קורא לפונקציה כומ שצריך?

*תשילמו לי בסימני שאלה מה צריך לכתוב

פורסם

לא נכנסתי יותר מידיי לתוכנית שלך, לדעתי התיקונים (לפי הגיוני):


#include <stdio.h>
#include <conio.h>
#include <math.h>
int clock(int hour,int hour1,int min,int min1,int sec,int sec1)
{
int temp,totalseconds,totalseconds1;
totalseconds=(hour*60+min)*60+sec;
totalseconds1=(hour1*60+min1)*60+sec1;
temp=abs(totalseconds1-totalseconds);
return temp;
}

void main()
{
int hour,hour1,min,min1,sec,sec1,temp;
printf("enter hour,min and sec");
scanf("%d%d%d%d%d%d",&hour,&hour1,&min,&min1,&sec,&sec1);
temp=clock(hour,hour1,min,min1,sec,sec1);
printf("%d",temp);
}

פורסם

אתה יכול להשתמש באותם שמות משתנים, אבל תצטרך להצהיר עליהם בכל פונקציה (כלומר אם הצהרת על משתנה ב-main, הוא לא יהיה נגיש מתוך clock אלא אם העברת אותו כפרמטר).

אתה לא צריך להעביר את totalseconds,totalseconds1,temp מה-main לפונקציה, אתה יכול פשוט להצהיר עליהם בתוך הפונקציה (כמו שהצהרת על המשתנים ב-main).

ה-scanf שלך קולט רק 3 פרמטרים, כשהוא אמור לקלוט שישה (צריך 6 פעמים d%).

את התוצאה של clock אתה צריך לשמור במשתנה כלשהו. נניח, תצהיר ב-main על משתנה בשם result (מטיפוס int) ותקרא לפונקציה ככה:

result = clock(hour,hour1,min,min1,sec,sec1);

שים לב ש-result מחזיק עכשיו את ההפרש בין הזמנים בשניות. אתה יכול להדפיס את המספר הזה ישירות (ואז תצטרך רק d% אחד ב-printf), או לחילופין לחשב ממנו את מספר השעות והדקות באמצעות פעולות חילוק ומודולו (אני לא ממליץ לך לעשות זאת אם עדיין לא למדת את זה).

עוד משהו קטן - main צריכה להחזיר int ולא void, ובסופה תוסיף את השורה הזו:

return 0;

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

SubX, חסר לך מרכאות ב-printf.

פורסם
  • מחבר

ואו תודה רבה!

שאלה אחרונה

לא יותר פשוט לעשות מה שאמרת עם ה RESULT פשוט לשים בmain

void main(int temp)

כי

כבר רשום

temp=clock(hour,hour1,min,min1,sec,sec1);

פורסם

אתה יכול לחסוך גם את כל המשתנים (גם את כל התוכן של הפונקציה clock) בשורה:


return abs(((hour1*60+min1)*60+sec1)-((hour*60+min)*60+sec));

שניצל ערכתי.

פורסם

ואו תודה רבה!

שאלה אחרונה

לא יותר פשוט לעשות מה שאמרת עם ה RESULT פשוט לשים בmain

void main(int temp)

כי

כבר רשום

temp=clock(hour,hour1,min,min1,sec,sec1);

אין קשר בין המשתנים האלו.

TEMP הוא משתנה שמוכר רק בתוך הפונקציוה CLOCK. אם תרשום את זה כפי שרצית, 2 המשתנים לא יכילו את אותו ערך, ולא יהיו אותו משתנה.

ולא נהוג(בכלל לא) לתת חתימה אחרת לMAIN.

פורסם

החתימה של main זה לא עניין של נהוג או לא נהוג. לפי הסטנדרט הוא תמיד מחזיר int. זה לא עניין לשיקול דעת.

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

פורסם
  • מחבר

תיקון אחרון תודה לכל העוזרים פה

תקינות קלט..שהשעות לא יהיו מעל 24 וכו'

#include <stdio.h>            
#include <conio.h>
#include <math.h>
int clock(int hour,int hour1,int min,int min1,int sec,int sec1)
{
int temp,totalseconds,totalseconds1;
totalseconds=(hour*60+min)*60+sec;
totalseconds1=(hour1*60+min1)*60+sec1;
temp=abs(totalseconds1-totalseconds);
return temp;
}

void PrintDisplayOfSec(int nTotalSec)
{
// הגדרת משתנים עבור חלקי השעה
int nHour;
int nSed;
int nMin;

// קביעת מספר הדקות היוצאות ממספר השניות
nMin = nTotal / 60;

// בדיקה כמה שניות ישארו ללא דקה מאגדת
nSec = nTotal % 60;

// ביצוע אותה פעולה שעשינו על מספר השניות הכללי לדקות
nHour = nMin / 60;
nMin = nMin % 60;

printf("%d : %d : %d", nHour, nMin, nSec);
}

void main()
{
int hour,hour1,min,min1,sec,sec1;
printf("enter hour,min and sec of first time");
scanf("%d%d%d",&hour,&min,&sec);
printf("enter hour,min and sec of second time");
scanf("%d%d%d",&hour1,&min1,&sec1);
while(hour<=24 && hour >0 && min<=60 %% min>0 && sec<=60 && sec>0 && hour1<=24 && hour1 > 0 && min1<=60 %% min1>0 && sec1<=60 && sec1>0 )

{
//קריאה לפונקציה
PrintDisplayOfSec(clock(hour,hour1,min,min1,sec,sec1));
else
printf("enter hour,min and sec of first time");
scanf("%d%d%d",&hour,&min,&sec);
printf("enter hour,min and sec of second time");
scanf("%d%d%d",&hour1,&min1,&sec1);
}
PrintDisplayOfSec(clock(hour,hour1,min,min1,sec,sec1));
}

פורסם

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

אתה לא יכול שיהיה לך else בלי if...

פורסם

אין כזו שעה 24 או דקת 60. תשנה את זה. ורשמת שם %% במקום &&.

ארכיון

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

דיונים חדשים