eMatematikas Prisijunk Forumas Užduotys Testai Pradžia

Reikia sukurti programą su pateikta užduotimi ir su freepascal


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

Na ir kokie sunkumai?

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

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).

Prašom
{ *
  * Programuotojas: Edijs Kolesnikovics
  * Skype: EdijusKole
  * }
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

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.

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.

pakeista prieš 11 m

Nori sudalyvauti šioje temoje ir parašyti savo pranešimą? Prisijungti »