🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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?
#653
Author: chr... Chris Labanowski
Date: Wed, 08 May 1996 00:00
9 lines
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?
#654
Author: rG... Ryszard Glab
Date: Wed, 08 May 1996 00:00
35 lines
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?
#655
Author: Michal.J... Michal Jankowski
Date: Wed, 08 May 1996 00:00
47 lines
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?
#656
Author: Michal.J... Michal Jankowski
Date: Wed, 08 May 1996 00:00
18 lines
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?
#657
Author: l... Jarek Lis
Date: Wed, 08 May 1996 00:00
40 lines
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?
#658
Author: paw... Krzysztof Pawlik
Date: Thu, 09 May 1996 00:00
26 lines
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