עבור לתוכן

לוח שנה

Featured Replies

פורסם

שלום אני חדש פה:D

אני צריך עזרה... יש לי תרגיל לבית ואני הסתבכתי בו.... :s07::bash:

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

הנה מה שעשיתי:

#include <stdio.h>

#include <conio.h>

int global;

int days_month(int month, int year);

int full_week();

int headline (int month);

int first_week(int day);

int head_day();

int full_week();

int main (){

    int year,jday;

printf ("Please enter the year: ");

scanf("%d",&year);

printf ("Please enter the day of 1st of January: ");

scanf("%d",&jday);

head_day();

first_week(jday);

full_week();

getch () ;

}

int headline (int month){

if (month==1)

printf("January");

else

if (month==2)

printf("Fabuary");

else

if (month==3)

printf("March");

else

if (month==4)

printf("April");

else

if (month==5)

printf("May");

else

if (month==6)

printf("June");

else

if (month==7)

printf("July");

else

if (month==8)

printf("August");

else

if (month==9)

printf("September");

else

if (month==10)

printf("October");

else

if (month==11)

printf("November");

else

if (month==12)

printf("December");

return 0;

}

int first_week(int day){

int a,i;

a=(day-1)*3;

for (i=1;i<=a;i++)

printf(" ");

for (i=1;i<=7-day+1;i++)

printf("%3d",i);

printf ("\n");

global=7-day+1;

return 0;

}

int days_month(int month, int year){

int days;

switch(month){

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12: days=31;

break;

case 4:

case 6:

case 9:

case 11: days=30;

break;

case 2: if (year%4==0)

days=29;

else days=28;

break;

}

return days;

}

int head_day(){

printf("\n  S  M  T  W  T  F  S\n");

return 0;

}

int full_week(){

int i,limit;

for (i=1;i<=7;i++){

    global++;

    printf("%3d",global);

}

return 0;

}

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

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

עכשיו אני אמור להדפיס את שארית הימים בחודש ולחבר את הכל למיין :(:o

כבר שלוש שעות אני יושב על זה ואין לי מושג איך להמשיך.

למישהו יש רעיון אולי איך אני יכול להמשיך? בבקשה זה חשוב

פורסם

לא הבנתי כל כך מה אתה צריך לעשות. רשמת שם אולי "שנה" פעמיים.

פורסם
  • מחבר

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

ולהדפיס לוח שנה

פורסם

אולי תנסה לעשות פונ אחת שמקבלת פרמטר אחד - את היום N, ופשוט מקדמת כל פעם I מסויים, ואם (I+N)%7==0 תדפיס \n.


void month_full(int n, int days)
{
int i;
head_day();
for(i=0;i<n;i++)
printf("\t");
for(;i<days;i++)
{
printf("%d", i);
if(i%7==0)
printf("\n");
else
printf("\t");
}
}

כאן גם הוספתי את מספר הימים בחודש

ושיניתי קצת את המקום שI מתחיל ממנו(ולכן אתה לא חייב לבדוק את I+N אלא רק את I)

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

פורסם
  • מחבר

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

#include <stdio.h>

#include <conio.h>

int global,global1;

int days_month(int month, int year);

int headline (int month);

int first_week(int day);

int head_day();

int full_week(int jday);

int main (){

int year,jday,month,x;

printf ("Please enter the year: ");

scanf("%d",&year);

printf ("Please enter the day of 1st of January: ");

scanf("%d",&jday);

for(month=1;month<=12;month++){

headline (month);

head_day();

first_week(jday);

x= days_month(month, year);

full_week(jday);

}

getch () ;

}

int headline (int month){

if (month==1)

printf("\nJanuary\n");

else

if (month==2)

printf("\nFabuary\n");

else

if (month==3)

printf("\nMarch\n");

else

if (month==4)

printf("\nApril\n");

else

if (month==5)

printf("\nMay\n");

else

if (month==6)

printf("\nJune\n");

else

if (month==7)

printf("\nJuly\n");

else

if (month==8)

printf("\nAugust\n");

else

if (month==9)

printf("\nSeptember\n");

else

if (month==10)

printf("\nOctober\n");

else

if (month==11)

printf("\nNovember\n");

else

if (month==12)

printf("\nDecember\n");

return 0;

}

int first_week(int day){

int a,i;

a=(day-1)*3;

for (i=1;i<=a;i++)

printf(" ");

for (i=1;i<=7-day+1;i++)

printf("%3d",i);

printf ("\n");

global=7-day+1;

return 0;

}

int days_month(int month, int year){

int days;

switch(month){

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12: days=31;

break;

case 4:

case 6:

case 9:

case 11: days=30;

break;

case 2: if (year%4==0)

days=29;

else days=28;

break;

}

global1=days;

return days;

}

int head_day(){

printf("\n S M T W T F S\n");

return 0;

}

int full_week(int jday){

int i,j,c=0;

for (i=9-jday;i<=global1;i++){

printf("%3d",i);

c++;

if(c==7){

printf("\n");

c=0;}

}

printf("\n");

return 0;}

פורסם

ראיתי שאתה מחזיר תמיד 0 מפונ. חשבת אולי להחזיר ערכים אחרים?

פורסם
  • מחבר

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

ואיך אני יכול לדעת מה היום האחרון של החודש שעבר ?

פורסם

במקום להחזיר 0 תחזיר מספר אחר....

פורסם

:lol: :lol:

מצחיק שאתם מנסים לעשות את זה בלי סטראקט

פורסם

#include <stdio.h>

int main()
{
int i, j;
int curDay;

char monthName[12][10] = {"January","February","March","April","May","June","July",
"August","September","October","November","December"};
int daysNo[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

printf("enter day of week for Januray 1st: ");
scanf("%d",&curDay);
// working with 0..6 day numbers
--curDay;

for ( i = 0 ; i < 12 ; i++ )
{
printf("%s\n",monthName[i]);
printf("SUN MON TUE WED THU FRI SAT\n");

// fill with blanks until day of 1st of month
for ( j = 0 ; j < curDay ; j++ )
printf(" ");

for ( j = 0 ; j < daysNo[i] ; j++ )
{
// new week
if ( j > 0 && curDay == 0 )
printf("\n");

printf("%3d ",j+1);
curDay = (curDay+1)%7;

}
printf("\n\n");
}

printf("Thank you for using Calendar, bye bye... \n");
getchar();

return 1;
}

אם יש לך שאלות שאל נא :)

פורסם
  • מחבר

רגע אחי זה מערך מה שעשית לא?(כי לא למדתי עדיין...)

יש לך רעיון איך אני יכול לשמור את היום שנגמר בו החודש שעבר ולהתחיל את החודש אחר כך מאותו היום?

ד"א תודה על התגובות :hat:

פורסם

אם אתה לא משתמש במערך, אתה צריך לעשות 12 caseים :-X

פורסם
  • מחבר

חפיף... ;) אבל מה אני עושה בכל אחד

פורסם

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

אני לא רוטן עליך, אלא על מערכת החינוך. מה זה אמור להיות, תרגיל בבדיקת הידע שלך ב- switch cases? :bash:

יש לך רעיון איך אני יכול לשמור את היום שנגמר בו החודש שעבר ולהתחיל את החודש אחר כך מאותו היום?

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

בקשר לקייסים, אני לא ארשום את זה (עבודה שחורה ומיותרת) אבל אני אסביר לך איך:

מיד בהתחלה של לולאת הfor המרכזית אתה עושה switch על i ובכל מקרה (בין 0 ל- 11) אתה מדפיס את שם החודש המתאים ונותן למשתנה daysNo (נגיד שיש כזה, במקום המערך ההוא) את הערך המתאים לו (מספר הימים בחודש i).

ובלולאת המקוננת אתה משנה את התנאי ל- j < daysNo וזה הכל.

פורסם

או שהוא משתמש בפונ עם הCASEים כמו שהוא עשה בהתחלה.

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

ארכיון

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

דיונים חדשים