Programom zobrazí všetky možnosti (kombinácie), ako bolo možné dosiahnuť aktuálny bodový zisk z jednotlivých pretekov

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Category: KMP (Club of young programmers)

Author: Radovan Slavkovský
Program: Pretekar.pas
File exe: Pretekar.exe

Ide o program, ktorý bol zadaný ako semestrálna práca ku predmetu programovanie.

Pretekár dosiahol po niekoľkých pretekoch určitý bodový zisk (za každý pretek určitý počet bodov).
Úloha 1: Vypočítajte programom a zobrazte na obrazovke všetky možnosti (kombinácie), ako bolo možné dosiahnuť aktuálny bodový zisk z jednotlivých pretekov (nezáleží na poradí).
Úloha 2: Vypočítajte programom a zobrazte na obrazovke najúspešnejšiu možnosť (alebo možnosti), v ktorom (ktorých) získal pretekár najväčší počet prvých umiestnení v pretekoch.

Poznámka: Pre každého študenta je pripravené konkrétne zadanie s konkrétnymi hodnotami celkového bodového zisku, jednotlivých ocenení za konkrétne poradové miesto v pretekoch, počet pretekov, ktorých sa pretekár zúčastnil. Riešenie musí zobraziť výstup na obrazovke spôsobom, ako ukazuje konkrétne zadanie pre študenta.
{ PRETEKAR.PAS       Copyright (c) Radovan Slavkovsky alias Raistgar}
{                                                                   }
{ Ide o program, ktorý bol zadaný ako semestrálna práca ku predmetu }
{ programovanie.                                                    }
{                                                                   }
{ Pretekár dosiahol po niekoľkých pretekoch určitý bodový zisk      }
{(za každý pretek určitý počet bodov).                              }
{ Úloha 1: Vypočítajte programom a zobrazte na obrazovke všetky     }
{ možnosti (kombinácie), ako bolo možné dosiahnuť aktuálny bodový   }
{ zisk z jednotlivých pretekov (nezáleží na poradí).                }
{ Úloha 2: Vypočítajte programom a zobrazte na obrazovke            }
{ najúspešnejšiu možnosť (alebo možnosti), v ktorom (ktorých) získal}
{ pretekár najväčší počet prvých umiestnení v pretekoch.            }
{                                                                   }
{ Poznámka: Pre každého študenta je pripravené konkrétne zadanie    }
{ s konkrétnymi hodnotami celkového bodového zisku, jednotlivých    }
{ ocenení za konkrétne poradové miesto v pretekoch, počet pretekov, }
{ ktorých sa pretekár zúčastnil. Riešenie musí zobraziť výstup      }
{ na obrazovke spôsobom, ako ukazuje konkrétne zadanie pre študenta.}
 
PROGRAM XXX;
 
USES crt;
 
VAR m1,m2,m3,m4,m5,z,b:integer;          {ciselne premenne }
    m6,OUT,x:integer;
    POMOC:ARRAY[1..10]OF integer;        {ciselne pole, ktore pomoze porovnat }
    i,j,k:integer;
BEGIN
     clrscr;
     WRITELN('PROGRAM: Pretekar');
     WRITELN('Riesil : Radovan Slavkovsky');
     WRITELN('Zadanie: 129');
     WRITELN('Celkovo ziskanych 23 bodov, v 5 zavodoch');
     z:=5;      { definovany pocet zavodov = 5 }
     b:=23;     { definovany povet ziskanych bodov = 23 }
 
     writeln('Bodove ohodnotenie za ziskane umiestnenie');
     writeln;
     writeln('1.miesto = 9 bodov ');
     writeln('2.miesto = 8 bodov');
     writeln('3.miesto = 6 bodov');
     writeln('4.miesto = 4 body');
     writeln('5.miesto = 2 body');
 
     writeln;
 
     FOR m1:= 0 TO 5 DO        { hodnota m1-m6=miesto 1-6. nadobuda postupne hodnotu 0 az 5 }
     FOR m2:= 0 TO 5 DO        { hodnoty nadobudaju aj nulovu hodnotu prave preto, ze v moznostiach,}
     FOR m3:= 0 TO 5 DO        { * sa moze objavit i moznost kde pretekar zavod absolvoval bez toho }
     FOR m4:= 0 TO 5 DO        { aby obsadil vsetky pozicie . } { m6 prave preto ze ide v dalsiom ktoru}
     FOR m5:= 0 TO 5 DO        { o nulovu konstantu (nebodove miesto ) }
     FOR m6:= 0 TO 5 DO
 
     IF(m1+m2+m3+m4+m5+m6=z)THEN   {podmienka vravi , ze sa sucet 'miest'm1-m6 musi rovnat celkovemu poctu zavodov}
 
     IF(9*m1+8*m2+6*m3+4*m4+2*m5+0*m6=b)THEN {podmienka - sucet miest vynasobenych prislusnou hodnotou miesta sa musi }
                                             { rovnat celkovemu poctu bodov }
                { ak su splnene obe podmienky, nasleduje cyklus }
     BEGIN
     x:=succ(x);   { x nadobuda nasledujucu hodnotu z povodnej }
 
                   { vypis }
     writeln('Moznost c.',x,': ',m1,'x, ',m2,'x, ',m3,'x, ',m4,'x, ',m5,'x');
 
     OUT:=m1; { VYVEDENIE posledneho / najvyssieho clena prveho miesta }
              { pole pomocou cyklu nadobuda postupne hodnoty prveho miesta }
     POMOC[X]:=M1;
 
     END;
 
     writeln;
     write('Celkovy pocet moznosti: ');writeln(x);  {vypis poslednej hodnoty x }
     write('Najviac prvych miest  : ');writeln(OUT); {vyvedenie najvyssieho prveho miesta}
     WRITE('Najlepsia moznost     : ');
 
     FOR I:= 1 TO X DO    { cyklus I, ktory nadobuda hodnotu od 1 po X!, pricom }
     BEGIN                { je stanovena podmienka, pri ktorej pole nadobuda hodnotu }
                          { cyklu postupne, v podmienke je stanovene, ak sa I-ty clen pola }
     IF(POMOC[I]=OUT)THEN WRITE(I,'. ');     { zhoduje s najvyssim prvym miestom, tak sa clen vypise }
     END;
 
 
     READLN;
 
     { program a popis zostavil Radovan Slavkovsky, ( AKA ) Raistgar }
 
END.