Turbo Pascal >> Procedura
Ostatnio przeglądałem pewną ksiąźke o Pascalu (pascal Help), i znalazłem takie zadanko które mnie zaciekawiło, oto treść:
Co to wogóle jest za zadanie, prosze kogoś aby poświęcił mi 2 min i mi go objaśnił :? :?
Pozdrawiam Kamil
Dane są następujące definicje i deklaracjeconst
MAX = 200;
type
Slownik = record
slowa : array[1..MAX] of string[20];
licz : 1..MAX; {liczba słów w słowniku}
end;
Napisać proceduręprocedure PackString(var str : string; var dict : Slownik);
która w napisiestr wszystkie wyrazy znajdujące się w słownikudict zastąpi sekwencją znaków postaci [x] (gdzie X jest indeksem słowa w słowniku). Przez wyraz będziemy rozumieć dowolny ciąg wielkich i małych liter. UWAGA! nie trzeba brać pod uwagę wielkości liter, tzn. wyraz w słowniku musi dokładnie odpowiadać wyrazowi z napisustr.
Przykład :
Zawartość słownika : 'To', 'jest', 'tekst'
Napis wejściowy : 'Uwaga ! Tojest zwykły i prosty tekst'
Wynik : 'Uwaga ! [1] [2] zwykły i prosty [3]'
Podkreślono wyrazy występujące w słowniku.
Co to wogóle jest za zadanie, prosze kogoś aby poświęcił mi 2 min i mi go objaśnił :? :?
Pozdrawiam Kamil
Odpowiedzi: 5
To jest jakieś rozwiązanie Twojego problemu, nie wiem czy Ci będzie pasowało, ja to pisałem w Delphi. Czy będzie działało w Pascal'u to nie wiem. Jak bys miał jakiś problem to chętnie nad nim posiedze bo tez się ucze pisać programiki.
Pozdrawiam :D
Pozdrawiam :D
program slowniki;
{$APPTYPE CONSOLE}
uses
sysutils;
const
MAX = 200;
type
Slownik = record
slowa : array[1..MAX] of string[20];
licz : 1..MAX; {liczba słów w słowniku}
end;
var
dictionary:Slownik; //deklaracja zmiennej typu slownik
napis:string; //deklaracja napisu na ktorym bedzxiemy pracowac
procedure PackString(var str : string; var dict : Slownik);
var
i:integer;
tmp:string;
begin
str := str + ' '; //tutaj dodajemy spacje na koncu zeby ciag konczyl sie spacja
for i:=1 to MAX do
begin
//zamieniamy index slowa na postac [index]
tmp := '[' + inttostr(i) + ']' + ' ';
//szukamy czy w ciagu znakow znajduje sie nasz napis
while pos(dict.slowa[i], str) > 0 do
begin
//jesli tak to wstawiamy za nim nasz zmodyfikowany index
insert(tmp, str, pos(dict.slowa[i], str) + length(dict.slowa[i]));
//i usuwamy slowo po ktorym wstawilismy index
delete(str, pos(dict.slowa[i], str), length(dict.slowa[i]));
end;
end;
writeln('To jest napis po przetworzeniu: ', str);
end;
procedure sl(); //ta procedurka wpisuje kilka slow do slownika
begin
dictionary.slowa[1] := 'To '; //zauwaz ze po kazdym wyrazie wstawiam spacje
dictionary.licz := 3; //zeby nie zamienial 'tekstowy' na [3]owy
dictionary.slowa[2] := 'jest ';
dictionary.slowa[3] := 'tekst ';
end;
begin
sl();
write('Podaj zdanie: '); readln(napis);
PackString(napis, dictionary);
readln;
end.
A czytać potrafisz ?
Zawartość słownika : 'To', 'jest', 'tekst'
Zawartość słownika : 'To', 'jest', 'tekst'
Tylko ja nie wiem jakie wyrazy mają być zamienione z tego słownika!
A to co to jest ?
Zawartość słownika : 'To', 'jest', 'tekst'
Napis wejściowy : 'Uwaga ! Tojest zwykły i prosty tekst'
Wynik : 'Uwaga ! [1] [2] zwykły i prosty [3]'
Podkreślono wyrazy występujące w słowniku.
Toź na podstawie tego idzie załapać źe program porównuje stringi i jak trafi to w miejsce stringu wpisuje cyferkę.
Zawartość słownika : 'To', 'jest', 'tekst'
Napis wejściowy : 'Uwaga ! Tojest zwykły i prosty tekst'
Wynik : 'Uwaga ! [1] [2] zwykły i prosty [3]'
Podkreślono wyrazy występujące w słowniku.
Toź na podstawie tego idzie załapać źe program porównuje stringi i jak trafi to w miejsce stringu wpisuje cyferkę.
Nie ma, zresztą jak by było to bym nie pisał :D
Strona 1 / 1