Na piątek muszę przynieść program którego treść brzmi następująco:
Napisać program znajdujący w podanym na wejście ciągu znaków PALINDROMY (wyrazy
lub zdania, które mają tę samą treść czytane od prawej do lewej i odwrotnie np. “oko”,
“kobyła ma mały bok”). Umożliwić wczytanie ciągu z pliku lub klawiatury.
Dane wejściowe:
- ciąg znaków.
Dane wyjściowe:
- palindromy (o ile wystąpiły w podanym ciągu).
Przykład:
> oto chyba mamy potop
Znaleziono 2 palindromy:
1: oto
2: potop
Program może działać na zasadzie że wyszukuje wszystkie możliwości np. Potop >> potop i oto
Tyle udało mi się napisać, męczę się z tym strasznie... Ale program ma błędy i nie działa jak powinien.
Nie wiem jak wykluczyć by nie uznawał 2 liter jako palindrom np. aa
Program działa na zasadzie że usuwa spacje a następnie wyszukuje palindromy.
Jeśli podamy jakiś ciąg gdzie nie będzie 2 liter obok siebie numeracja działa prawidłowo natomiast gdy wpiszemy np." potop zz" to się pojawiają cuda z liczeniem znalezionych palindromów a także numeracja.
Nie wiem także jak sprawdzać palindromy podając ciąg przez plik txt.
Musiał bym jakoś treść wczytaną (text) przypisać do ansistringa.
Bardzo proszę o szybką pomoc.
Kod: Zaznacz cały
program Untitled;
uses crt;
var
ciag1:text;
a,m:char;
ciag,ciag2:ansistring;
i,j,b,x,l,k,g,max:integer;
pal:boolean;
begin
REPEAT
clrscr;
writeln('Witaj w moim programie wyszukujacym palindromy z ciagu znakow.');
writeln('Jak chcesz wprowadzic ciag znakow?');
writeln('1. z pliku');
writeln('2. z klawiatury');
write('Wpisz numer: ');
readln(a); {wybor jak wpisac ciag znakow}
if (a='1') OR (a='2') Then
begin
case a of
'1': begin
assign(ciag1,'C:\Dev-Pas\Moje programy\Projekt 1 szkoła\ciag.txt');
reset(ciag1);
writeln('Znaleziono nastepujace palindromy:');
while not EOF(ciag1) do
begin
readln(ciag1,ciag2);
writeln(ciag2);
end;
close(ciag1);
end;
'2': begin
writeln('Podaj ciag znakow');
readln(ciag);
b:= 1;
while b<length(ciag) do
if (ciag[b]=' ') then delete(ciag,b,1) else inc(b);
x:=length(ciag);
for i:=1 to x - 1 do
for j:=i + 2 to x + 1 do
begin
l:=i;
g:=j-1;
pal:=true;
while l < g do
begin
if (ciag[l] <> ciag[g]) then
begin
pal:= false;
end;
inc(l); dec(g);
end;
if pal=true then
begin
max:=0;
for k:=1 to i do
begin
if i > max then
max:=i;
end;
end;
end;
writeln('Znaleziono ',max,' palindrom/y/ow: ');
x:=length(ciag);
for i:=1 to x - 1 do
for j:=i + 2 to x + 1 do
begin
l:=i;
g:=j-1;
pal:=true;
while l < g do
begin
if (ciag[l] <> ciag[g]) then
begin
pal:= false;
end;
inc(l); dec(g);
end;
if pal=true then
begin
for k:=1 to i do
write('');
begin
writeln(i,'. ',copy(ciag,i,j-i));
end;
end;
end;
writeln;
end;
end;
writeln;
writeln('chcesz wyliczyc jeszcze raz? Dowolny klawisz = Tak, N = Nie.');
end
else
writeln('Niepoprawny wybor, chcesz wpisać jeszcze raz? Dowolny klawisz = Tak, N = Nie.');
readln(m); {powrotrzenie wyboru}
UNTIL ((m='n') or (m='N'));
end.