Reikia sukurti programą su pateikta užduotimi ir su freepascal
Altair (+2)
Padėkite kas galit... man reikėtu sukurti programa,, štai užduotis -> Pirmosios olimpines žaidynes įvyko 1896 metais ir toliau organizuojamos kas ketveri metai. Jei žaidynės neįvyksta, tie metai vis tiek laikomi olimpiniais, o žaidynėms skiriamas eilės numeris. Parašykite programą,kuri surastų m-ųjų metų olimpinių žaidynių numerį n. Jei metai neolimpiniai, turi būti spausdinama ,,Metai neolimpiniai" Pasitikrinkite: Kai m=1904, turi būti spausdinama: n=3. Kai m=2005, turi būti spausdinama: Metai neolimpiniai. :D
valdas3 (+1276)
Na ir kokie sunkumai?
Altair (+2)
tiesiog nemoku parašyt programos, aš kaip ir pradedantis :) aš esme suprantu, tik nežinau kaip parašyt, kad butu kas ketvirti metai ir kaip kad kelinti, ar tai antros ar pirmos olimpines žaidynes.........
pakeista prieš 11 m
valdas3 (+1276)
Na įvairiai galima spręsti, galima nesukant per daug galvos panaudoti kokį nors ciklą ir prie 1896 pridėdinėti 4 iki kol gausi skaičių didesnį arba lygų už duotuosius metus, na ir tada gauti rezultatą paprasta. Galima šiek tiek matematiškai pagalvoti, kad jei metai olimpiniai, tai jie dalinasi iš 4 be liekanos, o olimpinių žaidynių numeris yra tiesiog metu skirtumas tarp pirmųjų ir duotųjų olimpinių žaidynių padalintas iš 4 ir dar plius vienas (tik aišku, jei taip gausi kokį neigiamą skaičių, tai kažkas negerai turbūt).
function ArMetaiOlimpiniai(const AMetai: integer; out AEilesNumeris: integer): Boolean; const PIRMUJU_ZAIDINIU_METAI = 1896; var _EilesNumeris: integer; _Metai: integer; begin Result := False;
// Ankstesni metai negalejo buti zaidiniu metai if AMetai < PIRMUJU_ZAIDINIU_METAI then Exit;
// Ar tai nelyginis skaicius if Odd(AMetai) then Exit;
_Metai := PIRMUJU_ZAIDINIU_METAI; _EilesNumeris := 1; while _Metai < AMetai do begin Inc(_EilesNumeris); Inc(_Metai, 4); end;
if _Metai <> AMetai then Exit;
AEilesNumeris := _EilesNumeris; Result := True; end;
var _Komanda: string; _Metai: integer; _EilesNumeris: integer;
begin try WriteLn('Programa pradeda darba.'); WriteLn('Darbo pabaigai ivesti "exit".');
while LowerCase(_Komanda) <> 'exit' do begin WriteLn('Iveskite metus: ');
ReadLn(_Komanda); if TryStrToInt(_Komanda, _Metai) then begin if not ArMetaiOlimpiniai(_Metai, _EilesNumeris) then WriteLn('Metai neolimpiniai') else WriteLn('n=' + IntToStr(_EilesNumeris)); end; end; except on E: Exception do WriteLn(E.ClassName, ': ', E.Message); end;
end.
Anonimas07 (+180)
Netikrinau Edijaus kodo, tačiau, vien vizualiai peržvelgus, matosi, kad jis, kaip pradedančiajam, yra pernelyg sudėtingas. Prisimenu, kad kai aš gavau šį uždavinį pirmąkart, nieko nežinojau nei apie funkcijas, nei apie ciklus ar dar sudėtingesnes struktūras.
Paprastas kodas atrodytų šitaip: program OlimpiniuZaidyniuNumeris; var m, a, a2, a3: Integer; begin Write ('Įveskite metus: '); ReadLn (m); a := m - 1896; a2 := a mod 4; If (m >= 1896) and (a2 = 0) then begin a3 := a div 4 + 1; WriteLn ('Olimpinių žaidynių numeris: ', a3); end else WriteLn ('Metai ne olimpiniai.'); ReadLn; end.