Forum studentów Informatyki Zaocznej na Uniwersytecie Opolskim
Kod programu z u¿yciem okna.
DATABASE
osoba(string,string)
PREDICATES
pytanie1
zawieranie(string,string)
/* zawieranie(T1,T2) – tekst T1 zawarty jest w tek¶cie T2, np. tekst „bc” zawarty jest
w tek¶cie „aabcd” */
podstawienie(string,string,string,string)
/* podstawienie(T1,T2,T3,T4) – tekst T4 jest wynikiem podstawienia tekstu T1 za
tekst T2 w tek¶cie T3 na pierwszym miejscu, na którym tekst T2 wystêpuje w tek¶cie T3. Np.
tekst „aabbc” jest wynikiem podstawienie tekstu „a” za tekst „b” na pierwszym miejscu w
tek¶cie „abbbc” , gdzie tekst „b” wystêpuje */
poczatek(string,string,string)
/* poczatek(T1,T2,P) – tekst P jest czê¶ci± tekstu T2 poprzedzaj±c± wystêpowanie w
nim tekstu T1 */
koniec(string,string,string)
/* koniec(T1,T2,P) – tekst P jest czê¶ci± tekstu T2 nastêpuj±c± po wystêpowaniu w nim
tekstu T1 */
podstawienie_globalne(string,string,string,string)
/* podstawienie_globalne(T1,T2,T3,T4) – tekst T4 jest wynikiem podstawienia
tekstu T1 za tekst T2 w tek¶cie T3 w kaSdym miejscu, na którym tekst T2 wystêpuje w
tek¶cie T3. Np. tekst „aaaac” jest wynikiem podstawienie tekstu „a” za tekst „b” w kaSdym
miejscu w tek¶cie „abbbc” , gdzie tekst „b” wystêpuje */
cyfra(string)
/* predykat cyfra(T)rozpoznaje w¶ród ³añcuchów znaków cyfry: „0”, „1”, ...”9” */
ciag_cyfr(string)
/* predykat ciag_cyfr(T)rozpoznaje w¶ród ³añcuchów znaków ci±gi cyfr: np. „019” */
ciag_cyfr_w_tekscie(string,string,string)
/* ciag_cyfr_w_tekscie(T,L,R) – L jest ci±giem cyfr na pocz±tku tekstu T, a R jest
pozosta³± czê¶ci± tekstu T */
napis_liczby(string)
/* predykat napis_liczby(T) rozpoznaje w¶ród ci±gów cyfr napisy liczb, tj. ci±gi cyfr
nie zaczynaj±ce siê od cyfry „0” */
napis_liczby_w_tekscie(string,string,string) /* - predykat rozpoznaje
na pocz±tku tekstu napis liczby oraz wyróSnia pozosta³± czê¶æ takstu */
CLAUSES
osoba("","").
pytanie1:- write("Jak masz na imie"),nl,
readln(X),nl,
write("Ile masz lat"),nl,
readln(Y),nl,
asserta(osoba(X,Y)).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% ZAWIERANIE TEKSTÓW
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
zawieranie("","").
zawieranie(T1,T2):-
T2<>"",concat(T1,_,T2);
T2<>"",frontStr(1,T2,_,N_T2),
zawieranie(T1,N_T2).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
koniec(T1,T2,K):-
T2<>"",concat(T1,K,T2),!;
T2<>"",frontStr(1,T2,_,N_T2),
koniec(T1,N_T2,K).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
poczatek(T1,T2,P):-
koniec(T1,T2,K),concat(T,K,T2),concat(P,T1,T).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% PODSTAWIANIE TEKSTU ZA TEKST W TEK¦CIE %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
podstawienie(T1,T2,T3,T4):-
T1<>T2, T3<>"",
poczatek(T2,T3,P),koniec(T2,T3,K),!,
concat(P,T1,T),concat(T,K,T4).
podstawienie_globalne(T1,T2,T3,T4):-
podstawienie(T1,T2,T3,N_T3),!,
podstawienie_globalne(T1,T2,N_T3,T4);
T4=T3,!.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% NAPIS LICZBY %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cyfra("0"). cyfra("1"). cyfra("2"). cyfra("3"). cyfra("4").
cyfra("5"). cyfra("6"). cyfra("7"). cyfra("8"). cyfra("9").
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Rozpoznawanie napisu jako ci±gu cyfr
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ciag_cyfr(X):-
X<>"", cyfra(X),!;
X<>"", cyfra(C), concat(C,N_X,X),cyfra(N_X),!;
X<>"", cyfra(C), concat(C,N_X,X),!, napis_liczby(N_X).
napis_liczby(X):-
ciag_cyfr(X),frontStr(1,X,C,_),C<>"0",!.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Rozpoznawanie na pocz±tku napisu ci±gu cyfr
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ciag_cyfr_w_tekscie("","","").
ciag_cyfr_w_tekscie(T,L,R):-
T<>"",ciag_cyfr(T),L=T,R="",!;
T<>"", frontStr(1,T,L,R),cyfra(L),
frontStr(2,T,L1,_),not(ciag_cyfr(L1));
T<>"", frontStr(1,T,C,N_T), cyfra(C),
ciag_cyfr_w_tekscie(N_T,N_L,R),
concat(C,N_L,L).
napis_liczby_w_tekscie(T,L,R):-
ciag_cyfr_w_tekscie(T,L,R), frontStr(1,L,C,_),C<>"0",!.
GOAL makewindow(4,10,25,"Pytanie1",0,0,25,38),
pytanie1,
osoba(X,Y),write("Imie="), write(X),nl,
write("Wiek="),write(Y),nl, retractAll(osoba(_,_)),
asserta(osoba("","")).
Offline
Jak programy w latach 70
Podobno na zaliczenie bêdzie trzeba zrobiæ z tego ta¶mê któr± przetworzy ODRA
Offline