[PASCAL] Zakódování textu

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod GameEs 28. 5. 2011 17:49

Dobře tak jinak. Program už dělá víceméně co chci, problém je ten, když je řetězec dlouhý lichý počet znaků. Pak to poslední znak prostě vynechá.
Takže jak byl kódu: text=“123456hus“, kód = „1s2u3h465“., tak mě to vynechá 5tku na konci.

Tohle mám:
Kód: Vybrat vše
var i,i2:Integer;
var pocet:Integer;
var pocet_pod:Integer;

procedure spocitej;
begin
while(i < length(text1)-1) do begin
if(text1[i]='p') AND (text1[i+1]='o') AND (text1[i+2]='d') then pocet_pod:=pocet_pod+1;
i:=i+1;
end;
end;

begin
writeln('Napis retezec:');
read(text1);
writeln('Pocet znaku:');
writeln(length(text1));
writeln();
writeln('pocet Pod v textu:');
spocitej();
write(pocet_pod);
writeln();
writeln('Pocet vyznamnych znaku:');
for i:=1 to length(text1) do
begin
if(text1[i]<>' ') then pocet:=pocet+1;
end;
write(pocet);
writeln();
if(length(text1)>1000) then writeln('moc dlouhy');
i2:=1;
for i:=1 to (length(text1)div 2) do
begin
insert(text1[i],text_vysledek,i2);
i2:=i2+1;
insert(text1[length(text1)+1-i],text_vysledek,i2);
i2:=i2+1;
end;
writeln('Vysledny text:');
writeln(text_vysledek);
read(i);
end.


Tady ještě popřípadě celé zadání:
Kód: Vybrat vše
Sestavte program, kterým načtete text dlouhý max 1000 znaků. Zjištěte, kolikrát se v textu vyskytuje předložka „pod“. Dále kolik je v textu významných znaků (tj. znaků různých od mezery). Nakonec text zakódujte tak, že budou znaky v tomto pořadí: 1. znak, poslední znak, druhý znak, předposlední znak, 3. znak, předpředposlední znak atd. Použijte funkce či procedury. Výsledný kód poté vypište na obrazovku


Všechno ostatní snad funguje jak má, problém teda bude zřejmě v samotný proceduře. Díky všem co na to mrknou.
GameEs
Kolemjdoucí

Odeslat příspěvekod pepak 28. 5. 2011 19:02

No vidíš, že to jde. I když mám vážné pochybnosti o tom, že jsi si ten program vůbec vyzkoušel, protože obsahuje několik závažných chyb, kterých by sis musel všimnout. Ale aspoň oceníme snahu...

Pokud jde o tvůj konkrétní problém, řešení je víc, ale nejjednodušší bude, když si na konci po proházení znaků uděláš test na počet znaků v řetězci a když bude výsledek liché číslo (funkce Odd), tak natvrdo přidáš prostřední znak (text1[(length(text1) div 2)+1]). Akorát tedy mám za to, že kecáš, protože jak je program napsaný, tak nepůjde ani zkompilovat (chybějící deklarace některých proměnných). No ale to je tvůj boj, pokud nepovažuješ za nutné testovat...

V proceduře Spocitej si dej pozor na to, že teď do výsledku započítáš i slova jako "podvod" nebo "hospoda". Musíš otestovat i znak před a znak za hledaným slovem (buď to musí být ne-písmeno, nebo nesmí existovat, tzn. musí to být mimo hranice řetězce). Jo, hranice - zkoušel jsi ten program vůbec? Protože podle mě ti procedura spocitej spadne na jakémkoliv vstupu delším než 1 znak.

Mimochodem, bývá zvykem proměnné inicializovat a nenechávat je na náhodné hodnotě (proměnné i, pocet_pod v proceduře spocitej) a používat lokální proměnné (proměnná i tamtéž, proměnná pocet, text_vysledek v programu).

Řádek textu čti pomocí readln, ne read.

Dalo by se to samozřejmě napsat podstatně efektivněji a s ošetřenými logickými chybami (napřed testovat, že má string rozumnou délku, a teprve potom s ním pracovat, například), ale pokud je účelem jen to, abys předmětem prošel, tak to by se po opravení výše uvedených chyb mohlo podařit. Za předpokladu, že sis to skutečně psal ty a budeš tudíž schopen učiteli odpovědět na otázky, které bude mít ("Proč používáte Insert?").
pepak
Junior

Odeslat příspěvekod iYuro 28. 5. 2011 19:05

Za prve : nechapem preco nespojis var do jedneho, namiesto toho mas 3 riadky.

Za druhe : problem bude v div. Div je celociselne delenie 9 div 2 bude vzdy 4.

pepak : s tym div je to pravda, zle som si pozrel zadanie. ja by som to asi riesil inac, asi by som vynechal insert a trocha obmenil. to var ma zarazilo len z toho dovodu, ze v prvom riadku ma viac premennych v jednom (i,i2) ale pocet a pocet_pod hadze do novych. napriklad zadefinovanie retazca text1 tam nevidim vobec.
Naposledy upravil iYuro dne 28. 5. 2011 20:40, celkově upraveno 1
iYuro
Kolemjdoucí

Odeslat příspěvekod pepak 28. 5. 2011 19:18

To spadnutí v Spocitej jsem se jen blbě koukal, teď vidím, že by to mělo být OK.

-- 28. 5. 2011 19:28 --

iYuro píše:Za prve : nechapem preco nespojis var do jedneho, namiesto toho mas 3 riadky.

To je fuk, ne? Dělá program proto, aby prolezl předmětem, ne proto, aby dostal pozici šéfprogramátora v Googlu.

Za druhe : problem bude v div. Div je celociselne delenie 9 div 2 bude vzdy 4.

To je naprosto v pořádku, pro tenhle konkrétní účel se to ideálně hodí.
pepak
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků