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

Seminární práce – Pascal – Fórum – Programujte.comSeminární práce – Pascal – Fórum – Programujte.com

 

marwe.k0
Duch
8. 6. 2008   #1
-
0
-

Ahoj,
.
Děkuji

Nahlásit jako SPAM
IP: 85.70.28.–
Mircosoft+1
Věrný člen
8. 6. 2008   #2
-
0
-

Takže jestli to dobře chápu, máš několik řetězců (string), které potřebuješ složit do jednoho. Hmm... zkusme to třeba takhle:

1) Deklaruj si pomocný řetězec, do kterého budeš ukládat výsledky, na začátku do něj vlož jeden ze zadaných fragmentů (tento fragment vyřaď ze seznamu, který budeš ještě zpracovávat).
2) Pro n od 6 do 10:
- Vezmi n znaků ze začátku toho pomocného řetězce (funkce Copy).
- Projdi postupně všechny zbývající fragmenty, vezmi z nich stejným způsobem konce a porovnej s tím začátkem.
- Pokud je některý konec stejný jako ten začátek, tak:
a) Ten konec z příslušného fragmentu ukroj (procedura Delete),
b) zbylou část fragmentu připoj zleva k pomocnému řetězci,
c) tento fragment vyřaď ze seznamu (abys ho nezačal zpracovávat podruhé),
d) ukonči tento cyklus (třeba příkazem Break nebo nějakou podmínkou) a začni znovu od bodu 2.
- Pokud jsme ještě tady, zleva se nic připojit nedá. Tak to celé proveď ještě jednou pro druhý konec řetězce (porovnávej konec pomocného řetězce se začátky fragmentů, v případě shody je připojuj zprava).
3) To celé opakuj tak dlouho, dokud nezpracuješ a nepřipojíš všechny fragmenty.
4) Výsledek je v tom pomocném řetězci.

Pozice fragmentů ve výsledném textu bych hledal až potom, co by byl celý text složený - na takovéhle věci je ideální funkce Pos.

Nahlásit jako SPAM
IP: 85.132.158.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
marwe.k0
Duch
8. 6. 2008   #3
-
0
-

mno, tak z toho moc chytřejší nejsem, kolik času by zabralo napsat sem zdrojový kod? aspoň nějak polopatě. Děkuji

Nahlásit jako SPAM
IP: 85.70.28.–
Mircosoft+1
Věrný člen
10. 6. 2008   #4
-
0
-

Dobrá, tady máš malý polopatický náznak:

const max=... {kolik fragmentu maximalne dostanes?}


var fragmenty:array[1..max] of record
obsah:string;
zpracovan:boolean;
end;
vysledek:string;

i,n:word;
pom:string;
...

{inicializace:}
for i:=1 to max do
with fragmenty[i] do begin
obsah:=... {nejak ho nacist}
zpracovan:=false;
end;

{ted zkontroluj, jestli jsou vsechny fragmenty aspon 6 znaku dlouhe, a jestli ne, tak nahlas chybu}

{algoritmus:}
vysledek:=fragmenty[1].obsah; fragmenty[1].zpracovan:=true;

for n:=6 to 10 do
begin
for i:=1 to max do with fragmenty[i] do {pro kazdy fragment}
if not zpracovan then begin
if copy(obsah,length(obsah)-n+1,n)=copy(vysledek,1,n); {kdyz jeho konec pasuje na zacatek vysledku}
then begin
vysledek:=copy(obsah,1,length(obsah)-n)+vysledek; {pripojime k vysledku}
zpracovan:=true; {tenhle fragment je vyrizeny}
break; {konec vnitrniho foru}
end;
if copy(obsah,1,n)=copy(vysledek,length(vysledek)-n+1,n)
then begin
...
{podobnym zpusobem over, jestli zacatek pasuje na konec vysledku}
...
end;
end;
end;

Šlo by to samozřejmě i obráceně - vnější cyklus točit pro všechny fragmenty a vnitřní pro 6..10 znaků. Ale celková ukončovací podmínka bude stejná: když byly všechny fragmenty zpracovány.
Neručím za správnost - důkladně to po mně zkontroluj. Taky tam neřeším chybové stavy, tj. kdyby mělo několik fragmentů stejný začátek nebo konec (proto by bylo lepší brát to naopak od 10 do 6 (downto), aby se nejdřív zpracovaly ty fragmenty, které se shodují delším úsekem) nebo kdyby některý fragment vůbec nepasoval (v takovém případě by se program zasekl v nekonečné smyčce).
Úsek pro kontrolu opačného konce řetězců a funkci, která zjistí, jestli mají všechny fragmenty nastavenou položku zpracovan na true, už si dopiš sám, to už není nic těžkého (doufám :-) ).

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

Mám dojem, že tento příklad byl v soutěži z programování v krajském kole v moravskoslezském kraji. Možná se ti ho podaří někde na internetu vyhrabat.

Nahlásit jako SPAM
IP: 88.101.29.–
MZetko0
Stálý člen
10. 6. 2008   #6
-
0
-

To Anonymní uživatel : Jo, byl tam, ale na netu nemají řešení.

Nahlásit jako SPAM
IP: 83.208.235.–
"Přirozená inteligence bude umělou brzy překonána. Přirozenou blbost však umělá nemůže nahradit nikdy"
Jára da CIMRMAN
http://www.newgame.cz
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, 4 hosté

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ý