Avatar
delacroix1998:

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:

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:

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:

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:

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:

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:

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  ±0 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:

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:

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:

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:

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:

nevím proč zde nefunguje odsazení..

 
Nahoru Odpovědět 22.5.2015 20:24
Avatar
tomasmanhal
Člen
Avatar
Odpovídá na delacroix1998
tomasmanhal:

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
Kdyby nám dodali k životu zdrojový kód, vše by bylo jednodušší...
Avatar
Odpovídá na delacroix1998
Michal Haňáček:

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
 
Nahoru Odpovědět 22.5.2015 21:35
Avatar
delacroix1998:

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.