Nejdelsi slovo a jeho velikost.. – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Nejdelsi slovo a jeho velikost.. – Pascal – Fórum – Programujte.comNejdelsi slovo a jeho velikost.. – Pascal – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
vasekk0
Duch
24. 5. 2011   #1
-
0
-

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

Nahlásit jako SPAM
IP: 77.240.176.–
Reklama
Reklama
JoDiK
~ Anonymní uživatel
981 příspěvků
24. 5. 2011   #2
-
0
-

Žá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)

Nahlásit jako SPAM
IP: 88.103.233.–
blahacek0
Newbie
1. 6. 2011   #3
-
0
-

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.

Nahlásit jako SPAM
IP: 46.33.96.–
JoDiK
~ Anonymní uživatel
981 příspěvků
1. 6. 2011   #4
-
0
-

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)"

Nahlásit jako SPAM
IP: 88.103.233.–
vasekk0
Duch
1. 6. 2011   #5
-
0
-

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.

Nahlásit jako SPAM
IP: 93.99.142.–
vasekk0
Duch
1. 6. 2011   #6
-
0
-

kdyz to tam vlozim

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);

tak uz me prestane fugovat veschno..nevite v čem je chyba?

Nahlásit jako SPAM
IP: 93.99.142.–
nervak0
Věrný člen
1. 6. 2011   #7
-
0
-

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)]);

Nahlásit jako SPAM
IP: 213.211.51.–
nervak0
Věrný člen
1. 6. 2011   #8
-
0
-

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.

Nahlásit jako SPAM
IP: 213.211.51.–
JoDiK
~ Anonymní uživatel
981 příspěvků
2. 6. 2011   #9
-
0
-

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.

Nahlásit jako SPAM
IP: 88.103.236.–
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

Slovo v proměnné — založil Nadšenec

Jedno slovo v textfile — založil Juraj

Nejkratší slovo ve větě. — založil JaNevimCoDelat

Moderátoři diskuze

 

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