Pascal - palindrom ili "podpalindrom"

poruka: 13
|
čitano: 1.626
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
8 godina
neaktivan
offline
Problem rjesavanja zadatka u pascalu

Zdravo svima.

Prvi put sam na vasem forumu pa oprostite mi ako sam pogrijesio temu...

 

Naime,dobio sam zadatak da napisem program u pascalu koji glasi:"Napisati program koji provjerava da li je rijec palindrom,ako nije onda da nalazi najduzu podrijc koja je palindrom".

Znam uraditi to da je rijec palindrom ali ne znam kako da razdvojim tu rijec i nadjem najvecu podrijec te rijeci koja je zapravo palindrom.

 

Bio bih vam mnogo zahvalan ako mi uspijete poslati uradjen program,nadam se da neko zna rijesiti :D

 

Hvala unaprijed !

 
0 0 hvala 0
17 godina
moderator
online
Re: Problem rjesavanja zadatka u pascalu

Kod za provjeru je li panlindrom si staviš u funkciju, ako već nisi.

 

Prvo provjeravaš je li palindrom čitava riječ. Ako nije, onda uzmeš dio stringa (funkcijom Copy) za jedan manje duljine pa provjeravaš je li on palindrom. Ako ni oni nisu, ideš na još kraće dijelove stringa, dok ne dođeš do duljine stringa za provjeru veličine tri.

 

Znači, ako je riječ "palindrom" - u prvoj iteraciji provjeravaš "palindrom". U drugoj iteraciji provjeravaš "palindro" i "alindrom". U trećoj "palindr", "alindro" i "lindrom".

 

Tako da bi valjda imao dvije petlje, nešto u stilu:

 

jeLiPalindrom = false;

 

for i := len(puniString) down to 3 do

begin

  for j := 0 to len(puniString) - i do

  begin

   podString := Copy(puniString, j, i);

   jeLiPalindrom = palindrom(podString);

   if jeLiPalindrom then break;   

  end;

  if jeLiPalindrom then break;

end;

 

if jeLiPalindrom then WriteLn("Palindrom je: ", podString) else WriteLn("Nije nadjeno palindroma");

 

Nisam 100 godina radio u Pascalu, tako da ovo treba uzeti s rezervom. Ali brijem da je to tu negdje...

 

Poruka je uređivana zadnji put sri 12.4.2017 22:06 (mbaksa).
8 godina
neaktivan
offline
Pascal - palindrom ili "podpalindrom"

Hvala na ljubaznosti,prilagodio sam program pascalu ali koju god rijec upisem ispise da rijec nije palindrom,pokusao sam urediti ali nisam mogao doci do ispravnog rjesenja.

Ako mi bas zelis pomoci mozes probati u c++ ako tu radis.

Inace mnogo hvala :)

 
0 0 hvala 0
17 godina
moderator
online
Re: Pascal - palindrom ili "podpalindrom"

Daj kod. Stavi ga na CodeShare: https://codeshare.io/new

8 godina
neaktivan
offline
Re: Pascal - palindrom ili "podpalindrom"

Poslao sam ti u private messages ako vec nisi vidio... :)

Poruka je uređivana zadnji put sri 12.4.2017 23:17 (Suttix).
17 godina
moderator
online
Re: Pascal - palindrom ili "podpalindrom"

Znači, kod je tu: https://codeshare.io/aYzE4M

 

U kodu si napravio kardinalnu pogrešku, a to je da nisi inicijalizirao varijablu a. Znači, prva linija funkcije ti je trebala biti:

a := '';

 

A i dalje ima grešaka. Pogledaj sad kod. Funkciju sam inače preradio tako da nema kopiranja stringa naopačke, nego se samo uspoređuju slova unutar istog stringa. Funkcija dakle sad izgleda:

 

function jelipalindrom(p:string):boolean;
var x:integer;
  a:string;
  duljina: Integer;
begin
  jelipalindrom := True;
  duljina := length(p);

  for x := 1 to duljina do begin
   if p[x] <> p[duljina + 1 - x] then jelipalindrom := false;
  end;
end;

8 godina
neaktivan
offline
Re: Pascal - palindrom ili "podpalindrom"

Hvala mnogo brate :D cijeli dan se mucim oko ovoga,respect!

17 godina
moderator
online
Re: Pascal - palindrom ili "podpalindrom"

Petlja unutar funkcije se zapravo može još malo optimizirati:

 

for x := 1 to duljina div 2 do
begin
  if p[x] <> p[duljina + 1 - x] then
  begin
   jelipalindrom := false;
   break;
  end;
end;

 

Znači, ne mora se ići do kraja riječi, nego je dovoljno ići do polovice riječi. Ujedno, ako je otkriveno da riječ nije palindrom, petlja se može na silu prekinuti naredbom break;

 

8 godina
neaktivan
offline
Re: Pascal - palindrom ili "podpalindrom"

Samo jos jedna stvar ako bi htio objasniti:

 

for i := length(strin) downto 3 do
begin
for j := 1 to length(strin) - i + 1 do
begin
podString := Copy(strin, j, i);

palindrom := jeLiPalindrom(podString);

if palindrom then break;
end;
if palindrom then break;
end;

 

ovaj dio..

 

17 godina
moderator
online
Re: Pascal - palindrom ili "podpalindrom"

Što konkretno?

 

Iza linije koja počinje s podString :=

stavi si liniju:

 

WriteLn('  podString: [' + podString + \]');

 

Pa će ti biti jasnije što se događa.

 

Breakovi su tu da prekinu izvođenje petlje u slučaju da se utvrdi da je riječ ili podriječ palindrom, jer nema potrebe da se testiraju sve moguće podriječi.

8 godina
neaktivan
offline
Pascal - palindrom ili "podpalindrom"

Ova linija :  for j := 1 to length(strin) - i + 1 do

i kako funkcionise copy(...);

 
0 0 hvala 0
17 godina
moderator
online
Re: Pascal - palindrom ili "podpalindrom"

Funkcija copy kopira dio stringa - u ovom slučaju kopira od pozicije j, duljinu i.

 

Rekoh, ispisuj si podString pa bi ti trebalo biti jasno što se događa - koji podString se u danom trenutku testira. Uočita ćeš da daljnje testiranje prestaje kad se utvrdi palindrom (zbog onih breakova).

8 godina
neaktivan
offline
Pascal - palindrom ili "podpalindrom"

Razumio sam sada sve,hvala puno 

Poruka je uređivana zadnji put sub 27.1.2018 16:02 (Suttix).
 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice