NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
delacroix1998:22.5.2015 16:07

Zdravím, předem říkám, že s programováním teprve začínám, takže moje znalosti nejsou nijak velké (učím se sám doma, zadání si hledám na internetu).
Potřeboval bych poradit, jak mám udělat, když mám zadání: Na vstupu jsou trojice čísel udávající prospěch z ČJ, M, PRG. Vstup je ukončen trojicí 0,0,0. Kdyby mi někdo mohl poradit, kam si hodnoty ukládat a jak vyřešit, aby načítání skončilo trojicí 0,0,0.
Předem děkuji za veškeré rady a nápady.

 
Odpovědět
22.5.2015 16:07
Avatar
Odpovídá na delacroix1998
Michal Haňáček:22.5.2015 16:17

Ahoj,
no ukladal bych do nejake struktury (v tomhle pripade a pro procviceni by melo bohate stacit trojrozmerne pole). Podle toho z ceho budes nacitat (klavesnice, txt soubor, xml, csv, ...) data proste budes nacitat a ukladat dokud nebudou tri nulky za sebou ... to jak budes nacitat zavisi od toho z ceho budes nacitat.

Nahoru Odpovědět
22.5.2015 16:17
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Odpovídá na Michal Haňáček
delacroix1998:22.5.2015 16:18

načítat to budu z klávesnice a trojrozměrné pole neumím (učil jsem se pouze dvojrozměrné- matice)

 
Nahoru Odpovědět
22.5.2015 16:18
Avatar
Odpovídá na delacroix1998
Michal Haňáček:22.5.2015 16:22

Jestli dvou, nebo tří je v podstatě jedno. Pokud z klávesnice, tak si před uložením trojčíslí odkontroluješ jestli to nejsou tři nuly, pokud ano, neuložíš je a přestaneš načítat...

Nahoru Odpovědět
22.5.2015 16:22
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Odpovídá na Michal Haňáček
delacroix1998:22.5.2015 16:29

A budu pak schopný z toho dostat následující úkoly jako třeba (nejlepší známka z MAT, kdo propadá apod.?)

 
Nahoru Odpovědět
22.5.2015 16:29
Avatar
Odpovídá na delacroix1998
Michal Haňáček:22.5.2015 17:11

Jistě. I když dvou-rozměrné pole by mělo být daleko lepší volbou když nad tím tak přemýšlím (promiň, před tím jsem psal z práce kde jsem řešil další věci ...). Jeden rozměr bude pevně daný a bude mít význam jednotlivých předmětů (sloupce M, ČJ, PRG), a do druhého rozměru (řádky) budeš ukládat jednotlivé trojice známek. Případně si udělat tři jedno-rozměrné pole pro každý předmět zvlášť - volba je na tobě :). Průchodem toho pole zjistíš co potřebuješ ...

Nahoru Odpovědět
22.5.2015 17:11
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Odpovídá na delacroix1998
Michal Haňáček:22.5.2015 17:57

Pokud chceš, můžu ti takový příklad napsat, je to hned. Ale spíše se to naučíš když to vymyslíš sám :)

Nahoru Odpovědět
22.5.2015 17:57
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Odpovídá na Michal Haňáček
delacroix1998:22.5.2015 19:04

tak já bych ti napsal celkové zadání a jestli by jsi byl ochotný..
Kdyžtak:
Na vstupu jsou trojice čísel udávající prospěch jednotlivých žáků z českého jazyka, matematiky a programování. Vstup je ukončen trojicí 0,0,0.

  1. průměrný prospěch třídy z PRG
  2. kolik žáků má jedničku z Čj, kolik z M a kolik z PRG
  3. kolik žáků má jedničku ve všech předmětech
  4. kolik žáků nemá 4 ani 5
  5. kolik žáků propadá
 
Nahoru Odpovědět
22.5.2015 19:04
Avatar
Odpovídá na delacroix1998
Michal Haňáček:22.5.2015 19:11

Ok, tak já k tomu večer na chvilku sednu. Když tak mi pošli co máš hotové (dopíšu ti to do toho) třeba se nám rovnou podaří přijít i na něco co ses sám doma naučil zle.

Nahoru Odpovědět
22.5.2015 19:11
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Odpovídá na Michal Haňáček
delacroix1998:22.5.2015 20:23

mám to napsané, avšak nevím zda funguje, nějak mi turbopascal protestuje

 
Nahoru Odpovědět
22.5.2015 20:23
Avatar
delacroix1998:22.5.2015 20:24

program trojice;
var znam: record cj: integer;
mat: integer;
prg: integer;
end;
prum: real;
a: record cj: integer;
mat: integer;
prg: integer;
jedn, n, dob, prop: integer;

begin
with a do begin
mat:0;
cj:=0;
prg:=0;
end;
prum:=0;
n:=0;
jedn:=0;
dob:=0;
prop:=0;
write("Zadej známky jednotlivých žáků, ukončených čísly 0-0-0:");
repeat
with znam do begin
n:= n+1;
(n,". tý žák");
write("Známka z matematiky:");
readln(mat);
while mat = 1 do a.mat:=a.mat + 1;
write("Známka z češtiny:");
readln(cj);
while cj = 1 do a.cj:=a.cj + 1;
write("Známka z programování:");
readln(prg);
while prg = 1 do a.prg:=a.prg + 1;
prum:= prum + prg;
while (mat <= 3) or (cj <= 3) or (prg <= 3) do dob:= dob +1;
while (mat = 5) or (cj = 5) or (prg = 5) do prop:= prop +1;
while (mat = 1) and (cj = 1) and (prg = 1) do jedn:= jedn +1;
end;
until (znam.mat = 0) and (znam.cj = 0) and (znam.prg = 0);
prum:= prum/n;
write("Průměr třídy z programování je :", prum);
with a do begin
write("Jedničku z matematiky má", mat," žáků.");
write("Jedničku z češtiny má", cj," žáků.");
write("Jedničku z programování má", prg," žáků.");
write("Jedničku ve všech předmětech má", jedn," žáků.";
write(dob," žáků nemá ani 4 ani 5.");
write(prop," žáků propadá.");
end;
readln;
end.

 
Nahoru Odpovědět
22.5.2015 20:24
Avatar
delacroix1998:22.5.2015 20:24

nevím proč zde nefunguje odsazení..

 
Nahoru Odpovědět
22.5.2015 20:24
Avatar
Odpovídá na delacroix1998
Tomáš Maňhal:22.5.2015 20:36

Musíš to vkládat jako zdrojový kód ;-) (takové ty dva bílé listy s plusem)

 
Nahoru Odpovědět
22.5.2015 20:36
Avatar
Odpovídá na delacroix1998
Michal Haňáček:22.5.2015 20:45

Oki, mi se to jen nechtělo psát pro nějakého vykuka co nenapsal ani řádek a chce odevzdat úkol do školy :). Snad ti to pomůže. Kdyby jsi se potřeboval na něco zeptat, stačí se ozvat ...

Napsal jsem ti ten prográmek (nevalidoval jsem uživ. vstupy - s tím si když tak poradíš sám, nebo to můžem probrat). Stáhnout si to můžeš tady: https://www.dropbox.com/…a_Devbook.7z?dl=0

A zdroják:

program SKOLA;
(** jednoducha-jednoucelova utilitka pro ukazku prace s dat. typy, polem, ...
  !!! nejsou osetreny uziv. vstupy, nejsou kontrolovany rozsahy znamek (1..5), atd ... !!!

  ZADANI:
  Na vstupu jsou trojice čísel udávající prospěch jednotlivých žáků z českého jazyka, matematiky a programování. Vstup je ukončen trojicí 0,0,0.
    1. průměrný prospěch třídy z PRG
    2. kolik žáků má jedničku z Čj, kolik z M a kolik z PRG
    3. kolik žáků má jedničku ve všech předmětech
    4. kolik žáků nemá 4 ani 5
    5. kolik žáků propadá

  POZNAMKY:
  - jmena se predpokladam neukladaji - pokud by se mela ukladat, je potreba rozsirit strukturu Predmet + uziv. vstup
  - propadajici zak je predpokladam takovy, ktery ma v nekterem predmetu 5ku
  *)
{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  Predmet=Record
    M:Integer;
    CJ:Integer;
    PRG:Integer;
  end;

  ZnamkyArray=Array of Predmet;

var
  //pomocne promenne
  ZnamkyArr:ZnamkyArray;
  Konec:Char;
  EndReading:Boolean; //True - ukonceni cteni hodnot z uzivatelskeho vstupu
  PocetPrvkuPole:Integer;
  PomPredmet:Predmet;
  //vystupy
  PrumPRG:Real;
  SoucetZnamekPRG,Pocet1CJ,Pocet1M,Pocet1PRG,PocetKomplet1,PocetBez4a5,PocetPropadajicichZaku:Word;
begin
  //formatovani vystupu
  Writeln('***********************************');
  Writeln('Mini-utilitka pro praci se znamkami');
  Writeln('***********************************');
  Writeln('');
  repeat
    PocetPrvkuPole:=1;
    //cteni + ukladani hodnot
    repeat
      Writeln('********* zadavani hodnot ***********');
      Write(' Zadejte prosim znamku z MATEMATIKY:'); Read(PomPredmet.M);
      Write(' Zadejte prosim znamku z CESKEHO JAZYKA:'); Read(PomPredmet.CJ);
      Write(' Zadejte prosim znamku z PROGRAMOVANI:'); Read(PomPredmet.PRG);
      Writeln('');

      EndReading:=(PomPredmet.M=0) and (PomPredmet.CJ=0) and (PomPredmet.PRG=0);
      if not(EndReading) then
      begin
        SetLength(ZnamkyArr,PocetPrvkuPole);
        ZnamkyArr[PocetPrvkuPole-1]:=PomPredmet;
        Inc(PocetPrvkuPole);
      end;
    until EndReading;

    //pokud by nebyly zadane zadne znamky, nema smysl cokoliv pocitat ...
    if not(Length(ZnamkyArr)>0) then Writeln('Nebyly zadany zadne znamky!!!') else
    begin
      //inicializace
      PrumPRG:=0;
      SoucetZnamekPRG:=0; Pocet1CJ:=0; Pocet1M:=0; Pocet1PRG:=0; PocetKomplet1:=0; PocetBez4a5:=0; PocetPropadajicichZaku:=0;
      //pruchod polem - vypocty
      for PocetPrvkuPole:=0 to Length(ZnamkyArr)-1 do
      begin
        //scitame znamky z PRG abychom byli schopni vypocitat prumer
        SoucetZnamekPRG:=SoucetZnamekPRG+ZnamkyArr[PocetPrvkuPole].PRG;
        //zvyseni citacu v pripade ze ma zak jednicku z nektereho predmetu
        if ZnamkyArr[PocetPrvkuPole].M=1 then Inc(Pocet1M);
        if ZnamkyArr[PocetPrvkuPole].CJ=1 then Inc(Pocet1CJ);
        if ZnamkyArr[PocetPrvkuPole].PRG=1 then Inc(Pocet1PRG);
        //zvyseni citace v pripade ze ma zak jednicku ze vsech predmetu
        if (ZnamkyArr[PocetPrvkuPole].M=1) and (ZnamkyArr[PocetPrvkuPole].CJ=1) and (ZnamkyArr[PocetPrvkuPole].PRG=1) then Inc(PocetKomplet1);
        //zvyseni citace v pripade ze zak nema 4 ani 5
        if not((ZnamkyArr[PocetPrvkuPole].M=4) or (ZnamkyArr[PocetPrvkuPole].M=5)) and
           not((ZnamkyArr[PocetPrvkuPole].CJ=4) or (ZnamkyArr[PocetPrvkuPole].CJ=5)) and
           not((ZnamkyArr[PocetPrvkuPole].PRG=4) or (ZnamkyArr[PocetPrvkuPole].PRG=5)) then Inc(PocetBez4a5);
        //zvyseni citace v pripade ze zak z nejakeho predmetu propada - obdoba poctu kompletnich jednickaru
        if (ZnamkyArr[PocetPrvkuPole].M=5) or (ZnamkyArr[PocetPrvkuPole].CJ=5) or (ZnamkyArr[PocetPrvkuPole].PRG=5) then Inc(PocetPropadajicichZaku);
      end;
      PrumPRG:=SoucetZnamekPRG/Length(ZnamkyArr);
      //vypis vysledku
      Writeln(''); Writeln(''); Writeln('');
      Writeln('********* vypocitane hodnoty ***********');
      Writeln(Format('1. prumerny prospech tridy z PRG je: %s.',[FloatToStrF(PrumPRG,ffFixed,18,2)]));
      Writeln(Format('2. %d zaku ma jednicku z CJ, %d z M a %d z PRG.',[Pocet1CJ,Pocet1M,Pocet1PRG]));
      Writeln(Format('3. %d zaku ma jednicku ve vsech predmetech.',[PocetKomplet1]));
      Writeln(Format('4. %d zaku nema 4 ani 5.',[PocetBez4a5]));
      Writeln(Format('5. %d zaku propada.',[PocetPropadajicichZaku]));
      Writeln(''); Writeln(''); Writeln('');
      Readln;
    end;

    Writeln('Prejete si opakovat zadani? ["1" pro opakovani]');
    Readln(Konec);
  until not(Konec='1');
end.
Editováno 22.5.2015 20:48
Nahoru Odpovědět
22.5.2015 20:45
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Odpovídá na Michal Haňáček
delacroix1998:22.5.2015 21:35

Děkuji moc za všechny rady

 
Nahoru Odpovědět
22.5.2015 21:35
Avatar
delacroix1998:23.5.2015 12:51

Potřebuji poradit, proč když zadám známku za 1, tak mě to vyhodí s exitcode 201

program trojice;
var znam: record cj: integer;
                                  mat: integer;
                                  prg: integer;
                                  end;
        prum: real;
        a: record cj: integer;
                        mat: integer;
                        prg: integer;
        jedn, n, dob, prop: integer;

begin
        with a do begin
                                        mat:0;
                                        cj:=0;
                                        prg:=0;
                                end;
        prum:=0;
        n:=0;
        jedn:=0;
        dob:=0;
        prop:=0;
        write("Zadej známky jednotlivých žáků, ukončených čísly 0-0-0:");
        repeat
                with znam do begin
                                                n:= n+1;
                                                (n,". tý žák");
                                                write("Známka z matematiky:");
                                                readln(mat);
                                                while mat = 1 do a.mat:=a.mat + 1;
                                                write("Známka z češtiny:");
                                                readln(cj);
                                                while cj = 1 do a.cj:=a.cj + 1;
                                                write("Známka z programování:");
                                                readln(prg);
                                                while prg = 1 do a.prg:=a.prg + 1;
                                                prum:= prum + prg;
                                                while (mat <= 3) or (cj <= 3) or (prg <= 3) do  dob:= dob +1;
                                                while (mat = 5) or (cj = 5) or (prg = 5) do  prop:= prop +1;
                                                while (mat = 1) and (cj = 1) and (prg = 1) do  jedn:= jedn +1;
                                        end;
        until (znam.mat = 0) and (znam.cj = 0) and (znam.prg = 0);
        prum:= prum/n;
        write("Průměr třídy z programování je :", prum);
        with a do begin
                                        write("Jedničku z matematiky má", mat," žáků.");
                                        write("Jedničku z češtiny má", cj," žáků.");
                                        write("Jedničku z programování má", prg," žáků.");
                                        write("Jedničku ve všech předmětech má", jedn," žáků.";
                                        write(dob," žáků nemá ani 4 ani 5.");
                                        write(prop," žáků propadá.");
                                end;
        readln;
end.
 
Nahoru Odpovědět
23.5.2015 12:51
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.