Pascal - praca s datumami - pomoze niekto ? pls - do 14.5.

Programovacie jazyky, rady, poradňa...
spero
Amateur
Amateur
Používateľov profilový obrázok
Príspevky: 11
Registrovaný: 11 máj 2007, 10:49

Pascal - praca s datumami - pomoze niekto ? pls - do 14.5.

Príspevok od používateľa spero »

Neviete niekto pomoct ?

Potrebujem pomoct s programom v pascale s tymto zadanim:
"Napiste program, ktory dokaze spocitat pocet dni, ktore uplynuli medzi zadanymi datumami a vypisat den v tyzdni pripadajuci na zadany datum."

dakujem

spero
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

Kód: Vybrať všetko

char d[7][9]={"Pondelka","Utorka","Stredy","Stvrtka","Piatka","Soboty","Nedele"};
int dni[11]={31,28,31,30,31,30,31,31,30,31,30};
int den[2],mes[2],pr,dr,i;
main(){
ini:       clrscr();
printf("Zadaj den a mesiac zaciatku: ");scanf("%i%i",&den[0],&mes[0]);
printf("Zadaj den a mesiac konca: ");scanf("%i%i",&den[1],&mes[1]);
if(mes[0]>mes[1]){clrscr();goto ini;};

pr+=den[0];
for(mes[0]-=2;mes[0]>=0;mes[0]--){
pr+=dni[mes[0]];       };

dr+=den[1];
for(mes[1]-=2;mes[1]>=0;mes[1]--){
dr+=dni[mes[1]];       };

printf("uz uplynulo %i dni",dr-pr);
pr=(pr-1)%7;dr=(dr-1)%7;
printf("\n od %s do %s",d[pr],d[dr]);

}
Mohlo by to byt takto?
:..:ale pondelok 1.1. a kedze je 2007 tak nepriestupny rok.
spero
Amateur
Amateur
Používateľov profilový obrázok
Príspevky: 11
Registrovaný: 11 máj 2007, 10:49

Príspevok od používateľa spero »

ale to vyzera ako C-cko a nie pascal.
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

jul a august maju po 31 dni?
spero
Amateur
Amateur
Používateľov profilový obrázok
Príspevky: 11
Registrovaný: 11 máj 2007, 10:49

Príspevok od používateľa spero »

Velmi pekne dakujem, len sa chcem este spytat, ci to v zmysle toho zadania nemalo fungovat pre hociktory rok (teda aj s udajom roku pri zadavani) ?

... a hodil by sa aj komentar za kodom :) , ja z toho musim este urobit analyzu premennych a strukturogram a do zajtra odovzdat :)

Nemozes do toho kodu doplnit este nejaky komentar, musim to tam mat a z niektorymi vecami mam dost problem (hlavne v spodnej casti).
Napriklad toto:

for q:=0 to 1 do begin
i:=0;
poc[q]:=poc[q]+den[q];
while(mes[q]>1) do begin dec(mes[q]);
if(mes[q]=3) then poc[q]:=poc[q]-2;
poc[q]:=poc[q]+dni;
if(i=0) then inc(i) else dec(i);
end;

end;


dik.

//audiotrack: používaj tlačítko uprav na editáciu vlastných príspevkov aby si nemal viac postov za sebou
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

no nechem spochybňovať juhov algoritmus, ale pri tej úprave čo tam má sa mi to nechce ani pozerať.. skús toto (nerobil som ho ja, ale vyzerá že tam nie je chyba a je prehladnejší)

Kód: Vybrať všetko

program dni;
uses crt;
var mesiace: array [1..12] of integer;
    i,den,mesiac,mesiacc,denn,pocet,pocet_druhy,rozdiel,ktory_den: integer;

begin
clrscr;

mesiace[1]:=31;
mesiace[2]:=28;
mesiace[3]:=31;
mesiace[4]:=30;
mesiace[5]:=31;
mesiace[6]:=30;
mesiace[7]:=31;
mesiace[8]:=31;
mesiace[9]:=30;
mesiace[10]:=31;
mesiace[11]:=30;
mesiace[12]:=31;

writeln('Zadajte prvy datum');
write('Mesiac (1-12): '); readln(mesiac);
write('Den(1-30/31): '); readln(den);
writeln;
writeln('Zadajte druhy datum');
write('Mesiac (1-12): '); readln(mesiacc);
write('Den(1-30/31): '); readln(denn);
writeln;

if mesiac>1 then
   for i:=1 to (mesiac-1) do pocet:=pocet+mesiace[i];
if mesiacc>1 then
   for i:=1 to (mesiacc-1) do pocet_druhy:=pocet_druhy+mesiace[i];

pocet:=pocet+den;
pocet_druhy:=pocet_druhy+denn;
if pocet > pocet_druhy then rozdiel:=pocet-pocet_druhy
   else rozdiel:=pocet_druhy-pocet;

writeln('Medzi datumom ',den,'.',mesiac,'. a datumom ',denn,'.',mesiacc,'. ubehlo ',rozdiel,' dni.');

while (pocet > 7 ) do
      pocet:=pocet-7;
if pocet = 1 then writeln ('Prvy datum pripada na pondelok');
if pocet = 2 then writeln ('Prvy datum pripada na utorok');
if pocet = 3 then writeln ('Prvy datum pripada na stredu');
if pocet = 4 then writeln ('Prvy datum pripada na stvrtok');
if pocet = 5 then writeln ('Prvy datum pripada na piatok');
if pocet = 6 then writeln ('Prvy datum pripada na sobotu');
if pocet = 7 then writeln ('Prvy datum pripada na nedelu');

while (pocet_druhy > 7 ) do
      pocet_druhy:=pocet_druhy-7;
if pocet_druhy = 1 then writeln ('Druhy datum pripada na pondelok');
if pocet_druhy = 2 then writeln ('Druhy datum pripada na utorok');
if pocet_druhy = 3 then writeln ('Druhy datum pripada na stredu');
if pocet_druhy = 4 then writeln ('Druhy datum pripada na stvrtok');
if pocet_druhy = 5 then writeln ('Druhy datum pripada na piatok');
if pocet_druhy = 6 then writeln ('Druhy datum pripada na sobotu');
if pocet_druhy = 7 then writeln ('Druhy datum pripada na nedelu');

readkey;
end.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

V prvom rade by som zmenil inicializáciu poľa mesiace na:

Kód: Vybrať všetko

mesiace: array [1..12] of Integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
(podľa mňa je to tak krajšie)
Ešte by tam bolo vhodné pridať podporu pre priestupné roky.
spero
Amateur
Amateur
Používateľov profilový obrázok
Príspevky: 11
Registrovaný: 11 máj 2007, 10:49

Príspevok od používateľa spero »

velmi pekne vam dakujem za ochotu :)
Napísať odpoveď