Matematické Fórum

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

#1 17. 12. 2010 20:34 — Editoval janca361 (17. 12. 2010 21:30)

janca361
.
Příspěvky: 3284
 

Pascal - Vysvědčení

Zdravím,
mám napsat program v Pascalu, který pro n studentů vypíše zda student prospěl, prospěl s vyznamenáním nebo neprospěl. Počet předmětů je zadán konstantou. Program na závěr vypíše počet a čísla studentů, kteří neprospěli.

Code:

program vysvedceni;
type t_prospech=(prospel_s_vyznamenanim,prospel,neprospel);
     t_znamka=1..5;
var prospech:t_prospech;
    p:real; {prumer znamek}
    petka:(ma5,nema5); 
    trojka:(ma3,nema3); 
    znamka:t_znamka; 
    p_s {pocet studentu},s {soucet znamek},i1,i2,p_s_n {pocet studentu, kteri neprospeli}:integer; 
const p_p=5; {pocet predmetu}

begin
writeln('Zadej pocet studentu');
read(p_s);
s:=0;
p_s_n:=0;

for i1:=1 to p_s do begin
                         petka:=nema5;
                         trojka:=nema3;
                         prospech:=prospel;
                         for i2:=1 to p_p do begin
                                                  writeln('Zadej znamku');
                                                  read(znamka);
                                                  if znamka=5 then petka:=ma5;
                                                  if znamka=3 then trojka:=ma3;
                                                  s:=s+znamka;
                                             end;

                         if petka=ma5 then begin
                                                prospech:=neprospel;
                                                p_s_n:=p_s_n+1;
                                           end;
                         p:=s/p_p;
                         if (p<=1.5) and (trojka=nema3) then prospech:=prospel_s_vyznamenanim;
                         if prospech=prospel then writeln ('Student cislo ',i1,' prospel');
                         if prospech=prospel_s_vyznamenanim then writeln ('Student cislo ',i1,' prospel s vyznamenanim');
                         if prospech=neprospel then writeln ('Student cislo ',i1,' neprospel')
                    end;
end.

Stále mi to hází Fatal: Compilation aborted
A ještě otázka: Jak tam vložit ten závěrečný výpis s počtem studentů, kteří neprospěli s jejich čísly?

Díky za pomoc.

Offline

  • (téma jako vyřešené označil(a) janca361)

#2 17. 12. 2010 21:20

Lumikodlak
Místo: Praha
Příspěvky: 212
Pozice: Programator nebo tak neco :-)
Reputace:   19 
 

Re: Pascal - Vysvědčení

Kdyz ti to hazi tu chybu Fatal: Compilation aborted, tak neukaze to misto, kde je chyba, a co je to za chybu?

Je tam potreba opravit alespon tohle -
Jak mas:
                         if petka:=ma5 then begin

tak tam nepatri ta dvojtecka, spis by melo byt:

                         if petka=ma5 then begin


A pak v te treti radce od konce mas nejake dvojite writeln :-)  (a neni tam strednik) takze by to melo vypdat takhle podle me:

                         if prospech=neprospel then writeln ('Student cislo ',i1,'neprospel');


Kdyztak dej vedet, jestli to pomohlo, jeste se podivam na ten zaverecny vypis. Asi budes muset postupne do pole ukladat cisla tech studentu, a pak na konci je vypsat z toho pole.

Offline

 

#3 17. 12. 2010 21:31

janca361
.
Příspěvky: 3284
 

Re: Pascal - Vysvědčení

↑ Lumikodlak:

Už to funguje :) Hloupé chyby ;)
Opraveno v původním postu. 

Jinak pro výpis nemůžu použít pole - pouze jednoduché datové typy (integer, real, bolean, char, interval, výčet)

Offline

 

#4 17. 12. 2010 21:49

Lumikodlak
Místo: Praha
Příspěvky: 212
Pozice: Programator nebo tak neco :-)
Reputace:   19 
 

Re: Pascal - Vysvědčení

Tak to me vazne vubec nic nenapada :-)
To je dane v zadani, ze muzes pouzit jen jednoduche datove typy? Je tam dany maximalni pocet studentu? Asi bych musel videt cele zadani, jinak vazne nic me nenapada. Nebo to myslis tak, ze 'writeln' umi vypsat jen jednoduchy datovy typ, a ne cele pole?

Offline

 

#5 17. 12. 2010 21:55

janca361
.
Příspěvky: 3284
 

Re: Pascal - Vysvědčení

↑ Lumikodlak:

No nemám zadání celé, protože ani celé nebylo, bylo vysvětlené, co to má dělat - to jsem napsala.
Jednoduché datové typy jsou určené tím, že se jedná o práci do školy, kde jsme pole nebrali, takže nemůže být použité. Ptala jsem se na to a nemůže. Pole mě totiž napsalo taky ;)
Počet je jasnej jak vypsat, ale ty jejich čísla? :(

Maximální počet studentů není dán.

Offline

 

#6 18. 12. 2010 11:50

Dioxid
Příspěvky: 416
Reputace:   13 
 

Re: Pascal - Vysvědčení

Jestli se to má vypsat až na konci programu (a bez použití pole) tak mne napadá jedině zápis/čtení ze souboru.


Jsem omylný, proto ne vše, co jsem napsal, je zaručeně správně.
468

Offline

 

#7 18. 12. 2010 12:41

janca361
.
Příspěvky: 3284
 

Re: Pascal - Vysvědčení

↑ TomDlask:
Taky není možné použít :( Ale díky.

Offline

 

#8 18. 12. 2010 18:35 — Editoval TomDlask (18. 12. 2010 18:39)

Dioxid
Příspěvky: 416
Reputace:   13 
 

Re: Pascal - Vysvědčení

Nápad: použít integer "jako" pole nebo string. Nejlépe to uvedu na příkladu s konkrétními hodnotami:
Na začátku programu bude mít tento integer hodnotu 0.
Řekněme, že to (třeba) 6. student nezvládl a proto bude na konci vypsán. Do integeru zapíšeš 16. Jedničku proto, že 6ka je jednociferná a samotnou šestku. Po prvním zapsání by tam tedy bylo 16.
Dále tam budeš potřebovat uložit číslo 29. Chtěla by jsi tam tedy také přidat (obdobně jako u minulého případu) 229 (dva proto, protože 29 je dvojciferné, potom následuje ta devětadvacítka). Původní hodnotu vynásobíš tisícem (dostaneš 16000) a přičteš těch 229 => máš tam 16229.
Potom (uvádím poslední příklad zápisu) chceš uložit číslo 50. Padesátka má 2 cifry, proto ukládáš 250. Původní integer vynásobíš tisícem a přičteš 250. Získáváš 16229250. (chtělo by to spíš longint)

Jak to potom přečíst:
První cifra čísla je 1 => budeme číst jedno číslo => dostaneme 6, "odtrhneme" od čísla tyhle dvě (dvě = tu jednu identifikační + šestku) cifry (získáme 229250)
První cifra je dvojka => odebereme dvě čísla => dostanem 29, "odtrhneme" od čísla tyto tři (tři = jednu identifikační + 29) cifry (získáme 250)
První cifra je dvojka => odebereme dvě čísla => dostaneme 50, "odtrhneme" od čísla tyto tři cifry.
V tom integeru nám už zbyla jen původní 0. Vše jsme již vypsali.

Pro tento postup je ale třeba znát operace mod a div, počítat mocniny desítky a možná i logaritmus. Bude ale fungovat jen na malý počet ukládaných čísel, pro vyšší by to chtělo "delší" datový typ. Jestliže je ale možno použít string, tak tam by se to dělalo podobně a mnohem jednodušeji.


Jsem omylný, proto ne vše, co jsem napsal, je zaručeně správně.
468

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson