[Pascal] Rok przestępny

kominekl
Użytkownik
Użytkownik
Posty: 40
Rejestracja: 23 wrz 2012, o 14:52
Płeć: Mężczyzna
Lokalizacja: Iłża
Podziękował: 3 razy

[Pascal] Rok przestępny

Post autor: kominekl »

Witam. Proszę o pomoc w modyfikacji kodu źródłowego. Kod wydaje się OK, ale w dziesięciu próbach, jedna wychodzi niepoprawnie (bynajmniej według MAIN).
program przestepnosc;

var r: Integer;

begin

Read(r);
if r mod 4 = 0 then
Writeln('TAK')
else
Writeln('NIE');
if (r mod 100 = 0) and (r mod 400 <> 0) then
Writeln('NIE');

end.
Wynik MAIN : 91/100 . niby OK, ale jednak ten niesmak pozostaje ;) . Może Wasze oczy są sprytniejsze na ten moment? :) .
Ostatnio zmieniony 25 mar 2013, o 19:10 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
mateuszl95
Użytkownik
Użytkownik
Posty: 97
Rejestracja: 14 paź 2009, o 20:11
Płeć: Mężczyzna
Lokalizacja: Kruszwica
Podziękował: 17 razy
Pomógł: 8 razy

[Pascal] Rok przestępny

Post autor: mateuszl95 »

Przeanalizuje liczbe 2100:

if 2100 mod 4 = 0 then
Writeln('TAK')

Niezależnie od tego co jest dalej , to ten program jak wypuszczony ze smyczy już napisze "TAK"

Najprościej myśle odwrócić kolejność, czyli najpierw niech sprawdzi podzielnosc przez 400, potem przez 100 i na koncu przez 4.
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[Pascal] Rok przestępny

Post autor: witekkq »

najprościej zapisać to jako jeden warunek
kominekl
Użytkownik
Użytkownik
Posty: 40
Rejestracja: 23 wrz 2012, o 14:52
Płeć: Mężczyzna
Lokalizacja: Iłża
Podziękował: 3 razy

[Pascal] Rok przestępny

Post autor: kominekl »

mateuszl95 pisze:Przeanalizuje liczbe 2100:

if 2100 mod 4 = 0 then
Writeln('TAK')

Niezależnie od tego co jest dalej , to ten program jak wypuszczony ze smyczy już napisze "TAK"

Najprościej myśle odwrócić kolejność, czyli najpierw niech sprawdzi podzielnosc przez 400, potem przez 100 i na koncu przez 4.
Aż z ciekawości sprawdziłem, jak wygląda sytuacja podczas odwróconej kolejności i tak, jak myślałem - wynik 91/100 :D .
witekkq pisze:najprościej zapisać to jako jeden warunek :)
Mógłbyś to pokazać? Nie widzę tu takiej możliwości, jeśli oczywiście dobrze rozumiem Twój tok myślenia ;) .
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[Pascal] Rok przestępny

Post autor: witekkq »

Nie znam się kompletnie na Pascalu..

Kod: Zaznacz cały

program przestepnosc;
var r: Integer;
begin
Read(r);
if ( ((r mod 4 = 0) AND (r mod 100 <> 0)) OR (r mod 400 =0))   then
Writeln('TAK')
else
Writeln('NIE');
end.
@EDITED
kominekl
Użytkownik
Użytkownik
Posty: 40
Rejestracja: 23 wrz 2012, o 14:52
Płeć: Mężczyzna
Lokalizacja: Iłża
Podziękował: 3 razy

[Pascal] Rok przestępny

Post autor: kominekl »

witekkq pisze:Nie znam się kompletnie na Pascalu..

Kod: Zaznacz cały

program przestepnosc;
var r: Integer;
begin
Read(r);
if ( ((r mod 4 = 0) AND (r mod 100 <> 0)) OR (r mod 400 =0))   then
Writeln('TAK')
else
Writeln('NIE');
end.
@EDITED
Kodu jeszcze nie kompilowałem, ale już na oko widzę, że będzie OK ;) . dzięki wielkie. Jeśli tylko możesz mi jeszcze powiedzieć, co z nawiasami. Otóż zawsze (a bynajmniej tyle ile pamiętam - 4 lata temu Pascal był w ruchu u mnie) miałem problem z nawiasami przy spójnikach logicznych. Możesz mi wytłumaczyć zasadę ich wstawiania?

PS: Czasem miło sobie co nieco przypomnieć. Otóż robiłem tak, jak ty poprzednio i mi nie wychodziło. teraz już wiem czemu. Spójniki And i Or nie są równorzędne pod względem pierwszeństwa ;) . A więc zwracam sobie honor - nie ubliżając Twojej wiedzy i spostrzegawczości ;) .
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[Pascal] Rok przestępny

Post autor: witekkq »

Co z nawiasami?
Nie wiem, z tego co dzisiaj przeczytałem to każde wyrażenie musi być w nawiasie.

Kod: Zaznacz cały

(cos or cos)
a reszta normalnie grupowanie

Kod: Zaznacz cały

if(      ( (to and to) and jeszcze_to) or (lub_to)     )
nawet jakbybyły to też lepiej grupować nawiasami... wtedy ma się pewność.
kominekl
Użytkownik
Użytkownik
Posty: 40
Rejestracja: 23 wrz 2012, o 14:52
Płeć: Mężczyzna
Lokalizacja: Iłża
Podziękował: 3 razy

Pascal. Przestępność.

Post autor: kominekl »

witekkq pisze:Co z nawiasami?
Nie wiem, z tego co dzisiaj przeczytałem to każde wyrażenie musi być w nawiasie.

Kod: Zaznacz cały

(cos or cos)
a reszta normalnie grupowanie

Kod: Zaznacz cały

if(      ( (to and to) and jeszcze_to) or (lub_to)     )
nawet jakbybyły to też lepiej grupować nawiasami... wtedy ma się pewność.
Czyli nasza wiedza co do nawiasów jest taka sama. Też zawsze tak postępowałem . Dobra. Jestem 27 godzin bez snu, myślę, że już czas dać sobie spokój chwilowy . Trzymaj się i dziękuję za pomoc.

PS: Podziękowania również dla kolegi wyżej za chęci .
ODPOWIEDZ