Výsledková listina – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Výsledková listina – Pascal – Fórum – Programujte.comVýsledková listina – Pascal – Fórum – Programujte.com

 

JohnyE0
Duch
26. 9. 2008   #1
-
0
-

Zadaní je jednoduché:
Ze vstupního souboru načíst data do polí, seřadit a vypsat do výstupního souboru. <udělat výsledkovou listinu závodu>

Vstupní soubor je ve formátu <bez uvozovek>:
"startovní číslo"
"jméno"
"body"

výstup má být:
"pořadí", "startovní číslo", "jméno" , "počet bodů"

/příklad vstupního souboru/
1
Novak
56
2
Cerny
72
3
Dvorak
65
4
Pech
81
5
Dorota
58
6
Netvor
48
7
Trdlo
52
8
Zdrhl
63
/konec př./

Daný program je napsán ale je problém s řazením jmen a startovních čísel. Počet bodů jeřezen v pořádku. Bohužel se nepodařilo najít chybu.
Zdrojový kód:

program razeni_podle_bodu;
uses crt;
type startovnicisla=array [1..100] of integer;
jmeno=array [1..100] of string;
body=array [1..100] of integer;
var stc:startovnicisla;
jm:jmeno;
bod:body;
vstup,vystup:text;
i,q,n,j,max,pormax,stcm:integer;
maxjm:string;

begin
clrscr;

assign(vstup,'C:\vstup.txt');
reset(vstup);

i:=0;
while not(eof(vstup)) do
begin
i:=i+1;
readln(vstup,stc[i]);
readln(vstup,jm[i]);
readln(vstup,bod[i]);
end;
n:=i;

for i:=1 to n do
begin
writeln(i,', ',stc[i],', ',jm[i],', ',bod[i]);
end;
readln;

for q:=1 to (n-1) do
begin
max:=bod[q]; pormax:=q;
for j:=(q+1) to n do
begin
if bod[j]>max then
begin
max:=bod[j];
pormax:=j;
maxjm:=jm[j];
stcm:=stc[j];
end;

end;
stc[pormax]:=stc[q];
stc[q]:=stcm;
jm[pormax]:=jm[q];
jm[q]:=maxjm;
bod[pormax]:=bod[q];
bod[q]:=max;
end;

assign(vystup,'C:\listina.txt');
rewrite(vystup);
writeln('Poradi, Startovni cislo, Jmeno, pocet bodu');

for i:=1 to n do
begin
writeln(i,', ',stc[i],', ',jm[i],', ',bod[i]);
end;
readln;
end.


pro zjednodušení jsou v průběhu programu zařezeny cykly výpisy dat. ve finálním programu nebudou. Prosím pomozte najít chybu...Děkuji

Nahlásit jako SPAM
IP: 195.113.181.–
KIIV
~ Moderátor
+43
God of flame
26. 9. 2008   #2
-
0
-

zaprve bych asi pouzil record...
ten se pak i da lepe radit...


takhle asi kdyz radis podle bodu.. asi zapominas prohodit startovni cislo a jmeno

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Mircosoft+1
Věrný člen
27. 9. 2008   #3
-
0
-

Zkus nějak upřesnit pojem "problém s řazením jmen a startovních čísel". Ať na to koukám jak chci důkladně, žádnou chybu nevidím - jména i startovní čísla jsou ošetřena správně. Je pravda, že s jedním polem recordů by to bylo přehlednější než se třemi oddělenými poli, ale to je jenom kosmetický detail bez vlivu na funkci.

Teď mě napadá... nemyslel jsi tím problémem náhodou to, že když má několik závodníků stejný počet bodů, tak bys je chtěl mít seřazené ještě podle startovního čísla nebo jména? Na to bys musel použít ještě jeden řadicí cyklus; to, co tam máš teď, ti řadí jenom podle počtu bodů.

Nahlásit jako SPAM
IP: 85.132.158.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
JohnyE0
Duch
28. 9. 2008   #4
-
0
-

Připojuju soubor kde je ona chyba vidět. Horní polovina - načtená pole bez řezení (odpovídá - sem je to ještě správně) . Dolní polovina - výpis polí po seřazení

Body se seřadí dobře ale jména a startovní čísla jsou špatná. pořadí se generuje samo ve finálním výpisu. Recordem by to bylo jednoduší ale v tomto programu měla být použita pole.

Nahlásit jako SPAM
IP: 88.146.180.–
Mircosoft+1
Věrný člen
28. 9. 2008   #5
-
0
-

To je teda záhada... zkusím si ten program odkrokovat, takovéhle záhady nemám rád :-).

Nahlásit jako SPAM
IP: 85.132.158.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Laaca0
Stálý člen
28. 9. 2008   #6
-
0
-

Já bych nic nekrokoval a celý program bych zjednodušil. Základem je opravdu použití typu record. A řazení bych napsal trochu polopatičtěji:

program razeni_podle_bodu;

uses crt;
type
Tzavodnik = record
jmeno:string[30];
body:integer;
stc:integer;
end;

var
Zavodnik:array[1..100] of TZavodnik;
temp:TZavodnik;
vstup,vystup:text;
n,i:integer;
bylyzmeny:boolean;

begin
clrscr;
assign(vstup,'vstup.txt');
reset(vstup);

n:=0;
while not(eof(vstup)) do
begin
n:=n+1;
readln(vstup,zavodnik[n].stc);
readln(vstup,zavodnik[n].jmeno);
readln(vstup,zavodnik[n].body);
end;

for i:=1 to n do writeln(i,', ',zavodnik[i].stc,', ',
zavodnik[i].jmeno,', ',
zavodnik[i].body);
readln;

repeat
bylyzmeny:=false;
for i:=1 to n-1 do
if zavodnik[i].body<zavodnik[i+1].body then
begin
temp:=zavodnik[i];
zavodnik[i]:=zavodnik[i+1];
zavodnik[i+1]:=temp;
bylyzmeny:=true;
end;
until bylyzmeny=false;
assign(vystup,'listina.txt');
rewrite(vystup);
writeln('Poradi, Startovni cislo, Jmeno, pocet bodu');

for i:=1 to n do writeln(i,', ',zavodnik[i].stc,', ',
zavodnik[i].jmeno,', ',
zavodnik[i].body);

readln;
end.

Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
Mircosoft+1
Věrný člen
28. 9. 2008   #7
-
0
-

Heuréka!
Chyběla tam inicializace maxim:

for q:=1 to (n-1) do

begin
max:=bod[q]; pormax:=q;
maxjm:=jm[q]; stcm:=stc[q]; {<- tohle je potřeba přidat}
for j:=(q+1) to n do
begin
if bod[j]>max then
begin
max:=bod[j];
pormax:=j;
maxjm:=jm[j];
stcm:=stc[j];
end;

end;
stc[pormax]:=stc[q];
stc[q]:=stcm;
jm[pormax]:=jm[q];
jm[q]:=maxjm;
bod[pormax]:=bod[q];
bod[q]:=max;
end;
Jinak je algoritmus v pořádku.

Nahlásit jako SPAM
IP: 89.176.249.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
JohnyE0
Duch
3. 10. 2008   #8
-
0
-

Děkuji za pomoc

Nahlásit jako SPAM
IP: 195.113.181.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 19 hostů

Podobná vlákna

Asp.net - &quot;vysledkova tabulka&quot; — založil Anonymní uživatel

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý