FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

P1- Blatt 7

P1- Blatt 7 2003-01-29 13:54
Anonymer User
hi,

es geht um Aufgabe 3b.) c.) und d.).
Kann mir irgendjemand seine eigene Loesung mal hier posten.
Da die Musterloesungen nicht laufen und ich alleine nicht drauf komme bin ich am verzweifeln.
Danke im voraus.

Re: P1- Blatt 7 2003-01-29 16:23
Zaphod
Poste doch einfach mal die Aufgabenstellung. Sonst können die Leute aus den höheren Semestern dir nicht helfen, es sei denn, sie haben gerade Lust, selber sämtliche Uni-Seiten zu durchsuchen, um sie zu finden.

Wenn die Musterlösungen nicht laufen, dann könnte es sein, dass du in deinem Scheme die Sprache noch auf "Beginner" oder so stehen hast. Das müsstest du ggf. auf "Full Scheme" umstellen.

Re: P1- Blatt 7 2003-01-29 16:49
Slater
tja, mir hat er das suchen zugemutet..,
die musterlösung zu b. ist irgendwie nicht so zum thema,
ansonsten denke ich das die musterlösungen mit kleinen änderungen funktionieren,
kannst dir ja mal das hier anschauen und fragen stellen,
wenn du was nicht verstehst

a.)
% einfaches durchsuchen der liste bis zum ende
% lsrch_a: linear-search-for-(a)
% FN: Famillienname
% VN: Vorname
% N: Tel-Nr.

lsrch_a(FN,VN,N,[[FN,VN,N]|_]).
lsrch_a(FN,VN,N,[_|L]):-lsrch_a(FN,VN,N,L).



b.)
% sortiertes suchen, sortiert erst und verwendet dann lsrch_b

sortiertsuchen(FN,VN,N,LIST):-
sort(LIST,SORTLIST),lsrch_b(FN,VN,N,SORTLIST).



% durchsucht eine sortierte liste,
% hört beim ersten grösseren nachnamen auf

lsrch_b(FN,VN,N,[[FN,VN,N]|_]).
lsrch_b(FN,VN,N,[[FN2,_,_]|L]):-FN @=< FN2,lsrch_b(FN,VN,N,L).

c.)

% teilt eine liste in teilmengen,
% 2. parameter gibt anzahl der teilmengen an

chop(L,1,[L]).
chop(L,N,[X|LR]):-N>1,append(X,X1,L),length(L,LX),
LEN is ceiling(LX/N),length(X,LEN), N1 is N-1, chop(X1,N1,LR).

d.)

% durchsucht eine liste mit sortiertenteilisten-verfahren
% sortiert erstmal die liste, teilt sie dann in
% ceiling(laenge/3) stueck, und verwendet lsrch_c

nochsortiertersuchen(FN,VN,N,LIST):-sort(LIST,SORTLIST),
length(SORTLIST,LEN),TEILLEN is ceiling(LEN/3),
chop(SORTLIST,TEILLEN,TEILLIST),lsrch_c(FN,VN,N,TEILLIST).



% durchsucht eine sortierte liste aus teillisten,
% durchsucht passende teillisten mit lsrch_b

lsrch_c(FN,VN,N,[H1|L]):-ge(FN,H1), lsrch_c(FN,VN,N,L).
lsrch_c(FN,VN,N,[H1,H2|_]):-ge(FN,H1), le(FN,H2), lsrch_b(FN,VN,N,H1).
lsrch_c(FN,VN,N,[H]):-lsrch_b(FN,VN,N,H).



% hilffunktionen, schauen ob suchname >= (bzw. =< )
erster name in teilliste

ge(FN,[[H|_]|_]):-FN @>= H.


le(FN,[[H|_]|_]):-FN @=< H.




Re: P1- Blatt 7 2003-01-29 16:51
Zaphod
Ach.. es ging noch um Prolog..