Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

program w pascalu sprawdzający obecność słowa w tekście

22 Jan 2007 17:46 2175 4
  • Level 1  
    PROSZĘ O POMOC ! MUSZĘ NAPISAĆ PROGRAM W PASCALU, TAKI JAK W TYTULE, A NIE MAM O PASCALU ZIELONEGO POJĘCIA ! CZY KTOŚ MOŻE MI POMÓC ?

    Moderated By And!:

    Proszę nie stosować CapsLock w temacie i treści postu,
    temat zmieniony

    [30.03.2021, darmowy webinar] Nowoczesna diagnostyka maszyn, monitorowanie i przewidywanie awarii. Zarejestruj się
  • Level 29  
    Pomóc to i owsze - może wiele osób. Tylko powiedz chociaż kto Cię skrzywdził tym programem dając Ci taką pracę a nie mówiąc wcześniej co to jest pascal?

    No i może jakieś dodatkowe info o zadaniu... Czy to ma być sprawdzanie w pliku czy w tekście wpisanym przez użytkownika?
  • Level 28  
    Ech...
    I kwitnie nam pokolenie studentów-informatyków, co na klawiaturze "AnyKey" szukają... :P

    Sprawa jest banalna. Masz ciąg znaków (tekst) - załóżmy, że w postaci tablicy znaków (array of char). Ustawiasz się na pierwszy element tablicy, sprawdzasz, czy nie jest taki sam jak pierwsza litera szukanego wyrazu, przechodzisz do następnego elementu tablicy i dalej, i dalej. W momencie, kiedy masz zgodność (element tablicy = pierwsza litera wyrazu), sprawdzasz, czy następny element tablicy nie jest czasem drugą literą wyrazu - jeżeli tak, sprawdzasz kolejny element z trzecią, i tak dalej aż do ostatniej litery. Jeżeli zaś nie, szukasz dalej, znowu porównując z pierwszą literą.

    Kawałek kodu z Pascala (Pascal - po prostu koduj! :D:D:D):
    Sugerując się opowieścią o głodnym i rybaku daję Ci wędkę, a nie rybę ;).

    Code:
    const
    
    dlugosc_wyrazu = 8;

    var
    tekst:  array[0..63999] of char;
    wyraz: array[0..11] of char;
    i,j: integer;
    jest: boolean;

    begin

    ...

    i := 0;
    j := 0;
    jest := false;

    repeat
     if tekst[i] = wyraz[j] then
     repeat
      inc(i);
      inc(j);
      if j >= dlugosc_wyrazu then jest := true;
     until (tekst[i] <> wyraz[j]) or (jest = true);
     if jest = false then
     begin
      inc(i);
      j := 0;
     end;
    until (i = 63999) or (jest = true);

    ...

    end.
  • Level 1  
    Rozumien, że tam gdzie w tablicy jest aż do 63999 znaków mogę to zmienić na 255 znaków bo tyle ma mieć tekst ?
    I czemu tablica jest of char ? Myślałam że ma być of string.
    Napisałam to tak :

    var
    słowo:array[1..255] of string;
    wyraz:array[1..n] of string;

    czy w tej tablizy z wyrazem liczba znaków musi być zdefiniowana, no bo w końcu nie wiemy jak długiego wyrazu będziemy szukać.

    A dlaczego w const długosc_wyrazu=8 ?
    I jeszcze jedno pytanie : w którym miejscu mam wstawić ten tekst tak żeby się wyświetlał cały po uruchomieniu programu ? a potem żeby prosił o słowo do wyszukania ?

    Nie bardzo wiem czego mam się trzymać, tablic czy algorytmu. Mam coś takiego :

    const
    tekst='Tu wpiszę tekst o 255 znakach, który ma się pojawić na ekranie zanim dostanie słowo do szukania';

    var
    tekst: string;
    slowo: string;
    var
    i, j, poczatek: integer;
    tosamo: boolean;


    begin
    clrscr;

    write('Podaj tekst: ');
    writeln(tekst);
    write('Podaj słowo: ');
    readln(slowo);
    tosamo:=false;

    i od tego momentu nie wiem co, jak i gdzie wstawić, co na co zamienić czyli nic nie wiem.

    for i:=1 to length(tekst) do

    if tekst[i]=slowo[1] then begin poczatek:=i;
    for j:=1 to length(slowo) do
    if tekst[i+j-1]=slowo[j] then tosamo:=true else tosamo:=false;





    end;

    if tosamo then begin

    writeln('Wystepuje od pozycji ', poczatek, ' do pozycji ', poczatek+length(slowo)-1);

    for I:=1 to length(slowo) do begin

    write('s[', i+poczatek-1 , ']=');
    if slowo[i]=chr(32) then write('spacja') else write(slowo[i]);
    writeln;

    end;
    end

    else writeln('Nie wystepuje');




    readln;



    end.

    Z góry dziękuję za wszelkie wskazówki i podpowiedzi.
  • Level 28  
    String jest tak naprawdę tablicą - właśnie array [] of char, tyle, że przystosowaną do przechowywania wyrazów. Zatem zapis array [] of string utworzy Ci tablicę tablic, czyli taką jakby tablicę dwuwymiarową.
    Jeżeli tekst do przeszukania ma mieć 255 znaków, to tylko upraszcza sprawę - string może mieć do 255 znaków, więc można go użyć.
    Jeden błąd w Twoim kodzie:
    nie możesz zadeklarować zmiennej i stałej o tej samej nazwie (tekst). Widzę też, że tekst do przeszukania nie musi być podany zewnętrznie, więc możesz zrobić tak:
    Code:
    var
    
    tekst: string;
    ...

    begin
    ...

    tekst := "tekst do przeszukania";
    ...
    end.


    Zmienna wyraz może być zadeklarowana jako string - nie podałem Ci przecież gotowego rozwiązania, a jedynie algorytm poglądowy :D.
    Wtedy należy jednak zadeklarować dlugosc_wyrazu nie jako stałą, ale jako zmienną, a po wczytaniu szukanego wyrazu określić jego długość i wstawić do tejże zmiennej
    Code:
    dlugosc_wyrazu := Length(wyraz);

    oraz warunek zakończenia zewnętrznej pętli repeat dostosować do długości tekstu do przeszukania.

    Powodzenia.