Diskuze: Pomoc s příkladem
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.
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)
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...
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.?)
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š ...
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
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.
- průměrný prospěch třídy z PRG
- kolik žáků má jedničku z Čj, kolik z M a kolik z PRG
- kolik žáků má jedničku ve všech předmětech
- kolik žáků nemá 4 ani 5
- kolik žáků propadá
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.
delacroix1998:22.5.2015 20:23
mám to napsané, avšak nevím zda funguje, nějak mi turbopascal protestuje
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.
nevím proč zde nefunguje odsazení..
Tomáš Maňhal:22.5.2015 20:36
Musíš to vkládat jako zdrojový kód (takové ty dva bílé listy s plusem)
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.
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.
Zobrazeno 16 zpráv z 16.