Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím vás tu, mám závěrečku z Pascalu. Zadání zní takto:
Vtvořte program s následující nabídkou:
a) Průměr známek
Vyhodnoťte klasifikaci z jedné písemné práce ve třídě. Je dán počet žáků a dále výsledná známka každého z žáků. Ošetřete zadání tak,
aby bylo možné zadat pouze známky v rozsahu <1;5>. Pro ostatní případy uživatele upozorněte např.: "Chybné zadání".
Určete počty žáků klasifikovaných jednotlivými známkami a průměr celé třídy.
b) Načtěte do pole N čísel. Vytvořte statistiku, kolikrát se opakují stejná čísla.
c) Ukončení Programu
Tu písemku už mám, jen ji potřebuji zkontrolovat, ale s tím polem si nevím rady. Program mám takto:
program znamky; uses wincrt; type data = array [1..50] of integer; var b,c:real; i,v,n,p1,p2,p3,p4,p5:integer; a : data; begin Writeln('********************'); Writeln('***** MENU *****'); writeln; writeln('1. Písemná práce'); Writeln('2. Pole'); writeln('3. Ukončit program'); readln(v); case v of 1: begin p1:=0; p2:=0; p3:=0; p4:=0; p5:=0; Writeln('Tento program vyhodnotí písemnou práci ve třidě.'); writeln('Je dán počet žáku ve třídě a známka každého studenta.'); Writeln('Program poté vypíše počet žáku klasifikovaných jednotlivými známkami.'); writeln('Rovněž zjistí celkový průměr z celé třídy.'); writeln; repeat write('Zadejte počet žáku ve třídě '); readln(n); IF n<=0 then writeln('Zadal jsi špatné číslo, počet nemůže být nulový nebo zaporný.'); writeln; until n>0; For I:=1 to n do begin repeat write('Zadejte výslednou známku ',I,'. žáka '); readln(A[i]); IF ((a[i]<>1) and (a[i] <>2) and (a[i] <>3) and (a[i] <>4) and (a[i] <>5)) then begin writeln('Chybné zadání, známku lze zadat v intervalu <1;5>.'); writeln; end; until ((a[i]=1) or (a[i] =2) or (a[i] =3) or (a[i] =4) or (a[i] =5)); if a[i]=1 then p1:=p1+1; if a[i]=2 then p2:=p2+1; if a[i]=3 then p3:=p3+1; if a[i]=4 then p4:=p4+1; if a[i]=5 then p5:=p5+1; end; writeln; writeln('************************************'); writeln('* *'); writeln('* Znamku 1 dostalo celkem ',p1,' žáku *'); writeln('* Znamku 2 dostalo celkem ',p2,' žáku *'); writeln('* Znamku 3 dostalo celkem ',p3,' žáku *'); writeln('* Znamku 4 dostalo celkem ',p4,' žáku *'); writeln('* Znamku 5 dostalo celkem ',p5,' žáku *'); writeln('* *'); writeln('************************************'); writeln; writeln('Celkový průměr známek ve třídě je ',((p1*1+p2*2+p3*3+p4*4+p5*5)/n):3:2); end; 2: writeln('TadyBudePole'); 3: begin writeln('Konec programu'); donewincrt; end; end; end.
Předem děkuji.
Offline
↑ Honza Matika:
Načti do pole čísla, serad ho a při procházení počítej počet výskytů (inkrementuj nějakou proměnnou dokud se číslo nezmění a pak počet vypiš nebo ulož)
K tomu prvnímu:
místo toho p1-p5 by jsi mohl také použít pole.
Offline
Tak to pole do toho pak vložím, zatím mám toto:
program zaver; uses wincrt; type data = array [1..50] of integer; var b,c:real; i,v,n,p1,p2,p3,p4,p5:integer; a : data; begin Writeln('*********************************'); Writeln('********** M E N U **********'); Writeln('*********************************'); writeln; writeln('1. Písemná práce'); Writeln('2. Pole'); writeln('3. Ukončit program'); Writeln; repeat Write('Zadejte číslo '); readln(v); IF ((v<>1) and (v<>2) and (v<>3)) then writeln('Muzes zadat pouze cisla 1,2 nebo 3'); until ((v=1) or (v=2) or (v=3)); case v of 1: begin p1:=0; p2:=0; p3:=0; p4:=0; p5:=0; repeat Writeln('Tento program vyhodnotí písemnou práci ve třídě.'); writeln('Je dán počet žáku ve třídě a známka každého studenta.'); Writeln('Program poté vypíše počet žáku klasifikovaných jednotlivými známkami.'); writeln('Rovněž zjistí celkový průměr z celé třídy.'); writeln; repeat write('Zadejte počet žáku ve třídě '); readln(n); IF n<=0 then writeln('Zadal jsi špatné číslo, počet nemůže být nulový nebo zaporný.'); writeln; until n>0; For I:=1 to n do begin repeat write('Zadejte výslednou známku ',I,'. žáka '); readln(A[i]); IF ((a[i]<>1) and (a[i] <>2) and (a[i] <>3) and (a[i] <>4) and (a[i] <>5)) then begin writeln('Chybné zadání, známku lze zadat v intervalu <1;5>.'); writeln; end; until ((a[i]=1) or (a[i] =2) or (a[i] =3) or (a[i] =4) or (a[i] =5)); if a[i]=1 then p1:=p1+1; if a[i]=2 then p2:=p2+1; if a[i]=3 then p3:=p3+1; if a[i]=4 then p4:=p4+1; if a[i]=5 then p5:=p5+1; end; writeln; writeln('************************************'); writeln('* *'); writeln('* Známku 1 dostalo celkem ',p1,' žáku *'); writeln('* Známku 2 dostalo celkem ',p2,' žáku *'); writeln('* Známku 3 dostalo celkem ',p3,' žáku *'); writeln('* Známku 4 dostalo celkem ',p4,' žáku *'); writeln('* Známku 5 dostalo celkem ',p5,' žáku *'); writeln('* *'); writeln('************************************'); writeln; writeln('Celkový průměr známek ve třídě je ',((p1*1+p2*2+p3*3+p4*4+p5*5)/n):3:2); writeln; writeln('Pokud chcete ukoncit program Písemná Práce zmáčkněte 1'); writeln('Pokud zadáte libovolnou klávesu kromě 1, program Písemná Práce se restartuje'); write('Zadejte číslo '); readln(b); until b=1; end; 2: writeln('blabla'); 3: writeln('konec programu'); end; end.
Chtěl bych, když v menu dám jedničku, dokončí se mi program Pisemk a zepta se mi, jestli ho chci restartovat nebo ukoncit, tak kdyz dam ukoncit, tak aby mi najelo zase to MENU... ale nejak jsem se do tech repeatu zamotal, tak nevim kam to mam dat. spis si nevim rady kam s tou podminkou.
Offline
Tak už to mám s tím polem. Ale potřebuji, když dám v programu např. jedničku, udělá se mi program jedna, a pak zadam ze ho nechci opakovat, tak bych chtel aby se mi to zase vratilo zpet na zacatek menu a jelo to od znova, ale nevim kam s tim repeatem ... Diky moc .
program zaver; uses wincrt; type data = array [1..50] of integer; var b,c:real; pole,npole:array[0..500] of integer; i,v,n,p1,p2,p3,p4,p5,h:integer; a : data; begin Writeln('*********************************'); Writeln('********** M E N U **********'); Writeln('*********************************'); writeln; writeln('1. Písemná práce'); Writeln('2. Pole'); writeln('3. Ukončit program'); Writeln; repeat Write('Zadejte číslo '); readln(v); IF ((v<>1) and (v<>2) and (v<>3)) then writeln('Muzes zadat pouze cisla 1,2 nebo 3'); until ((v=1) or (v=2) or (v=3)); case v of 1: begin p1:=0; p2:=0; p3:=0; p4:=0; p5:=0; repeat Writeln('Tento program vyhodnotí písemnou práci ve třídě.'); writeln('Je dán počet žáku ve třídě a známka každého studenta.'); Writeln('Program poté vypíše počet žáku klasifikovaných jednotlivými známkami.'); writeln('Rovněž zjistí celkový průměr z celé třídy.'); writeln; repeat write('Zadejte počet žáku ve třídě '); readln(n); IF n<=0 then writeln('Zadal jsi špatné číslo, počet nemůže být nulový nebo zaporný.'); writeln; until n>0; For I:=1 to n do begin repeat write('Zadejte výslednou známku ',I,'. žáka '); readln(A[i]); IF ((a[i]<>1) and (a[i] <>2) and (a[i] <>3) and (a[i] <>4) and (a[i] <>5)) then begin writeln('Chybné zadání, známku lze zadat v intervalu <1;5>.'); writeln; end; until ((a[i]=1) or (a[i] =2) or (a[i] =3) or (a[i] =4) or (a[i] =5)); if a[i]=1 then p1:=p1+1; if a[i]=2 then p2:=p2+1; if a[i]=3 then p3:=p3+1; if a[i]=4 then p4:=p4+1; if a[i]=5 then p5:=p5+1; end; writeln; writeln('************************************'); writeln('* *'); writeln('* Známku 1 dostalo celkem ',p1,' žáku *'); writeln('* Známku 2 dostalo celkem ',p2,' žáku *'); writeln('* Známku 3 dostalo celkem ',p3,' žáku *'); writeln('* Známku 4 dostalo celkem ',p4,' žáku *'); writeln('* Známku 5 dostalo celkem ',p5,' žáku *'); writeln('* *'); writeln('************************************'); writeln; writeln('Celkový průměr známek ve třídě je ',((p1*1+p2*2+p3*3+p4*4+p5*5)/n):3:2); writeln; writeln('Pokud chcete ukoncit program Písemná Práce zmáčkněte 1'); writeln('Pokud zadáte libovolnou klávesu kromě 1, program Písemná Práce se restartuje'); write('Zadejte číslo '); readln(b); until b=1; end; 2: begin repeat Writeln('Načtěte do pole N čísel, program poté vypíše, kolikrát se dané číslo opakuje'); Writeln; repeat write('Zadejte počet prvků pole: '); {Zjisteni poctu prvku} readln(N); IF n <=0 then writeln('Zadat lze pouze čísla kladná nenulová čísla'); until n>0; writeln; for i:=0 to N-1 do begin {Nacitani hodnot do pole} write('Zadejte ',i+1,'. číslo: '); readln(pole[i]); end; for i:=0 to N-1 do inc(npole[pole[i]]); {Navysovani hodnot v novem poli} writeln; for i:=0 to 100 do begin {Vypis hodnot na nenulovych pozicich noveho pole} if npole[i]>0 then writeln(i,' - ',npole[i],'x'); end; writeln('Pokud chcete program Pole ukončit, zmáčkněte jedničku.'); writeln('Pokud zadáte jiné číslo než jedna, program se restartuje.'); write('Zadej číslo '); readln(h); until (h=1); end; 3: writeln('konec programu'); end; end.
Offline
Už jsem na to přišel. Jinak díky :) Už je to celý snad všechno ošetřený a v pořádku, nebo ne?
program zaver; uses crt; type data = array [1..50] of integer; var b,c:real; pole,npole:array[0..500] of integer; i,v,n,p1,p2,p3,p4,p5,h,l:integer; a : data; begin repeat clrscr; Writeln('*********************************'); Writeln('********** M E N U **********'); Writeln('*********************************'); writeln; writeln('1. Písemná práce'); Writeln('2. Pole'); writeln('3. Ukončit program'); Writeln; repeat Write('Zadejte číslo '); readln(v); writeln; IF ((v<>1) and (v<>2) and (v<>3)) then writeln('Můžes zadat pouze čísla 1,2 nebo 3'); until ((v=1) or (v=2) or (v=3)); case v of 1: begin clrscr; p1:=0; p2:=0; p3:=0; p4:=0; p5:=0; repeat Writeln('Tento program vyhodnotí písemnou práci ve třídě.'); writeln('Je dán počet žáku ve třídě a známka každého studenta.'); Writeln('Program poté vypíše počet žáku klasifikovaných jednotlivými známkami.'); writeln('Rovněž zjistí celkový průměr z celé třídy.'); writeln; repeat write('Zadejte počet žáku ve třídě '); readln(n); IF n<=0 then writeln('Zadal jsi špatné číslo, počet nemůže být nulový nebo zaporný.'); writeln; until n>0; For I:=1 to n do begin repeat write('Zadejte výslednou známku ',I,'. žáka '); readln(A[i]); IF ((a[i]<>1) and (a[i] <>2) and (a[i] <>3) and (a[i] <>4) and (a[i] <>5)) then begin writeln('Chybné zadání, známku lze zadat v intervalu <1;5>.'); writeln; end; until ((a[i]=1) or (a[i] =2) or (a[i] =3) or (a[i] =4) or (a[i] =5)); if a[i]=1 then p1:=p1+1; if a[i]=2 then p2:=p2+1; if a[i]=3 then p3:=p3+1; if a[i]=4 then p4:=p4+1; if a[i]=5 then p5:=p5+1; end; writeln; writeln('************************************'); writeln('* *'); writeln('* Známku 1 dostalo celkem ',p1,' žáku *'); writeln('* Známku 2 dostalo celkem ',p2,' žáku *'); writeln('* Známku 3 dostalo celkem ',p3,' žáku *'); writeln('* Známku 4 dostalo celkem ',p4,' žáku *'); writeln('* Známku 5 dostalo celkem ',p5,' žáku *'); writeln('* *'); writeln('************************************'); writeln; writeln('Celkový průměr známek ve třídě je ',((p1*1+p2*2+p3*3+p4*4+p5*5)/n):3:2); writeln; writeln('Pokud chcete ukoncit program Písemná Práce zmáčkněte 1'); writeln('Pokud zadáte libovolnou klávesu kromě 1, program Písemná Práce se restartuje'); write('Zadejte číslo '); readln(b); until b=1; end; 2: begin repeat clrscr; Writeln('Načtěte do pole N čísel, program poté vypíše, kolikrát se dané číslo opakuje'); Writeln; repeat write('Zadejte počet prvků pole: '); {Zjisteni poctu prvku} readln(N); IF n <=0 then writeln('Zadat lze pouze čísla kladná nenulová čísla'); until n>0; writeln; for i:=0 to N-1 do begin {Nacitani hodnot do pole} write('Zadejte ',i+1,'. číslo: '); readln(pole[i]); end; for i:=0 to N-1 do inc(npole[pole[i]]); {Navysovani hodnot v novem poli} writeln; for i:=0 to 100 do begin {Vypis hodnot na nenulovych pozicich noveho pole} if npole[i]>0 then writeln(i,' se opakuje celkem - ',npole[i],'x'); end; writeln; writeln('Pokud chcete program Pole ukončit, zmáčkněte jedničku.'); writeln('Pokud zadáte jiné číslo než jedna, program se restartuje.'); write('Zadej číslo '); readln(h); until (h=1); end; 3: begin writeln('KONEC'); end; end; until v=3; end.
Offline
↑ Honza Matika:
Jenom by to chtělo nějakou úpravu. Takhle se v tom nedá moc vyznat.
Offline