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

Pascal – Pascal – Fórum – Programujte.comPascal – Pascal – Fórum – Programujte.com

 

Lasserus
~ Anonymní uživatel
12 příspěvků
23. 5. 2011   #1
-
0
-

Potřebuju poradit s programem, který počítá kolik slov začíná a končí stejným písmenem. Prosím pomožte, už si fakt nevím rady.

Nahlásit jako SPAM
IP: 46.33.102.–
crAzY^
~ Moderátor
+10
Grafoman
23. 5. 2011   #2
-
0
-

co přesně nevíš? Navrhnout algoritmus? Implementovat?

Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
Lasserus
~ Anonymní uživatel
12 příspěvků
23. 5. 2011   #3
-
0
-

To crAzY^ : to druhý spíše

Nahlásit jako SPAM
IP: 46.33.102.–
Krychlik
~ Anonymní uživatel
195 příspěvků
23. 5. 2011   #4
-
0
-

tak sem hod ten algoritmus a kod, ktery zatim mas.

Nahlásit jako SPAM
IP: 78.128.199.–
Lasserus
~ Anonymní uživatel
12 příspěvků
23. 5. 2011   #5
-
0
-

no právě algoritmus taky nemám

Nahlásit jako SPAM
IP: 77.240.176.–
KIIV
~ Moderátor
+43
God of flame
23. 5. 2011   #6
-
0
-

To Lasserus : tak jak bys to delal ty, kdybys to mel delat jen na papire...

dalsi uroven: predstav si ze mas omezenou pamet, hlavne musis vedet presne kam a co ukladas... a ze muzes udelat jen jednu akci najednou

Nahlásit jako SPAM
IP: 212.136.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Lasserus0
Duch
23. 5. 2011   #7
-
0
-

To KIIV : no nejdřív bych vyhledal mezery a to co je za mezerou a před mezerou tak bych to srovnal a to co je stejný tak bych akorát sečetl

Nahlásit jako SPAM
IP: 46.33.102.–
Lasserus0
Duch
23. 5. 2011   #8
-
0
-

program PRACPRG;
uses crt;
var nevyskyt,i,p,r,a,s,n,k,t,x:integer;
text:string[255];
nevy:string[225];
begin
clrscr;
write('Zadej text: ');
readln (text);
n:= length (text);
p:=0;
konce:=['.','?','!'];
for i:=1 to length(text) do
if text[i] in konce then p:=p+1;
writeln('Text obsahuje ',p,' vet.');
s:=0;
for r:=1 to length(text) do
if (text[r]='a') and ((text[r+1]=' ') or (text[r+1]=',') or (text[r+1] in konce) or (text[r+1]='!'))
then s:=s+1;
if text[n]='a' then s:=s+1;
writeln('Text obsahuje ',s,' acek na konci slova.');
***




readln(text);
nevy:='';
for i:=65 to 90 do
if pos(chr(k),text)=0 then
nevy:=nevy+chr(k);
for i:=97 to 122 do
if pos(chr(k),text)=0 then
nevy:=nevy+chr(k);
writeln(nevy);
readln;
end.

***Kolik slov začíná a končí stejným písmenem.

Nahlásit jako SPAM
IP: 46.33.102.–
KIIV
~ Moderátor
+43
God of flame
23. 5. 2011   #9
-
0
-

no a ted si predstav ze kdyz mas pismena tak je ukladas do nejake promenne (tim ti vznika slovo) a kdyz narazis na neco co pismeno neni, tak to slovo zpracujes... tj. prvni a posledni pismeno srovnas.. a kdyz sou stejne prictes nekam jednicku - jako pocet slov ktere zacinaji a konci jednickou...
a pak znova

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Lasserus0
Duch
23. 5. 2011   #10
-
0
-

tomu jaksi nechápu to snad něco takové?
[ if ' 'n+1 = ' ' n-1 stejné:=1 ]
to co je za mezerou a to co je před mezerou jestli se rovná tak někam přiřadím jedna?

Nahlásit jako SPAM
IP: 46.33.102.–
Mircosoft+1
Věrný člen
24. 5. 2011   #11
-
0
-

Jen tak mimochodem, ten tvůj (?) program dělá něco úplně jiného...

Zadání je tak trochu nepřesné. Mluví se o slovech, které mají první písmeno stejné jako poslední, nebo o slovech, které všechna začínají jedním a končí druhým písmenem?

Začni tím, že si zadaný text rozložíš na slova a vypíšeš je na samostatné řádky. Zhruba nějak takhle:

Vstup:
'Tohle je věta, kterou chci rozložit. Tohle taky!'

Výstup:
'Tohle'
'je'
'věta'
'kterou'
'chci'
'rozložit'
'Tohle'
'taky'

Jakmile máš slova takhle zvlášť, už není problém porovnat první a poslední písmeno (if slovo[1]=slovo[length(slovo)] then ...). Samozřejmě je dobré předtím všechno převést na velká písmena (funkce Upcase), jinak by třeba 'Anča' vyšlo jako neshoda (protože 'A'<>'a').

A jak najít slova? Třeba takhle:

Do proměnné Věta typu string si nech zadat text k prohledání.

Máš dvě celočíselné proměnné Začátek a Délka, do kterých si budeš ukládat, kde slovo začíná a jak je dlouhé. Obě teď vynuluj.
/ Cyklus (While), který pojede tak dlouho, dokud se Začátkem nedostaneme za konec Věty:
|/ Cyklus (While), který pojede tak dlouho, dokud se Začátkem nedostaneme za konec Věty:
|| Začátek zvyš o 1 (tj. posuň se ve Větě o jeden znak dál).
|\ Jestli znak na pozici Začátku je něco, z čeho se může skládat slovo (tedy asi písmena nebo číslice), nastav Délku na 1 a ukonči cyklus (příkaz Break), jinak ho nech běžet dál.
|/ Další cyklus (opět While), který opět pojede tak dlouho, dokud se Začátkem nedostaneme za konec Věty:
|\ Jestli je znak na pozici Začátek+Délka něco, z čeho se může skládat slovo, zvyš délku o 1, jinak ukonči cyklus (Break).
| Jestli je Začátek>délka Věty, ukonči cyklus (break), už nemáme co zpracovávat.
| Teď ti Začátek ukazuje na první znak nalezeného slova a v Délce máš uloženo, z kolika písmen se skládá. Vykopíruj si ho funkcí Copy do samostatné proměnné typu string a zpracuj ho podle potřeby (teď např. Writeln).
\ K Začátku přičti Délku a Délku potom vynuluj. Tím se dostaneš za právě zpracované slovo.

Nahlásit jako SPAM
IP: 141.202.248.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Lasserus
~ Anonymní uživatel
12 příspěvků
25. 5. 2011   #12
-
0
-

Ahoj jak už jsem řekl ten prográmek má počítatat kolik slov začíná a končí stejným písmenem jako třeba aha, anakonda, mám, ... atdTo Mircosoft : díky za to že mi chceš pomoct

Nahlásit jako SPAM
IP: 46.33.102.–
Mircosoft+1
Věrný člen
25. 5. 2011   #13
-
0
-

Tak v tom případě ti stačí porovnat první písmeno slova s posledním a jestli jsou stejné, něco s tím udělat.
Prvním krokem každopádně zůstává vytahání slov ze vstupního textu. Jak jsi daleko?

Nahlásit jako SPAM
IP: 208.232.182.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Lasserus
~ Anonymní uživatel
12 příspěvků
25. 5. 2011   #14
-
0
-

... atdTo Mircosoft [#142460]:No právě ja bych potřeboval trochku pomoct s tým programem (jako s kódem). Prosím moc.

Nahlásit jako SPAM
IP: 46.33.102.–
Mircosoft+1
Věrný člen
26. 5. 2011   #15
-
0
-

Jak moc "trochku"? Jako takhle: http://mircosoft.ic.cz/texty/ZAKLADY.TXT?
Nebo snad takhle:

program RozborVety;

var veta,slovo:string;
zacatek,delka,PocetNalezenycSlov:integer;
BEGIN
writeln;
writeln('Program na pocitani slov se stejnym pismenem na zacatku jako na konci');
writeln('=====================================================================');
writeln;
write('Zadej vetu, ktera se ma prozkoumat: ');
readln(veta);

zacatek:=0;
delka:=0;
...algoritmus jsem ti popsal o par prispevku vys, staci ho prelozit do Pascalu...

writeln('Zadana veta obsahuje ',pocetnalezenychslov,' slov, ktera zacinaji');
writeln('a konci stejnym pismenem.');
writeln;
writeln('Pro ukonceni stiskni Enter.);
readln;
END.
?

Nahlásit jako SPAM
IP: 141.202.248.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Lasserus
~ Anonymní uživatel
12 příspěvků
26. 5. 2011   #16
-
0
-

To Mircosoft : prosím tě nemohl bys mi to napsat do teho protože jak to tam máš napsaný tak jsem to už vůbec nepochpil dík

Nahlásit jako SPAM
IP: 46.33.102.–
Mircosoft+1
Věrný člen
27. 5. 2011   #17
-
0
-

Ne. To už bych to za tebe musel napsat celé. Jestli neuvidím, že se aspoň trochu snažíš (a kopírování kusů kódu od ostatních za snahu nepovažuju), tak ti nepomůžu. Je to tvoje škola, ne moje.

Když už nic jiného, tak se aspoň ptej na konkrétní věci.

Nahlásit jako SPAM
IP: 208.232.182.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Lasserus0
Duch
27. 5. 2011   #18
-
0
-

To Mircosoft : prosím já to je pouze jenom podprogram se kterým si fakt nevím rady jinak zadání celé práce je
Zadání: Na vstupu je dán text (max. 255 znaků).
Zjisti a) Kolik obsahuje vět (věta je zakončená ., !, ?). Mám
b) Kolik slov končí písmenem a. Mám
c) Která písmena anglické abecedy se v textu nevyskytují. Mám
d) Kolik slov začíná a končí stejným písmenem. Nemám

Moc prosím.

Nahlásit jako SPAM
IP: 46.33.102.–
JoDiK
~ Anonymní uživatel
987 příspěvků
28. 5. 2011   #19
-
0
-

To Lasserus :
V tom, co si myslíš, že už máš, je několik chybek. Například při hledání počtu písmen "a" na konci slov procházíš zadanou větu od prvního znaku do posledního a včetně toho posledního (pokud se jedná o "a") zkoumáš, jestli následující znak není oddělovač. Ale za posledním znakem "(text[r+1]=' ')" už nemáš co zkoumat - jsi mimo zadanou větu a pokud zadáš větu 255 znaků dlouhou, už jsi i mimo rozsah proměné! Je pravda, že aby program skončil chybou 201 musel by být poslední znak "a", to ale dokonce předpokládáš a posichroval sis to zvlášť příkazem: "if text[n]='a' then s:=s+1;"

Já bych spíš předpokládal, že budou jasně dány podmínky vstupu, například že nepředpokládáme chybně zapsaný text a že každá (i poslední věta) je regulerně ukončena. Pak nemusíš dělat takovéto nestandardní záležitosti.
Pak mě překvapilo, že když správně u počítání vět využíváš množinu, proč jsi to tak děsně zamotal u počítání písmen "a" na konci slov - proč tam zdvojeně zkoumáš ukončovací znaky vět jednou z množiny konce a pak ještě extra po jednom?
Vždyť tam stačí napsat, že následující znak musí být z množiny tvořené sloučením množiny [' '] a už nachystané množiny konce.

if (text[r]='a') and (text[r+1] in [' ']+konce)


No a jestli platí ta verze co máš na začátku, proč před počítáním písmen, které se nevyskytují, znovu čteš větu?
Každopádně ti to nefunguje - sis tam nějak popletl řídící proměnnou cyklu. Navíc mám takové tušení, že u tohodle zkoumání se asi nemají rozlišovat velká a malá písmena...

A pokud ti na ten poslední úkol nestačí rady trpělivého Mircosofta, zkusím ještě něco já...
Co třeba takto:
Potřebujeme zjistit počáteční a koncové znaky slov... Zavedeme si tedy dvě proměnné - zs a ks (začátek a konec slova typu znak).
První písmeno zadání je i prvním písmenem prvního slova že? Tak ho tam přiřadíme.
No a teď projdeme celý vstupní text od prvního do předposledního znaku a u každého zkoumáme, zda následující znak za právě zkoumaným je mezera nebo oddělovač vět, pokud tomu tak je, našli jsme poslední znak ve slově. Tak si ho uložíme a porovnáme s tím prvním (samozřejmě nezávisle na tom, jestli je to velké/malé písmeno). Máme-li shodu, přičteme si počet takových slov. Nezapomeneme pro další slovo nastavit počáteční písmeno. To se dá udělat buď tak, že tam přiřadíme znak o dva dál (pokued ovšem nejsme už na předposledním znaku zadání), nebo se to dá vyřešit i tak, že pokud aktuální znak je mezera nebo oddělovač vět, následující znak musí být prvním znakem dalšího slova...

To bys mohl zvládnout napsat ne?

Nahlásit jako SPAM
IP: 88.100.43.–
Lasserus0
Duch
28. 5. 2011   #20
-
0
-

To JoDiK : toto je aktuální verze:
program PRACPRG;
uses crt;
var i,p,r,a,s,n,k,t:integer;
konce: set of char;
text:string[255];

procedure POSLEDNI;
var nevy: string;
i: integer;
begin
nevy:='';
for i:=65 to 90 do
if pos(chr(i),text)=0 then
nevy:=nevy+chr(i);
for i:=97 to 122 do
if pos(chr(i),text)=0 then
nevy:=nevy+chr(i);
writeln('V textu se nevyzkytuji tyto znaky anglicke abecedy:');
writeln;
write(nevy);
readln;
end;

begin
clrscr;
write('Zadej text: ');
writeln;
readln (text);
writeln('===========================================================');
writeln;
n:= length (text);
p:=0;
konce:=['.','?','!'];
for i:=1 to length(text) do
if text[i] in konce then p:=p+1;
if p=0 then writeln('Text neobsahuje zadnou vetu!') else
writeln('Text obsahuje ',p,' vet.');
writeln;
s:=0;
for r:=1 to length(text) do
if (text[r]='a') and
((text[r+1]=' ')
or (text[r+1]=',')
or (text[r+1] in konce)
or (text[r+1]='!'))
then s:=s+1;
if text[n]='a' then s:=s+1;
if s=0 then writeln('Text neobsahuje zadne acka na konci slov!') else
writeln('Text obsahuje ',s,' acek na konci slov.');
writeln;

POSLEDNI;

end.



Nahlásit jako SPAM
IP: 46.33.102.–
JoDiK
~ Anonymní uživatel
987 příspěvků
28. 5. 2011   #21
-
0
-

To Lasserus :
Tak si tam oprav ty chyby a zkus dodělat ten poslední úkol. Byl můj navržený postup srozumitelný?

Nahlásit jako SPAM
IP: 88.100.43.–
Lasserus0
Duch
28. 5. 2011   #22
-
0
-

S kamošem jsme uvažovali trochu
program PRACPRG;
uses crt;
var i,p,r,a,s,n,k,t:integer;
konce: set of char;
text: string[255];
procedure POSLEDNI;
var nevy:string;
i:integer;
begin
nevy:='';
for i:=65 to 90 do
if pos(chr(i), text)=0 then
nevy:=nevy+chr(i);
for i:=97 to 122 do
if pos(chr(i), text)=0 then
nevy:=nevy+chr(i);
writeln('V textu se nevyzkytuji tyto znaky anglicke abecedy: ');
writeln;
writeln(nevy);
readln;
end;

procedure PREDPOS;
var alphabet: set of char;
n,b: integer;
begin
alphabet:=[a,b,c,d,e,f,g,h,ch,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,Ch,I,J,K,L,M,O,P,Q,R,S,T,U,V,W,X,Y,Z];
while n<=lenght(text)
if b[n] in alphabet then b:=b+1;
n:=n+1;
writeln('Slov kterych začinaji a konci stejným pismenem je ',b,'.);
readln;
end;

begin
clrscr;
write('Zadej text bez diakritiky: ');
writeln;
readln(text);
writeln('===========================================================');
n:= length (text);
p:=0;
konce:=['.','?','!'];
for i:=1 to length(text) do
if text[i] in konce then p:=p+1;
if p=0 then writeln ('Text neobsahuje zadnou vetu')
else writeln('Text obsahuje ',p,' vet.');
writeln('===========================================================');
s:=0;
for r:=1 to length(text) do
if (text[r]='a') and ((text[r+1]=' ')
or (text[r+1]=',')
or (text[r+1]= '?')
or (text[r+1]='!'))
then s:=s+1;
if text[n]='a' then s:=s+1;
if s=1 then writeln('Text obsahuje ',s,' acko na konci slova.') else
s=0 then writeln('Text neobsahuje zadne acka na konci slov.')else
s>1 then writeln('Text obsahuje ',s,' acek na konci slova.');
writeln('===========================================================');
POSLEDNI;
writeln('===========================================================');
PREDPOS;
writeln('===========================================================');
readln;

end.

Nahlásit jako SPAM
IP: 46.33.102.–
JoDiK
~ Anonymní uživatel
987 příspěvků
29. 5. 2011   #23
-
0
-

To Lasserus :
A to když jste na tom s tím kámošem pracovali, to jste jako tak na sucho furt psali a ani jednou jste to nezpompilovali? Vždyť je tam hafo syntaktických chyb a to nemluvím o těch logických...

Nahlásit jako SPAM
IP: 88.100.43.–
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, 12 hostů

Podobná vlákna

Pascal: kurz turbo pascal II — založil Systém

Pascal — založil Nemtudom

Pascal — založil Systém

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ý