algorytm.org

Implementacja w Delphi/Pascal



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Wyznaczanie dnia tygodnia - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 4
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 02 marca 2008 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

dzien_tyg_d/Dzien.dpr:
// Wyznaczanie dnia tygodnia
// www.algorytm.org
// (c)2008 by Tomasz Lubinski

program Dzien;
{$APPTYPE CONSOLE}
uses
  SysUtils;

var
//tablica z nazwami dni tygodnia
dzienNazwa: array [0..6] of String =
        ('poniedzialek', 'wtorek', 'sroda', 'czwartek', 'piatek', 'sobota', 'niedziela');

//tablica z liczbą dni od początku roku (nieprzestepnego) dla kolejnych miesiecy
liczbaDni: array [1..12] of Integer =
	(0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334);

//true jezeli podany rok jest przestepny,
//false w przeciwnym wypadku
function przestepny(rok: Integer): boolean;
begin
        result := (((rok mod 4 = 0) and  (rok mod 100 <> 0)) or (rok mod 400 = 0));
end;

//dla podanej daty wyznacza dzien tygodnia
//0 - poniedziałek, 1 - wtorek, ... 6 - niedziela
function dzienTygodnia(dzien: Integer; miesiac: Integer; rok: Integer): Integer;
var
	dzienRoku, yy, c, g: Integer;
begin
	dzienRoku := dzien + liczbaDni[miesiac];
	if ((miesiac > 2) and (przestepny(rok) = true)) then
		dzienRoku := dzienRoku + 1;

	yy := (rok - 1) mod 100;
	c := (rok - 1) - yy;
	g := yy + (yy div 4);
	result := (((((c div 100) mod 4) * 5) + g) mod 7);
	result := result + dzienRoku - 1;
	result := result mod 7;
end;

var
	m, r, d, wynik: Integer;
begin

	writeln('Podaj dla jakiej daty obliczyc dzien tygodnia.');

	writeln('Podaj dzien:');
	readln(d);
	writeln('Podaj miesiac:');
	readln(m);
	writeln('Podaj rok:');
	readln(r);

	wynik := dzienTygodnia(d, m, r);
	writeln('Dzien tygodnia dla podanej daty to ' + dzienNazwa[wynik]);
end.
Komentarze
photo
-1 # Waclaw 2012-03-07 19:29
dlaczego mi nie działa program
Wyskakuje mi błąd, ze nie znalazł 'result'
CZEKAM NA ODP...
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-1 # Tomasz Lubiński 2012-03-10 14:29
Spróbuj wszystkie result := zamienić na nazwy funkcji wewnatrz których one występują.
To znaczy pierwsze wystąpienie na przestepny := a kolejne na dzienTygodnia :=
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-1 # dzaxx 2012-11-21 01:08
Wydaje mi się że w funkcji dzien tygodnia na samym końcu powinno być jeszcze readln; Aby zatrzymać ekran. Bez tego ekran się od razy zamyka :)
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz