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
dobry den
na tomto foru jsem dnes poprve
zajimalo by me jak resit cetnost slov a vypsani prvnich dejme tomu peti nejcetnejsich
mam navrh
slovo:='';
while a<>ord(32) do
begin
read(a);
slovo:=slovo+a;
end;
pak mit dve pole v prvnim met slova a pro kazde nove slovo zkoumat jestli uz se vyskytlo pokud ano pak zvysit cetnost v druhem poli
pokud ne tak by se do prazdneho pole dalo slovo neco jako
for i:=1 to 1000 do
begin
if pole[i]=slovo then
inc(q[i])
else begin
if pole[i]=0 then
pole[i]:=slovo;
inc(q[i]);
break;
end;
if pole[i]=slovo then break;{abych se dostal z forcyklu a nactu dalsi slovo dokud nebude konec souboru}
end;
problem je ze mi to pri nacteni nacte i mezeru do slovo a take mi to nechce nacist dalsi slovo protoze v promenne a je mezera
dekuju
Offline
↑ gigo:
Dobrý den,
Takže problém je jen v této části?
slovo:=''; while a<>ord(32) do begin read(a); slovo:=slovo+a; end;
Co třeba to udělat takto:
slovo:=''; read(a); while a<>ord(32) do begin slovo:=slovo+a; read(a); end;
Totiž že se nejprve kontroluje jestli to není mezera a pak se to uloží.
Offline
↑ TomDlask:
jo a jeste by me zajimalo jak potom prochazet 'q'
napada me
z:=0;
while z<5 do
begin
abs:=0;
for i:=1 to 1000 do
begin
max:=q[i];
if max>abs then
begin
abs:=max;
j:=i;
end;
end;
write(pole[j],' ');
write(q[j]);
q[j]:=0;
inc(z);
end;
to je to co me ted napadlo
vypada to snad ok
Offline
↑ gigo: Takže se projede celé pole q než najdeš nejvyšší, ten vypíšeš a zmenšíš hodnotu na 0 - tohle se opakuje pětkrát... Spouštět jsem to nezkoušel, ale od pohledu by to mohlo být funkční. To bude složitost přibližně O(N), kde N je počet slov - nemyslím, že je špatná.
Offline