logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

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

chiboogi 22 Sty 2007 17:46 2400 4
REKLAMA
  • #1 3474456
    chiboogi
    Poziom 1  
    Posty: 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 ?

    Moderowany przez And!:

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

  • REKLAMA
  • #2 3476377
    maciek_slon
    Poziom 29  
    Posty: 942
    Pomógł: 143
    Ocena: 27
    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?
  • REKLAMA
  • #3 3484263
    ZeeWolf
    Poziom 28  
    Posty: 989
    Pomógł: 115
    Ocena: 58
    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ę ;).

    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.
  • REKLAMA
  • #4 3502699
    chiboogi72
    Poziom 1  
    Posty: 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.
  • #5 3505690
    ZeeWolf
    Poziom 28  
    Posty: 989
    Pomógł: 115
    Ocena: 58
    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:
    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
    dlugosc_wyrazu := Length(wyraz);

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

    Powodzenia.
REKLAMA