Thread View: pl.comp.programming
6 messages
6 total messages
Started by chr... Chris Labanowski
Wed, 08 May 1996 00:00
Pomocy! Jak obliczyc nazwe dnia?
Author: chr... Chris Labanowski
Date: Wed, 08 May 1996 00:00
Date: Wed, 08 May 1996 00:00
9 lines
710 bytes
710 bytes
Hej! Mam taki problem...potrzebuje przeliczyc date na nazwe dnia, to znaczy znalezc jaki dzien, byl np. 16 grudnia 1968 (sroda, czwartek?, a moez piatek?) Kiedys byl taki algorytm, ale ostatni raz widzialem go z piec lat temu i za cholere nie pamietam jak to dzialalo....Moze ktos wie? Bardzo prosze o pomoc o ile to mozliwe.... Z gory dzieki Krzysztof Labanowski
Re: Pomocy! Jak obliczyc nazwe dnia?
Author: rG... Ryszard Glab
Date: Wed, 08 May 1996 00:00
Date: Wed, 08 May 1996 00:00
35 lines
1568 bytes
1568 bytes
In article <4mpfd6$9...@bilbo.nask.org.pl>,
chr...@gazeta.pl (Chris Labanowski) wrote:
>Mam taki problem...potrzebuje przeliczyc date na nazwe dnia, to znaczy
>znalezc jaki dzien, byl np. 16 grudnia 1968 (sroda, czwartek?, a moez piatek?)
Algorytm sciagniety z instrukcji obslugi kalkulatora
Texas Instruments TI-58C :)
(procedurka jest w Clipperze ale sadze ze jest czytelna)
/*
nD -dzien miesiaca
nM -numer miesiaca
nR -rok
*/
FUNCTION DzienTygodnia( nD, nM, nR )
LOCAL nDoba
STATIC aDni:={ "Sobota", "Niedziela", "Poniedzialek", "Wtorek", ;
"Sroda", "Czwartek", "Piatek" }
IF( nM <= 2 )
nDoba =365*nR +nD +31*(nM-1) + INT((nR-1)/4) -;
INT( 3/4 * INT( (nR-1)/100 +1 ) )
ELSE
nDoba =365*nR + nD +31*(nM-1) - INT( 0.4*nM +2.3 ) +;
INT(nR/4) - INT( 3/4 * (INT(nR/100)+1) )
ENDIF
nDoba +=INT( -nDoba / 7 ) * 7
// 0 -sobota
// 1 -niedziela
// 6 -piatek
RETURN( aDni[ nDoba+1 ] )
----------------------=-----------------------=-----------------------
r(ycho)GLAB | rg...@maloka.waw.pl | Warsaw, Poland
Re: Pomocy! Jak obliczyc nazwe dnia?
Author: Michal.J... Michal Jankowski
Date: Wed, 08 May 1996 00:00
Date: Wed, 08 May 1996 00:00
47 lines
1962 bytes
1962 bytes
>>>>> "Chris" == Chris Labanowski <chr...@gazeta.pl> writes:
Chris> Hej! Mam taki problem...potrzebuje przeliczyc date na nazwe
Chris> dnia, to znaczy znalezc jaki dzien, byl np. 16 grudnia 1968
Chris> (sroda, czwartek?, a moez piatek?) Kiedys byl taki algorytm,
Chris> ale ostatni raz widzialem go z piec lat temu i za cholere nie
Chris> pamietam jak to dzialalo....Moze ktos wie? Bardzo prosze o
Chris> pomoc o ile to mozliwe....
No przeciez to proste - trzeba policzyc liczbe dni od poczatku swiata
i wziac modulo 7...
Napisane na kolanie, ale chyba dziala (wylacznie dla kalendarza gregorianskiego):
--------------------------------------------------------------------
int mon[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
char* tyd[] = {"Niedziela", "Poniedzialek", "Wtorek", "Sroda", "Czwartek", "Piatek", "Sobota"};
main(int argc, char *argv[])
{
int y,m,d,i;
long days;
if (argc<3) {
printf("Usage: %s <y> <m> <d>\n", argv[0]);
return 1;
}
y = atoi(argv[1]);
m = atoi(argv[2]);
d = atoi(argv[3]);
if ((y%400 == 0) || (y%100 != 0) && (y%4 == 0))
mon[2]++;
y--;
days = y*365L+y/4-y/100+y/400 + d;
y++;
for (i = 1; i<m; i++)
days += mon[i];
printf("%04d-%02d-%02d: %s\n", y, m, d, tyd[days%7]);
return 0;
}
--------------------------------------------------------------------
Albo po prostu
% date -d 1996-5-8 +%A
ale do tego to trzeba miec program 'date' rozumiejacy opcje '-d', a
roznie z tym bywa.
MJ
Re: Pomocy! Jak obliczyc nazwe dnia?
Author: Michal.J... Michal Jankowski
Date: Wed, 08 May 1996 00:00
Date: Wed, 08 May 1996 00:00
18 lines
1048 bytes
1048 bytes
>>>>> "Jarek" == Jarek Lis <l...@okapi.ict.pwr.wroc.pl> writes: Jarek> A paszol won z takim rozwiazaniem. Co bedzie jak delikwent Jarek> wywola procedure poraz drugi? Zwlaszcza main() sie doskonale nadaje do wywolania po raz drugi. 8-) Jarek> albo jak to bedzie dzialalo w srodowisku wielozadaniowym? AFAIK, Unix jest srodowiskiem wielozadaniowym. Dziala dobrze. 8-) Jarek> Ale generalnie zgrabna procedurka. Moja dziekowac. Napisane naprawde na kolanie - z tym, ze podobne rzeczy przerabialem nie raz ze studentyma na zajeciach. MJ
Re: Pomocy! Jak obliczyc nazwe dnia?
Author: l... Jarek Lis
Date: Wed, 08 May 1996 00:00
Date: Wed, 08 May 1996 00:00
40 lines
1885 bytes
1885 bytes
Michal Jankowski (Michal.J...@fuw.edu.pl) wrote:
: >>>>> "Chris" == Chris Labanowski <chr...@gazeta.pl> writes:
: Chris> Hej! Mam taki problem...potrzebuje przeliczyc date na nazwe
: Chris> dnia, to znaczy znalezc jaki dzien, byl np. 16 grudnia 1968
:
: No przeciez to proste - trzeba policzyc liczbe dni od poczatku swiata
: i wziac modulo 7...
: Napisane na kolanie, ale chyba dziala (wylacznie dla kalendarza gregorianskiego):
: --------------------------------------------------------------------
: int mon[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
: char* tyd[] = {"Niedziela", "Poniedzialek", "Wtorek", "Sroda", "Czwartek", "Piatek", "Sobota"};
: main(int argc, char *argv[])
: {
: int y,m,d,i;
: long days;
:
: if (argc<3) {
: printf("Usage: %s <y> <m> <d>\n", argv[0]);
: return 1;
: }
: y = atoi(argv[1]);
: m = atoi(argv[2]);
: d = atoi(argv[3]);
:
: if ((y%400 == 0) || (y%100 != 0) && (y%4 == 0))
: mon[2]++;
^^^^^^^^^^^
A paszol won z takim rozwiazaniem. Co bedzie jak delikwent wywola procedure
poraz drugi? albo jak to bedzie dzialalo w srodowisku wielozadaniowym?
Ale generalnie zgrabna procedurka.
P.S. Widzialem cos takiego jeszcze pod Basic na 8-bitowce, i najbardziej
zaskakujaca operacja bylo w srodku mnozenie przez 2.3 Za to wyliczenie
miescilo sie w jednej linii programu. Niestety - wiecej juz nie
pamietam.
Jarek.
Re: Pomocy! Jak obliczyc nazwe dnia?
Author: paw... Krzysztof Pawlik
Date: Thu, 09 May 1996 00:00
Date: Thu, 09 May 1996 00:00
26 lines
1035 bytes
1035 bytes
Chris Labanowski (chr...@gazeta.pl) wrote:
: Mam taki problem...potrzebuje przeliczyc date na nazwe dnia, to znaczy
: znalezc jaki dzien, byl np. 16 grudnia 1968 (sroda, czwartek?,
: a moez piatek?)
Jeszcze jeden algorytm, w Pascalu:
var
a,b,c:real;
rok,mies,dzien:word;
dzien_tyg:byte;
[......]
a:=rok+(mies-2.85)/12;
b:=trunc(a/100);
c:=trunc(trunc(trunc(367*a)-1.75*trunc(a)+dzien)-0.75*b)+1721115;
dzien_tyg:=trunc(c+1-trunc((c+1)/7)*7);
[......]
gdzie dzien_tyg oznacza:
0=Niedziela, 1=Poniedzialek, ... , 6=Sobota.
Krzychu
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads