Pokaż wyniki 1 do 3 z 3

Temat: [perl] wieczny kalendarz

  1. #1
    glt
    glt jest offline
    Zarejestrowany
    Oct 2009
    Postów
    1

    Domyślnie [perl] wieczny kalendarz

    Witam Państwa,

    Po poszukiwaniach na google i na tym forum, nie znalazłszy odpowiedzi, postanowiłem się zarejestrować i napisać posta z pytaniem. Jestem studentem i początkującym programistą Perl. Próbuję napisać tzw. "Wieczny kalendarz", czyli program który po otrzymaniu daty zwróci w wyniku dzień tygodnia. Próbuję przerobić skrypt dostępny na wikipedii pod adresem: http://pl.wikipedia.org/wiki/Wieczny_kalendarz Oto co udało mi się napisać dotychczas:
    Kod php:
    #!/usr/bin/perl

    @week = ( 
        
    "Niedziela",
        
    "Poniedzialek"
        
    "Wtorek"
        
    "Sroda"
        
    "Czwartek"
        
    "Piatek"
        
    "Sobota"
    );

    @
    mon = (011256234014);

    print 
    "Prosze podac date (w formacie dd.mm.rrrr): ";
    $data = <STDIN>;
    @
    data split(/\./, $data);

    $d $data[0];
    $m $data[1];
    $y $data[2];
    # gregorianski czy julianski?
    $s = ($y>1582) ? 1;

    # przestepny?
    $leap = ($s==&& $y%4==|| $s!=&& ($y%4==&& $y%100!=|| 
    (
    $y%400)==0)) ? 0;

    $a = ($y%100)%28;
    $b 
    (
    $s==0)*(4+($y%700)/100+2*($a/4)+6*((!$leap)*(1+($a%4))+($leap)*((9+$m)/12)))%7+($s!=0)*(2*(1+($y%400)/100+($a/4))+6*((!$leap)*(1+($a%4))+($leap)*((9+$m)/12)))%7;
    $c = (3*$mon[$m-1]+$d)%7;
    $N = ($c+6*$b)%7;

    print 
    "a = ".$a."\n".
        
    "b = ".$b."\n".
        
    "c = ".$c."\n".
        
    "N = ".$N."\n";

    print 
    $week[$N]."\n"
    Gdy wpisuję np. 14.10.2009 (data dodania tego posta) to w wyniku otrzymuję: Wtorek (Powinno byc Sroda), natomiast np. 1.1.2008 zwraca: Sroda (Powinien Wtorek)... Jeśli ktoś mógłby naprowadzić mnie na właściwy trop byłbym wdzięczny.

    Pozdrawiam!

  2. #2
    Zarejestrowany
    Jan 2010
    Postów
    2

    Domyślnie

    Może komuś się przyda poprawiłem skrypt, nie można podawać daty po . ponieważ wtedy funkcja split zle działa, i dlatego a bylo zawsze rowne 0 i zle liczyło wszystko. oto kod działający:

    Kod php:
    #!/usr/bin/perl

    @week = ( 
        
    "Niedziela",
        
    "Poniedzialek"
        
    "Wtorek"
        
    "Sroda"
        
    "Czwartek"
        
    "Piatek"
        
    "Sobota"
    );

    @
    mon = (011256234014);

    print 
    "Prosze podac date (w formacie dd.mm.rrrr): ";
    $date = <STDIN>;
    @
    data split(/-/, $date);

    $d $data[0];
    $m $data[1];
    $y $data[2];


    # gregorianski czy julianski?
        
    if($y>1582){
             
    $s=1
        
    }
        else {
            
    $s=0
        
    }

    # przestepny?
    $leap = ($s==&& $y%4==|| $s!=&& ($y%4==&& $y%100!=|| 
    (
    $y%400)==0));



    $a = ($y 100);
    $b 
    (
    $s==0)*(4+($y%700)/100+2*($a/4)+6*((!$leap)*(1+($a%4))+($leap)*((9+$m)/12)))%7+($s!=0)*(2*(1+($y%400)/100+($a/4))+6*((!$leap)*(1+($a%4))+($leap)*((9+$m)/12)))%7;
    $c = (3*$mon[$m-1]+$d)%7;
    $N = ($c+6*$b)%7;


    print 
    "a = ".$a."\n".
        
    "b = ".$b."\n".
        
    "c = ".$c."\n".
        
    "N = ".$N."\n";

    print 
    $week[$N]."\n"

  3. #3
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Kod:
    print "Prosze podac date (w formacie dd.mm.rrrr): ";
    $date = <STDIN>;
    @data = split(/-/, $date);
    to nie ma prawa dzialac - zmieniajac kod zmieniaj instrukcje dla uzytkownika... a cala sztuczka aby pierwotny kod zadzialal to:

    Kod:
    print "Prosze podac date (w formacie dd.mm.rrrr): ";
    $date = <STDIN>;
    @data = split(/\./, $date);
    musisz przed kropka dac \ bo sama kropka oznacza dowolny znak a zapis \. w regexach oznacza doslownie kropke
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

Podobne wątki

  1. [Perl] Kurs Perl - cz.1 - wprowadzenie i podstawy
    By TQM in forum Perl/Python/TCL/Prolog
    Odpowiedzi: 22
    Autor: 10-27-2014, 00:50
  2. Odpowiedzi: 18
    Autor: 07-14-2009, 11:55
  3. Odpowiedzi: 31
    Autor: 05-20-2008, 17:01
  4. Kalendarz w PHP - rozpoznawanie dni tygodnia
    By Dominik in forum PHP/CGI/ASP/JSP/J2EE
    Odpowiedzi: 4
    Autor: 06-24-2006, 18:48

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52