pascal - športka

Programovacie jazyky, rady, poradňa...
PitBull_4
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 65
Registrovaný: 26 nov 2009, 19:08
Kontaktovať používateľa:

pascal - športka

Príspevok od používateľa PitBull_4 »

Zdravím...

má program vy losovanie 6 čísel v jednom ťahu.
Počet ťahov si zadávam aký chcem.
Na konci mi to musí spočítať, koľko krát bola vylosovaná 1, koľko krát 2 atď.. až do 49 a potom vypísať, ktoré číslo bolo losované najviac krát.

PLS kde mám chybu keď mi to blbne?

Kód: Vybrať všetko

program sportka;

uses crt;

type poles=array[1..49] of integer;
var k,i,o,b,p,n,m,max,q:integer;
    los,pocet:poles;

begin
randomize;
max:=0;
for k:=1 to 49 do pocet[k]:=0;

writeln('     SPORTKA');
writeln;

writeln('Zadaj pocet opakovani losovania');
readln(n);
p:=1;
q:=0;
for m:=1 to n do
begin
   while p<7 do
   begin
      los[p]:=1+random(49);
      if p>1 then
      begin
      q:=0;
      for b:=1 to (p-1) do if los[p]=los[b] then q:=1;
      end;

      if q=0 then
      begin
      pocet[los[p]]:=pocet[los[p]]+1;
      writeln(los[p],'  ',pocet[los[p]]);
      p:=p+1;
      end;
   end;


writeln(m,' Tah:  Vyzrebovane cisla su: ');
writeln;

for p:=1 to (p-1) do writeln(los[p]);

end;


writeln;
writeln;

for o:=1 to 49 do if pocet[o]>max then max:=o;

for i:=1 to 49 do writeln(i:3,' ',pocet[i]);

writeln('Najcastejsie cislo: ',max);
readkey;
end.
[/code]
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Príspevok od používateľa c-ice »

Kód: Vybrať všetko

p:=1; 
musis umiestnit do toho foru lebo ten While sa ti nepusti namiesto toho whilu si mohol dat kludne for pri tomto zapise aký si dal

Kód: Vybrať všetko

for p:=1 to (p-1) do writeln(los[p]); 
wtf toto pascal žere ? že priradiš p=1 a potom to chceš robit do (p-1) čiže do nuly
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

zrebovanie, vypisovanie čísel a rátanie (a teda aj vypísanie počtov) môžeš spraviť v jednom cykle, neviem prečo to takto komplikuješ:

Kód: Vybrať všetko

begin
   while p<7 do
   begin
      los[p]:=1+random(49);
      if p>1 then
      begin
      q:=0;
      for b:=1 to (p-1) do if los[p]=los[b] then q:=1;
      end;

      if q=0 then
      begin
      pocet[los[p]]:=pocet[los[p]]+1;
      writeln(los[p],'  ',pocet[los[p]]);
      p:=p+1;
      end;
   end;


writeln(m,' Tah:  Vyzrebovane cisla su: ');
writeln;

for p:=1 to (p-1) do writeln(los[p]);

end; 
môžeš zapísať ako

Kód: Vybrať všetko

begin
   writeln(m,' Tah:  Vyzrebovane cisla su: ');
   writeln;
   while p<7 do
   begin
      los[p]:=1+random(49);
      pocet[los[p]]:=pocet[los[p]]+1;
      writeln(los[p],'  ',pocet[los[p]]);
      p:=p+1;
   end;
end; 
ten while by som nahradil za for, nemusel by si robiť tie čachre-machre s p
PitBull_4
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 65
Registrovaný: 26 nov 2009, 19:08
Kontaktovať používateľa:

Príspevok od používateľa PitBull_4 »

asi si nepochopil tomu...

to čo tam ja mám, je upravenie žrebovania tak, aby ti v jednom ťahu nikdy nevyžrebovalo 2 rovnaké čísla - to sa nesmie stať..
c-ice napísal:

Kód: Vybrať všetko

p:=1; 
musis umiestnit do toho foru lebo ten While sa ti nepusti namiesto toho whilu si mohol dat kludne for pri tomto zapise aký si dal

Kód: Vybrať všetko

for p:=1 to (p-1) do writeln(los[p]); 
wtf toto pascal žere ? že priradiš p=1 a potom to chceš robit do (p-1) čiže do nuly
ok dal som to tam... mal si pravdu... teraz to ide skoro dobre.
Zdroják som upravil takto:

Kód: Vybrať všetko

program sportka;

uses crt;

type poles=array[1..49] of integer;
var k,i,o,b,p,n,m,max,q:integer;
    los,pocet:poles;

begin
randomize;
max:=0;
for k:=1 to 49 do pocet[k]:=0;

writeln('     SPORTKA');
writeln;

writeln('Zadaj pocet opakovani losovania');
readln(n);
q:=0;
for m:=1 to n do
begin
   p:=1;
   while p<7 do
   begin
      los[p]:=1+random(49);
      if p>1 then
      begin
      q:=0;
      for b:=1 to (p-1) do if los[p]=los[b] then q:=1;
      end;

      if q=0 then
      begin
      pocet[los[p]]:=pocet[los[p]]+1;
      p:=p+1;
      end;
   end;

writeln;
writeln(m,' Tah:  Vyzrebovane cisla su: ');
writeln;

for p:=1 to (p-1) do write(' ',los[p]:4);
writeln;
end;


writeln;
writeln;

for o:=1 to 49 do if pocet[o]>max then max:=o;

for i:=1 to 49 do writeln(i:3,' ',pocet[i]);

writeln('Najcastejsie cislo: ',max);
readkey;
end.
no na výpise mi napíše že napr. číslo 2 bolo vyžrebované 3 krát... a číslo 34 bolo vytiahnuté 4 krát... a ako maximum mi vypíše číslo 2. PREČO???
Mám tušáka, že do poľa sa k jednému číslo zapíše viac hodnôt... a potom to píše blbosti...

PS: a k tomuto:
c-ice napísal:

Kód: Vybrať všetko

for p:=1 to (p-1) do writeln(los[p]); 
wtf toto pascal žere ? že priradiš p=1 a potom to chceš robit do (p-1) čiže do nuly
keď dáš v cykle FOR P:=1 tak to neznamená, že sa bude rovnať hodnota P=1. Len začnem od 1 až po P prípadne P-1 v mojom prípade. P ostáva nedotknuté. ;)
Napísať odpoveď