Pascal - palindromy

0

Witam.
Dopiero uczę się pisać w pascalu i muszę zrobić następujące zadanie.
Jest to 4 zadanie z podstawowej matury z informatyki w 2010 roku.

Treść zadania:

W pliku dane.txt umieszczono w kolejnych wierszach 1000 słów o długościach od 2 do 25 znaków, składających się z wielkich liter od A do J. Napisz program który przegląda słowa zapisane w pliku dane.txt i wypisuje te z nich które są palindromami po jednym w wierszu. Kolejność wypisywania palindromów powinna być taka sama jak w pliku z danymi. Wyniki zapisz w pliku zadanie4.txt.

Napisałem program który działa dobrze w przypadku gdy w pliku podane jest słowo tylko w pierwszym wierszu a powinien sprawdzać wszystkie słowa w każdym wierszu i wypisać palindromy.
Proszę o pomoc.

Kod źródłowy:

program Palindromy;
uses crt;
var odczyt,zapis:text;
        palindrom:string;
        a,b:integer;
begin
        clrscr;
        assign(odczyt,'C:\dane.txt');
        reset(odczyt);
        assign(zapis,'C:\zadanie4.txt');
        rewrite(zapis);
        while not eof(odczyt) do
begin
        readln(odczyt,palindrom);
        a:=1;
        b:=length(palindrom);
        if palindrom[a]<>palindrom[b] then
begin
        readln;
        halt
end;
        inc(a);
        dec(b);
        writeln(palindrom);
        writeln(zapis,palindrom)
end;
        readln;
        close(odczyt);
        close(zapis)
end.
0

Naucz się:

  1. Formatować kod jak człowiek.
  2. Zrozum działanie 'code flow' (nawet nie wiem jak to dokładnie po polsku).
  3. Zrozum działanie instrukcji readln i halt.

A najlepiej to zacznij od samego początku bo brakuje ci zrozumienia kodu.

0

Przemyśl kod:

        a:=1;
        b:=length(palindrom);
        if palindrom[a]<>palindrom[b] then
begin
        readln;
        halt
end;

Bo jest on kompletnie bez sensu i chyba pisząc go w ogóle nie myślałeś co robisz. Najlepiej zastosuj do sprawdzania czy wyraz jest palindromem funkcję z artykułu: Czy wyraz jest palindromem a wystarczyło pogooglowac i dawno byś ją sam znalazł i napisał tak banalny program bez problemów.

0

Każdy formatuje kod jak mu wygodniej a mi się go dobrze czyta.
Znam działanie instrukcji readln i halt a readln w tym przypadku zastosowałem po to żeby program nie zamykał się od razu po sprawdzeniu.
Funkcja do sprawdzenia algorytmu jest krótka i prawidłowa. Dla pewności napisałem program który sprawdza po wpisaniu z klawiatury czy wyraz jest palindromem i wszystko działa jak należy. Oto on:

program Szukanie_palindromu;
uses crt;
var slowo:string;
        a,b:integer;
begin
        clrscr;
        writeln('Podaj słowo');
        readln(slowo);
        a:=1;
        b:=length(slowo);
        if b>1 then
begin
        if slowo[a]<>slowo[b] then
begin
        writeln('Podane słowo nie jest palindromem');
        readln;
        halt
end;
        inc(a);
        dec(b);
        writeln('Podane słowo jest palindromem');
        readln;
        halt
end;
        if b=0 then
        writeln('Brak liter')
        else if b=1 then
        writeln('Podane słowo jest palindromem');
        readln
end.
0

czy ja jestem ślepy, czy tutaj nie ma żadnej pętli? Jak ty chcesz sprawdzić czy wyraz jest palindromem nie przelatując go znak po znaku z obu stron? A co do formatowania kodu - jest beznadziejne dlatego, że nie wiadomo który begin/end jest na którym "poziomie" i widząc begina muszę cofać sie do góry zeby sprawdzić do czego on należy.

PS. Mówisz że funkcja działa? wpisz w takim razie słowo "atmosfera"

0

Jak wysyłasz kod z prośbą o pomoc, to formatujesz go zgodnie z przyjętymi zwyczajami. To innym ma się czytać wygodnie, nie Tobie.
Jaką masz definicję palindromu? Czy wg tej definicji słowo "Kajak" jest palindromem?

0

o kurde jednak widzę że nie sprawdziłem wszystkiego i mam źle sory.
a mógłby ktoś zmodyfikować ten kod i dodać pętle żeby sprawdzał słowo znak po znaku bo już nie ogarniam

0

a mógłby ktoś zmodyfikować ten kod i dodać pętle żeby sprawdzał słowo znak po znaku bo już nie ogarniam

Google twoim przyjacielem, pomoże ci przerobić.

Albo możesz robić slit minkę to @[unikalna_nazwa] ci zrobi gotowca bo on ostatnio w tej kwestii się uaktywnił.

1 użytkowników online, w tym zalogowanych: 0, gości: 1