Zdar.Potreboval bych poradit jak vypsat nejdelsi slovo a jeho velikost ze zadane vety...vim ze mam vetu nejak rozdelit na jednotliva slova...ale vubec nevim jake funkce to rozdelit ani potom porovnat.Dik za rady
Fórum › Pascal
Nejdelsi slovo a jeho velikost..
Žádná funkce na dělení na slova není, takže jediná funkce, kterou budeš potřebovat je asi jen:
Length(s) - vrátí aktuální délku řetězce
Takže tvůj úkol je projít vstupní řetězec znak po znaku a hledat oddělovače slov. Všechna písmenka si skládáš do pomocné proměnné a jak narazíš na oddělovač (nebo konec vstupu) máš jedno slovo. Zjistíš, jestli je delší než posledně nalezené slovo (další proměnná třeba maxslovo) a když ano, tak ho nahradíš (klasické hledání maxima - výchozí hodnota max bude prázdné slovo - délka 0) a vynuluješ pomocnou proměnnou. Pokračuješ až do konce vstupního řetězce. Na konci vypíšeš max a legth(max)
ahoj, tak jsem to udělal, tak, jak jsi to napsal, ale nejde to:
program ROCNIKOV;
uses crt;
var veta:string[100];
k,l,p,s,i:integer;
nejdelsi:string[100];
maxslovo:integer;
max:integer;
begin
clrscr;
textcolor(green);
write(' ROCNIKOVA PRACE');
writeln;
textcolor(red);
write(' Zdenek Blaha');
writeln;
writeln;
textcolor(7);
p:=0;
s:=1;
l:=0;
k:=0;
max:=0;
textcolor(brown);
write('Zadej vetu:');
textcolor(7);
writeln;
readln(veta);
for i:= 1 to length(veta) do
begin
if (veta[i]='a') or (veta[i]='A') then p:=p+1;
end;
writeln('Pocet acek:',p);
for i:=1 to length(veta) do
begin
if (veta[i]=' ') and (veta[i+1]<>' ')and (veta[i+1]<>'!')and (veta[i+1]<>'?') and (veta[i+1]<>',') then s:=s+1;
end;
writeln('Pocet slov:',s);
for i:=1 to length(veta) do
begin
if (veta[i]<>' ') and (veta[i]<>'.') and (veta[i]<>',') and (veta[i]<>'!') and (veta[i]<>'?') then k:=k+1
else begin
if k=5 then l:=l+1;
k:=0;
end;
end;
begin
if (veta[i]<>' ') and (veta[i]<>'.') and (veta[i]<>',') and (veta[i]<>'!') and (veta[i]<>'?') then k:=k+1
else begin
if maxslovo>k then maxslovo:=max;
maxslovo:=0;
end;
end;
writeln('Pocet petipismennych slov:',l);
writeln('Nejdelsi slovo:',max,'a jeho velikost:',length(max));
readln;
end.
To blahacek :
tak jsem to udělal, tak, jak jsi to napsal
Neudělaljsi to jakjsem to napsal.
1: psal jsem "projít vstupní řetězec znak po znaku a hledat oddělovače slov"
ty nic neprocházíš, zkoumáš jen poslední znak ze vstupní věty, tak jak zůstala nastavená proměnná i z minulé akce. Použij znovu cyklus FOR.
2: psal jsem "Všechna písmenka si skládáš do pomocné proměnné"
neskládáš nic, tak potom nemáš s čím porovnávat maxslovo, takže třeba pomocná proměnná slovo, do které budeš přičítat jednotlivé zkoumané znaky, pokud to nejsou oddělovače.
3: psal jsem "jak narazíš na oddělovač (nebo konec vstupu) máš jedno slovo. Zjistíš, jestli je delší než posledně nalezené slovo (další proměnná třeba maxslovo) a když ano, tak ho nahradíš "
tady jsem tě asi trochu zmátl, navrhnul jsem maxslovo a pak psal už jenom max. Takže místo max piš maxslovo...
"Na konci vypíšeš maxslovo a legth(maxslovo)"
Já sem to napsal takhle a taky to nejede xD
program ROCNIKOVKA;
uses crt;
var veta:string[100];
pocetslov,slovo,sest,mezera,nejslovo,i1:integer;
a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,r1:integer;
nejdelsi,delka:integer;
begin
nejdelsi:=0;
delka:=0;
clrscr;
textcolor(yellow);
write('ROCNIKOVA PRACE-Vavlav Lezak');
writeln;
writeln;
textcolor(11);
write('Zadej vetu:');
readln(veta);
writeln;
textcolor(yellow);
write('Vypis:');
writeln;
writeln;
textcolor(11);
for i:=1 to length(veta) do begin
while veta[i]<>' ' do delka:=delka+1;
if delka>nejdelsi then nejdelsi:=delka;
if veta[i]=' ' then delka:=0;
end;
writeln('nejdelsi slovo je:',nejdelsi,' a jeho velikost je:',delka);
begin
for i:=1 to length(veta) do
if (veta[i]='A') then a:=a+1;
if a=2 then writeln('Pismeno "a" je ve vete 2x');
if (veta[i]='B') then b:=b+1;
if b=2 then writeln('Pismeno "b" je ve vete 2x');
if (veta[i]='C') then c:=c+1;
if c=2 then writeln('Pismeno "c" je ve vete 2x');
if (veta[i]='D') then d:=d+1;
if d=2 then writeln('Pismeno "d" je ve vete 2x');
if (veta[i]='E') then e:=e+1;
if e=2 then writeln('Pismeno "e" je ve vete 2x');
if (veta[i]='F') then f:=f+1;
if f=2 then writeln('Pismeno "f" je ve vete 2x');
if (veta[i]='G') then g:=g+1;
if g=2 then writeln('Pismeno "g" je ve vete 2x');
if (veta[i]='H') then h:=h+1;
if h=2 then writeln('Pismeno "h" je ve vete 2x');
if (veta[i]='I') then i:=i+1;
if i=2 then writeln('Pismeno "i" je ve vete 2x');
if (veta[i]='J') then j:=j+1;
if j=2 then writeln('Pismeno "j" je ve vete 2x');
if (veta[i]='K') then k:=k+1;
if k=2 then writeln('Pismeno "k" je ve vete 2x');
if (veta[i]='L') then l:=l+1;
if l=2 then writeln('Pismeno "l" je ve vete 2x');
if (veta[i]='M') then m:=m+1;
if m=2 then writeln('Pismeno "m" je ve vete 2x');
if (veta[i]='N') then n:=n+1;
if n=2 then writeln('Pismeno "n" je ve vete 2x');
if (veta[i]='O') then o:=o+1;
if o=2 then writeln('Pismeno "o" je ve vete 2x');
if (veta[i]='P') then p:=p+1;
if p=2 then writeln('Pismeno "p" je ve vete 2x');
if (veta[i]='Q') then q:=q+1;
if q=2 then writeln('Pismeno "q" je ve vete 2x');
if (veta[i]='R') then r:=r+1;
if r=2 then writeln('Pismeno "r" je ve vete 2x');
if (veta[i]='S') then s:=s+1;
if s=2 then writeln('Pismeno "s" je ve vete 2x');
if (veta[i]='T') then t:=t+1;
if t=2 then writeln('Pismeno "t" je ve vete 2x');
if (veta[i]='U') then u:=u+1;
if u=2 then writeln('Pismeno "u" je ve vete 2x');
if (veta[i]='V') then v:=v+1;
if v=2 then writeln('Pismeno "v" je ve vete 2x');
if (veta[i]='W') then w:=w+1;
if w=2 then writeln('Pismeno "w" je ve vete 2x');
if (veta[i]='X') then x:=x+1;
if x=2 then writeln('Pismeno "x" je ve vete 2x');
if (veta[i]='Y') then y:=y+1;
if y=2 then writeln('Pismeno "y" je ve vete 2x');
if (veta[i]='Z') then z:=z+1;
if z=2 then writeln('Pismeno "z" je ve vete 2x');
end;
for i:=1 to length(veta) do
begin
if (veta[i]=' ') and (veta[i+1]<>' ')and (veta[i+1]<>'!')and (veta[i+1]<>'?') and (veta[i+1]<>',') then pocetslov:=pocetslov+1;
end;
writeln('Veta obsahuje:',pocetslov+1 ,'slov');
for i:=1 to length(veta) do
begin
if (veta[i]<>' ') and (veta[i]<>'.') and (veta[i]<>',') and (veta[i]<>'!') and (veta[i]<>'?') then mezera:=mezera+1
else begin
if mezera>6 then sest:=sest+1;
mezera:=0;
end;
end;
writeln('Pocet slov vetsich nez 6:',sest);
readln;
end.
kdyz to tam vlozim
tak uz me prestane fugovat veschno..nevite v čem je chyba?for i:=1 to length(veta) do begin
while veta[i]<>' ' do delka:=delka+1;
if delka>nejdelsi then nejdelsi:=delka;
if veta[i]=' ' then delka:=0;
end;
writeln('nejdelsi slovo je:',nejdelsi,' a jeho velikost je:',delka);
To vasekk : Ten while se ti na první mezeře zacyklí.
A na to počítání výskytu znaků nepotřebuješ tolik proměnných, použij pole.
{ deklarace }
znak: char;
vyskyty: array ['A'..'Z'] of integer;
...
{ inicializace }
for znak := 'A' to 'Z' do
vyskyty[znak] := 0;
...
{ pocitani vyskytu }
inc(vyskyty[upcase(znak)]);
A nevymýšlejte u toho rozdělování na slova kraviny. Jak už napsal JoDiK, projděte větu po znacích a hledejte oddělovače (explicitně oddělovací znaky, nebo prostě všechno, co nepatří do slova).
{ chytam slova podle oddelovace za nimi }
{ zajistim, ze i za poslednim neco bude }
veta := veta + '.';
slovo := '';
for i := 1 to length(veta) do
begin
if upcase(veta[i]) in ['A'..'Z'] then
begin
slovo := slovo + veta[i];
continue;
end;
if slovo = '' then
continue;
{ hotovo, zpracujte slovo, jak potrebujete }
writeln(slovo);
{ jdeme na dalsi }
slovo := '';
end;
Bacha, bere to jen písmena. Upravte si to, pokud chcete víc.
To vasekk :
No nic, jedna z forem uceni se je i z hotoveho kodu. Tak zkoumejte:
var
veta : string;
i : integer;
slovo, maxslovo : string;
begin
veta:='Toto je veta s ruzne dlouhymi slovy, ze ktere se ma vypsat to nejdelsi.';
writeln(veta);
slovo:=''; maxslovo:=''; {vynulovani pomocnych promennych}
for i:=1 to length(veta) do {projdeme vsechny znaky z vety po jednom}
begin
if not(veta[i] in [' ','.',',','!','?']) {kdyz to neni oddelovac}
then {je to nejake pismenko}
slovo:=slovo+veta[i] {a tak skladame nalezena pismenka do slova}
else {je to oddelovac mezi slovy a tim padem mame ukoncene nejake slovo}
begin
writeln(slovo,' : ',length(slovo)); {kontrolni vypis nalezeneho slova}
if length(slovo)>length(maxslovo)
then maxslovo:=slovo; {hledame nejdelsi slovo}
slovo:=''; {priprava pro hledani dalsiho slova, minule vymazeme}
end end;
writeln;
writeln('Nejdelsi slovo : ', maxslovo,' : ',length(maxslovo));
end.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Varchar parametr u stored procedure - jak získat jeho max. velikost? — založil hlucheucho
Ako sa dá vypísať slovo do súboru pod slovo ktoré už v súbore je — založil letsthrowq
Fscan r+, vypsat slovo a vypsané slovo změnit — založil mader
Jak najít nejdelší text v seznamu — založil Marko
Délka nejdelší vzestupně uspořádané podposloupnosti — založil Tomáš
Moderátoři diskuze