Programación General > Pascal

 Ayuda Con Calendario

(1/1)

moyo18:
bueno tengo q hacer un calendario, hasta el momento ya tengo el primer dia del a;o q es el q necesito ya el a;o bisiesto.
el problema esta asi en el a;o 1752 septiembre solo tiene 19 dias
empieza 1,2,14,15 en adelante entonces no se como imprimir en pntalla los dias d el a;o, bueno rodos los dias d todos los a;o, nose como podria ahcerlo.
el programaa tiene q salir q pida  el a;o q quiere saber y q muestre los meses d ese a;o, tiene q salir d 4 meses en 4

enero        julio
febrero     agosto
marzo      sept
abril         oct
mayo       nom
junio        dic

en ese orden pero q se muetren 4 y al bajar salgan los otros 4 y asi.

ya tengo todo hecho solo ese es mi problema como mostrar los dias en pantalla empezando desd el 1 d enero haste el 31 d dic.

ya tengo q dia caeria el prmer dia del a;o solo esta q meta los dias en el calendario pero no se como.

aki les dejo el codigo q llevo, tengo problemas con el array para imprimir en pantalla, casi no puedo usarlos.



--- Código: Text ---PROGRAM calendar; { MoYo } USES CRT; CONST MaxRows = 108;BlankCell = '    '; TYPE RowRange = 1..MaxRows; WeekDaysType = (sunday, monday, tuesday, wednesday, thursday,                 friday, saturday );MonthsYearType = (january, february, march, april, may, june,                   july, august, september, october, november, december); CellType = string[4];YearRange = 1400..2600; CalendarArrayType = array [1..MaxRows,WeekDaysType] of CellType;  VAR YearChosen : YearRange; CalendarArray : CalendarArrayType; CurrentDay : weekdaystype; Rows,Columns : BYTE; Z, A, B, C, M : INTEGER; {******************************************************} PROCEDURE Initialize (VAR CalendarArray : CalendarArrayType;                           MaxRows       : RowRange;                           BlankCell     : CellType);   VAR     Rows       : RowRange;    Columns    : WeekDaysType;     CurrentRow       : RowRange;    CurrentColumn    : WeekDaysType;     CurrentMonth : MonthsYearType;   BEGIN  { Initialize }   CLRSCR;   FOR Rows := 1 to MaxRows do     BEGIN         FOR Columns := sunday to saturday do          BEGIN              CalendarArray [ Rows, Columns ] := BlankCell;           END;       END;    { Name of the months }    CurrentRow := 1;    CalendarArray [ CurrentRow, Sunday ] := 'Janu';   CalendarArray [ CurrentRow, Monday ] := 'ary ';    INC (CurrentRow, 9);    CalendarArray [ CurrentRow, Sunday ] := 'Febr';   CalendarArray [ CurrentRow, Monday ] := 'uary';    INC (CurrentRow, 9);    CalendarArray [ CurrentRow, Sunday ] := 'Marc';   CalendarArray [ CurrentRow, Monday ] := 'h   ';    INC (CurrentRow, 9);    CalendarArray [ CurrentRow, Sunday ] := 'Apri';   CalendarArray [ CurrentRow, Monday ] := 'l   ';    INC (CurrentRow, 9);    CalendarArray [ CurrentRow, Sunday ] := 'May ';   CalendarArray [ CurrentRow, Monday ] := '    ';    INC (CurrentRow, 9);    CalendarArray [ CurrentRow, Sunday ] := 'June';   CalendarArray [ CurrentRow, Monday ] := '    ';    INC (CurrentRow, 9);    CalendarArray [ CurrentRow, Sunday ] := 'July';   CalendarArray [ CurrentRow, Monday ] := '    ';    INC (CurrentRow, 9);    CalendarArray [ CurrentRow, Sunday ] := 'Augu';   CalendarArray [ CurrentRow, Monday ] := 'st  ';    INC (CurrentRow, 9);    CalendarArray [ CurrentRow, Sunday  ] := 'Sept';   CalendarArray [ CurrentRow, Monday  ] := 'embe';   CalendarArray [ CurrentRow, Tuesday ] := 'r   ';    INC (CurrentRow, 9);    CalendarArray [ CurrentRow, Sunday ] := 'Octo';   CalendarArray [ CurrentRow, Monday ] := 'ber ';    INC (CurrentRow, 9);    CalendarArray [ CurrentRow, Sunday ] := 'Nove';   CalendarArray [ CurrentRow, Monday ] := 'mber';    INC (CurrentRow, 9);    CalendarArray [ CurrentRow, Sunday ] := 'Dece';   CalendarArray [ CurrentRow, Monday ] := 'mber';     { End of the name of the months }    { Name of the days }    CurrentRow := 2;     FOR CurrentMonth := January TO December Do     BEGIN        CalendarArray [ CurrentRow, Sunday    ] := 'Sun ';        CalendarArray [ CurrentRow, Monday    ] := 'Mon ';        CalendarArray [ CurrentRow, Tuesday   ] := 'Tue ';        CalendarArray [ CurrentRow, Wednesday ] := 'Wed ';        CalendarArray [ CurrentRow, Thursday  ] := 'Thu ';        CalendarArray [ CurrentRow, Friday    ] := 'Fri ';        CalendarArray [ CurrentRow, Saturday  ] := 'Sat ';         INC (CurrentRow, 9);     END; END;   { Initialize }     {  Test Code    FOR Rows := 1 to maxrows DO        BEGIN       FOR Columns := Sunday TO Saturday DO            WRITE (CalendarArray [ Rows, Columns ]:4);       WRITELN;       END;    READKEY;   } {************************************************************} {************************************************************} PROCEDURE  GetTheYear (VAR YearChosen : YearRange ); BEGIN    { GetTheYear }    REPEAT    WRITE ('INTRODUCE THE YEAR (1400..2600):'); READLN(YearChosen);    UNTIL (YearChosen >= 1400) AND (YearChosen <= 2600)  END;     { GetTheYear }   {***********************************************************}   {***********************************************************} Procedure FillCalendarArray ( VAR CalendarArray : CalendarArrayType;                                  YearChosen : YearRange;                                  MaxRows : RowRange);    { LEAP YEAR }   FUNCTION IsLeapYear (YearChosen : YearRange) : BOOLEAN;   BEGIN     IsLeapYear := ((YearChosen MOD 4) = 0) AND ((YearChosen MOD 100) <> 0) OR                     ((YearChosen MOD 400) = 0)  END;   { END LEAP YEAR }     PROCEDURE FirstDay (yearChosen : YearRange;                      VAR Z : Integer);      BEGIN { Zeller's Congruence }      { IGNORE THIS PART, THIS PART IS TO KNOW THE OTHERS DAYS OF THE YEAR        IF ( M<=2 ) THEN          A:= 1+10;         B:= (YearChosen-1) MOD 100;         C:= (YearChosen-1) DIV 100;  }        IF ( M>=3) THEN         BEGIN            A:= 1-2;            B:= YearChosen MOD 100;            C:= YearChosen DIV 100;         END;     IF YearChosen = 1400 THEN        Z := 5;     {*****************************************************************}      IF (YearChosen >= 1401) AND (YearChosen <= 1500) THEN       BEGIN          Z := (702 + ((26*A) -2) DIV 10 + 1 + B + (B DIV 4) + (C DIV 4) - (2 * C )) MOD 7;           IF ((YearChosen MOD 4) = 0) AND ((YearChosen MOD 100) <> 0) OR ((YearChosen MOD 400) = 0) THEN              Z := Z-1           ELSE             Z:= Z-1;          END;       {******************************************************************}      IF (YearChosen >= 1501) AND (YearChosen <= 1700) THEN       BEGIN          Z := (703 + ((26*A) -2) DIV 10 + 1 + B + (B DIV 4) + (C DIV 4) - (2 * C )) MOD 7;           IF ((YearChosen MOD 4) = 0) AND ((YearChosen MOD 100) <> 0) OR ((YearChosen MOD 400) = 0) THEN              Z := Z-1           ELSE             Z := Z-1;          END;      {*********************************************************}        IF (YearChosen >= 1701) AND (YearChosen <= 1751) THEN         BEGIN            Z := (704 + ((26*A) -2) DIV 10 + 1 + B + (B DIV 4) + (C DIV 4) - (2 * C )) MOD 7;             IF ((YearChosen MOD 4) = 0) AND ((YearChosen MOD 100) <> 0) OR ((YearChosen MOD 400) = 0) THEN                Z := Z-1             ELSE               Z := Z-1;           END;      {********************************************************}      IF YearChosen = 1748 THEN         Z:= 6;       {********************************************************}      IF YearChosen = 1752 THEN         Z:= 4;     {*************************************************************}      IF (YearChosen >= 1753) AND (YearChosen <= 2600) THEN        BEGIN          Z:= (700 + ((26*A) -2) DIV 10 + 1 + B + (B DIV 4) + (C DIV 4) - (2 * C )) MOD 7;            IF ((YearChosen MOD 4) = 0) AND ((Yearchosen MOD 100) <> 0) OR ((Yearchosen MOD 400) = 0) THEN               Z:= Z - 1;         END;     END; { Zeller's Congruence } {***************************************************************************}    { days of the months }    FUNCTION Days (VAR Months :  Monthsyeartype; YearChosen : YearRange ) : INTEGER;    BEGIN    CASE Months OF      january : Days := 31;     february : BEGIN                    IF ((YearChosen MOD 4) = 0) AND ((YearChosen MOD 100) <> 0) OR                       ((YearChosen MOD 400) = 0) THEN                       Days := 29                    ELSE                       Days := 28;                 END;     march  : Days := 31;     april  : Days := 30;     may    : Days := 31;     june   : Days := 30;     july   : Days := 31;     august : Days := 31;     september :  BEGIN                     IF YearChosen = 1752 THEN                        Days := 19                     ELSE                        Days := 30;                  END;     october : Days := 31;     november : Days := 30;     december : Days :=31;    END;   END;   { end days of the months }   {begin the fuction }    FUNCTION CurrentDay ( Z : INTEGER ) : WeekDaysType;       BEGIN       CASE Z OF        0 : CurrentDay := saturday;       1 : CurrentDay := sunday;       2 : CurrentDay := monday;       3 : CurrentDay := tuesday;       4 : CurrentDay := wednesday;       5 : CurrentDay := thursday;       6 : CurrentDay := friday;        END;        { end of the function } BEGIN  { FillCalendarArray } FirstDay (YearChosen, Z); END;   { END FillCalendarArray }      { GET THE FIRST DAY OF THE YEAR   IF (year < 2000) THEN          FOR Firstday := (2000 - 1) DOWNTO year DO       ELSE         FOR Firstday := 2000 TO (year - 1) DO            BEGIN              END;       END OF THE FIRST DAY OF THE YEAR }    {*****************************************************}   {*****************************************************} { aki es dond tengo q ver lo d los numeros pero no se como hacer para q salgan en pantalla  con los meses y los dias d la semana}    PROCEDURE DisplayCalendar (VAR CalendarArray : CalendarArrayType                                 );     VAR     Daysofyear : INTEGER;     BEGIN     FOR Daysofyear :=  1 TO 31 DO      END;  {*****************************************************}   {*****************************************************} BEGIN { MAIN PROGRAM }     Initialize ( CalendarArray, MaxRows, BlankCell);    GetTheYear ( YearChosen );    FillCalendarArray ( CalendarArray,YearChosen, MaxRows   );   {  esta parte me falta  DisplayMonths ( CalendarArray );  }  END.   { MAIN PROGRAM } 

a ver si me pueden ayudar a ver como seria un kodigo d for para imprimir en la pantalla, despues yo lo temino

Navegación

[0] Índice de Mensajes

Ir a la versión completa