<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_programoz%C3%A1si_feladatok</id>
	<title>Deklaratív programozás - Prolog programozási feladatok - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_programoz%C3%A1si_feladatok"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_programoz%C3%A1si_feladatok&amp;action=history"/>
	<updated>2026-05-25T20:50:13Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_programoz%C3%A1si_feladatok&amp;diff=177811&amp;oldid=prev</id>
		<title>Szikszayl: Szikszayl átnevezte a(z) PrologProg lapot a következő névre: Deklaratív programozás - Prolog programozási feladatok</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_programoz%C3%A1si_feladatok&amp;diff=177811&amp;oldid=prev"/>
		<updated>2014-02-15T17:11:30Z</updated>

		<summary type="html">&lt;p&gt;Szikszayl átnevezte a(z) &lt;a href=&quot;/index.php?title=PrologProg&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;PrologProg (a lap nem létezik)&quot;&gt;PrologProg&lt;/a&gt; lapot a következő névre: &lt;a href=&quot;/Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_programoz%C3%A1si_feladatok&quot; title=&quot;Deklaratív programozás - Prolog programozási feladatok&quot;&gt;Deklaratív programozás - Prolog programozási feladatok&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;hu&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Régebbi változat&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;A lap 2014. február 15., 19:11-kori változata&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;hu&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Nincs különbség)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Szikszayl</name></author>
	</entry>
	<entry>
		<id>https://vik.wiki/index.php?title=Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_programoz%C3%A1si_feladatok&amp;diff=137939&amp;oldid=prev</id>
		<title>Unknown user: Új oldal, tartalma: „{{GlobalTemplate|Infoalap|PrologProg}}  &lt;center&gt;&lt;font size=&quot;5&quot;&gt;&lt;b&gt;Prolog programozási feladatok&lt;/b&gt;&lt;/font&gt;&lt;/center&gt; &lt;br/&gt;&lt;br/&gt;  A mintavizsga Prolog programozás felad…”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Deklarat%C3%ADv_programoz%C3%A1s_-_Prolog_programoz%C3%A1si_feladatok&amp;diff=137939&amp;oldid=prev"/>
		<updated>2012-10-21T20:10:04Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Infoalap|PrologProg}}  &amp;lt;center&amp;gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Prolog programozási feladatok&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/center&amp;gt; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;  A mintavizsga Prolog programozás felad…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Infoalap|PrologProg}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Prolog programozási feladatok&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A mintavizsga Prolog programozás feladatainak megoldásai.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;i&amp;gt;print_all/1&amp;lt;/i&amp;gt; és &amp;lt;i&amp;gt;megold/1&amp;lt;/i&amp;gt; eljárásoktól meg az alattuk lévő &amp;lt;i&amp;gt;?-&amp;lt;/i&amp;gt; kezdetű&lt;br /&gt;
soroktól ne ijedjen meg senki, azok csak azért vannak, hogy &amp;lt;i&amp;gt;Consult&amp;lt;/i&amp;gt; után&lt;br /&gt;
rögtön megjelenjenek a példákra adott megoldások, ne kelljen begépelni&lt;br /&gt;
őket ;)&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;A mintavizsga 1. feladatának megoldása&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;amp;lt;BEGIN FILE&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
% PROLOG MINTAFELADATSOR 1. PROGRAMOZÁSI FELADAT&lt;br /&gt;
%&lt;br /&gt;
% Segédeljárás:&lt;br /&gt;
%&lt;br /&gt;
%	Egy számlistában vízesésnek hívunk egy olyan legalább kételemű,&lt;br /&gt;
%	folyamatos részlistát, amely szigorúan monoton csökkenő, a&lt;br /&gt;
%	szomszédos elemek különbsége legalább 3, és egyik irányba sem&lt;br /&gt;
%	terjeszthető ki ezen tulajdonságok megtartásával.&lt;br /&gt;
%&lt;br /&gt;
%	Írjon egy olyan Prolog eljárást, amely eldönti, hogy egy egészekből&lt;br /&gt;
%	álló lista elején egy vízesés áll-e, és visszadja a vízesés első és&lt;br /&gt;
%	utolsó elemét, valamint a bemeneti listának a megtalált vízesés&lt;br /&gt;
%	utáni részét! Ha a bemeneti lista nem vízeséssel kezdődik, az&lt;br /&gt;
%	eljárás hiúsuljon meg!&lt;br /&gt;
%&lt;br /&gt;
% Teljes feladat:&lt;br /&gt;
%&lt;br /&gt;
%	A kezdo_vizeses/3 predikátum segítségével írjon egy olyan Prolog&lt;br /&gt;
%	eljárást, amely felsorolja egészek egy adott listájában az összes&lt;br /&gt;
%	benne megtalálható vízesés első és utolső elemét! A vízeséseket&lt;br /&gt;
%	előfordulási sorrendjükben vegye sorra!&lt;br /&gt;
&lt;br /&gt;
% kezdo_vizeses(L, K, V, M): az L egészlista elején egy vízesés áll,&lt;br /&gt;
% amelynek első eleme K, utolsó eleme V, az utána következő elemek&lt;br /&gt;
% listája M.&lt;br /&gt;
% :- pred kezdo_vizeses(list(int)::in, int::out, int::out,&lt;br /&gt;
%	 list(int)::out).&lt;br /&gt;
kezdo_vizeses([X,Y|Xs], K, X, [Y|Xs]) :-&lt;br /&gt;
		X - Y &amp;lt; 3, !, nonvar(K), !.&lt;br /&gt;
kezdo_vizeses([X,Y|Xs], K, V, M) :-&lt;br /&gt;
		!,&lt;br /&gt;
		(var(K) -&amp;gt; K = X ; true),&lt;br /&gt;
		kezdo_vizeses([Y|Xs], K, V, M).&lt;br /&gt;
kezdo_vizeses([X], K, X, []) :-&lt;br /&gt;
		nonvar(K).&lt;br /&gt;
&lt;br /&gt;
% vizeses(L, K, V): K és V egy az L egészlistában előforduló vízesés&lt;br /&gt;
% első illetve utolsó eleme.&lt;br /&gt;
% :- pred vizeses(list(int)::in, int::out, int::out).&lt;br /&gt;
vizeses(L, K, V) :-&lt;br /&gt;
		kezdo_vizeses(L, A, B, M), !,&lt;br /&gt;
		(  K = A, V = B&lt;br /&gt;
		;&lt;br /&gt;
			vizeses(M, K, V)&lt;br /&gt;
		).&lt;br /&gt;
vizeses([_|Xs], K, V) :-&lt;br /&gt;
		vizeses(Xs, K, V).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% megold(X): Az X paraméterrel meghívja a főfüggvényt és az eredményt&lt;br /&gt;
% kiírja a képernyőre.&lt;br /&gt;
megold(X) :-&lt;br /&gt;
		print(&amp;#039;  &amp;#039;), print(X), print(&amp;#039; --&amp;gt; &amp;#039;),&lt;br /&gt;
		(  bagof(K-V, vizeses(X, K, V), E),&lt;br /&gt;
			print_all(E)&lt;br /&gt;
		;&lt;br /&gt;
			print(&amp;#039;no&amp;#039;)&lt;br /&gt;
		),&lt;br /&gt;
		nl.&lt;br /&gt;
&lt;br /&gt;
% print_all(X): Az X paraméterben kapott megoldáslistát kiírja a&lt;br /&gt;
% képernyőre.&lt;br /&gt;
print_all([]) :-&lt;br /&gt;
		print(&amp;#039;no&amp;#039;).&lt;br /&gt;
print_all([K-V|Xs]) :-&lt;br /&gt;
		print(&amp;#039;K = &amp;#039;), print(K), print(&amp;#039;, &amp;#039;),&lt;br /&gt;
		print(&amp;#039;V = &amp;#039;), print(V),&lt;br /&gt;
		print(&amp;#039; ; &amp;#039;),&lt;br /&gt;
		print_all(Xs).&lt;br /&gt;
&lt;br /&gt;
?- nl, print(&amp;#039;Példafutások:&amp;#039;), nl.&lt;br /&gt;
?- megold([0,2,5,5]).&lt;br /&gt;
?- megold([1,2,-5,20,15,12,7,3,0,-2]).&lt;br /&gt;
?- nl.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;EOF&amp;amp;gt;&amp;lt;hr&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;A mintavizsga 2. feladatának megoldása&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;amp;lt;BEGIN FILE&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
% PROLOG MINTAFELADATSOR 2. PROGRAMOZÁSI FELADAT&lt;br /&gt;
%&lt;br /&gt;
% Segédeljárás:&lt;br /&gt;
%&lt;br /&gt;
%	Egy Prolog kifejezés szimmetrikus, ha a szimmetrikus pozíciójú&lt;br /&gt;
%	argumentumai azonosak (azaz egy n-argumentumú kifejezés&lt;br /&gt;
%	szimmetrikus, ha 1. és n., 2. és (n-1).,..., i. és (n+1-i).&lt;br /&gt;
%	argumentuma azonos). Az argumentum nélküli kifejezéseket&lt;br /&gt;
%	szimmetrikusaknak tekintjük.&lt;br /&gt;
%&lt;br /&gt;
%	Írjon Prologban egy olyan eljárást, amely egy tetszőleges Prolog&lt;br /&gt;
%	kifejezésről megállapítja, hogy az szimmetrikus-e!  Az azonosság&lt;br /&gt;
%	eldöntésére az ==/2 beépített eljárást használhatja.  Vigyázat, a&lt;br /&gt;
%	kifejezés lehet változó!&lt;br /&gt;
%&lt;br /&gt;
% Teljes feladat:&lt;br /&gt;
%&lt;br /&gt;
%	A szimmetrikus/1 predikátum segítségével írjon egy olyan Prolog&lt;br /&gt;
%	eljárást, amely egy tetszőleges Prolog kifejezés összes&lt;br /&gt;
%	szimmetrikus részstruktúráját felsorolja. A részkifejezések&lt;br /&gt;
%	előfordulási sorrendjét őrizze meg! Vigyázat, a kifejezés lehet&lt;br /&gt;
%	változó és benne is előfordulhatnak változók!&lt;br /&gt;
&lt;br /&gt;
:- use_module(library(lists)).&lt;br /&gt;
&lt;br /&gt;
% szimmetrikus(Kif): igaz, ha Kif szimmetrikus.&lt;br /&gt;
% :- pred szimmetrikus(univ::in).&lt;br /&gt;
szimmetrikus(Kif) :-&lt;br /&gt;
		var(Kif), !.&lt;br /&gt;
szimmetrikus(Kif) :-&lt;br /&gt;
		Kif =.. Reszek,&lt;br /&gt;
		length(Reszek, L),&lt;br /&gt;
		(  L =&amp;lt; 2, !&lt;br /&gt;
		;&lt;br /&gt;
		  [F,Arg1|Args] = Reszek,&lt;br /&gt;
		  reverse(Args, [LastArg|MidArgs]),&lt;br /&gt;
		  Arg1 == LastArg,&lt;br /&gt;
		  Kif1 =.. [F|MidArgs],&lt;br /&gt;
		  szimmetrikus(Kif1)&lt;br /&gt;
		).&lt;br /&gt;
&lt;br /&gt;
% szimmetrikus_resze(Kif, Resz): Resz a Kif-nek szimmetrikus&lt;br /&gt;
% részstruktúrája&lt;br /&gt;
% :- pred szimmetrikus_resze(univ::in, univ::out).&lt;br /&gt;
szimmetrikus_resze(Kif, Kif) :-&lt;br /&gt;
		szimmetrikus(Kif).&lt;br /&gt;
szimmetrikus_resze(Kif, Resz) :-&lt;br /&gt;
		nonvar(Kif),&lt;br /&gt;
		Kif =.. [_|Args],&lt;br /&gt;
		member(Arg, Args),&lt;br /&gt;
		szimmetrikus_resze(Arg, Resz).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% megold(X): Az X paraméterrel meghívja a főfüggvényt és az eredményt&lt;br /&gt;
% kiírja a képernyőre.&lt;br /&gt;
megold(X) :-&lt;br /&gt;
		print(&amp;#039;  &amp;#039;), print(X), print(&amp;#039; --&amp;gt; &amp;#039;),&lt;br /&gt;
		(  bagof(R, szimmetrikus_resze(X, R), E),&lt;br /&gt;
			print_all(E)&lt;br /&gt;
		;&lt;br /&gt;
			print(&amp;#039;no&amp;#039;)&lt;br /&gt;
		),&lt;br /&gt;
		nl.&lt;br /&gt;
&lt;br /&gt;
% print_all(X): Az X paraméterben kapott megoldáslistát kiírja a&lt;br /&gt;
% képernyőre.&lt;br /&gt;
print_all([]) :-&lt;br /&gt;
		print(&amp;#039;no&amp;#039;).&lt;br /&gt;
print_all([R|Rs]) :-&lt;br /&gt;
		print(&amp;#039;R = &amp;#039;), print(R), print(&amp;#039; ; &amp;#039;),&lt;br /&gt;
		print_all(Rs).&lt;br /&gt;
&lt;br /&gt;
?- nl, print(&amp;#039;Példafutások:&amp;#039;), nl.&lt;br /&gt;
?- megold(f(1,a,1)).&lt;br /&gt;
?- megold(f(2+1+1,3+3+3)).&lt;br /&gt;
?- megold(g(X,Y)).&lt;br /&gt;
?- nl.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;EOF&amp;amp;gt;&amp;lt;hr&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;A mintavizsga 3. feladatának megoldása&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&amp;amp;lt;BEGIN FILE&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
% PROLOG MINTAFELADATSOR 3. PROGRAMOZÁSI FELADAT&lt;br /&gt;
%&lt;br /&gt;
% Egy A atom egy N nemnegatív egésszel vett szorzatán az A atom&lt;br /&gt;
% N-szeri egymás után fuzésével kapott atomot értjük.&lt;br /&gt;
%&lt;br /&gt;
% Segédeljárás:&lt;br /&gt;
%&lt;br /&gt;
%	Írjon Prolog nyelven egy eljárást amelynek bemenete egy N&lt;br /&gt;
%	nemnegatív egész és egy A atom, kimenete pedig N és A szorzata!&lt;br /&gt;
%&lt;br /&gt;
% Teljes feladat:&lt;br /&gt;
%&lt;br /&gt;
% A szorzata/3 eljárás segítségével, könyvtári eljárások használata&lt;br /&gt;
% nélkül készítsen el egy Prolog eljárást, amely egy számokból és&lt;br /&gt;
% atomokból a + és * operátorokkal felépített a-kifejezés értékét&lt;br /&gt;
% kiszámítja! Ha A atomot, N nemnegatív egészet jelöl, akkor az&lt;br /&gt;
% AKif-fel jelölt a-kifejezéseket a következő nyelvtani szabállyal&lt;br /&gt;
% jellemezhetjük:&lt;br /&gt;
%&lt;br /&gt;
%				AKif ---&amp;gt;  A | N*AKif | AKif*N | AKif+AKif.&lt;br /&gt;
%&lt;br /&gt;
% A + operátor a konkatenálást jelöli, a * operátor pedig a&lt;br /&gt;
% segédfeladatban definiált szorzást. &lt;br /&gt;
&lt;br /&gt;
:- use_module(library(lists)).&lt;br /&gt;
&lt;br /&gt;
% szorzata(N, A, NA): NA az N nemnegatív egész és az A atom szorzata.&lt;br /&gt;
% :- pred szorzata(int::in, atom::in, atom::out).&lt;br /&gt;
szorzata(0, _, &amp;#039;&amp;#039;) :- !.&lt;br /&gt;
szorzata(N, A, NA) :-&lt;br /&gt;
		N1 is N - 1,&lt;br /&gt;
		szorzata(N1, A, R),&lt;br /&gt;
		atom_codes(A, B),&lt;br /&gt;
		atom_codes(R, R1),&lt;br /&gt;
		append(B, R1, R2),&lt;br /&gt;
		atom_codes(NA, R2).&lt;br /&gt;
&lt;br /&gt;
% erteke(OpKif, Ertek): Az OpKif operátoros ábrázolású fent definiált&lt;br /&gt;
% alakú kifejezés értéke Ertek.&lt;br /&gt;
% :- pred erteke(univ::in, atom::out).&lt;br /&gt;
erteke(OpKif, OpKif) :- integer(OpKif) ; atom(OpKif).&lt;br /&gt;
erteke(OpKif, Ertek) :-&lt;br /&gt;
		OpKif =.. [Op, Arg1, Arg2],&lt;br /&gt;
		erteke(Arg1, Val1), erteke(Arg2, Val2),&lt;br /&gt;
		(  Op = &amp;#039;*&amp;#039; -&amp;gt;&lt;br /&gt;
			  (  integer(Val1) -&amp;gt;&lt;br /&gt;
					 szorzata(Val1, Val2, Ertek)&lt;br /&gt;
			  ;&lt;br /&gt;
					 szorzata(Val2, Val1, Ertek)&lt;br /&gt;
			  )&lt;br /&gt;
		;&lt;br /&gt;
			Op = &amp;#039;+&amp;#039; -&amp;gt;&lt;br /&gt;
			  atom_codes(Val1, Val1Codes),&lt;br /&gt;
			  atom_codes(Val2, Val2Codes),&lt;br /&gt;
			  append(Val1Codes, Val2Codes, ValCodes),&lt;br /&gt;
			  atom_codes(Ertek, ValCodes)&lt;br /&gt;
		).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
% megold(X): Az X paraméterrel meghívja a főfüggvényt és az eredményt&lt;br /&gt;
% kiírja a képernyőre.&lt;br /&gt;
megold(X) :-&lt;br /&gt;
		erteke(X, E),&lt;br /&gt;
		print(&amp;#039;  &amp;#039;), print(X), print(&amp;#039; --&amp;gt; &amp;#039;), print(E), nl.&lt;br /&gt;
&lt;br /&gt;
?- nl, print(&amp;#039;Példafutások:&amp;#039;), nl.&lt;br /&gt;
?- megold(alma).&lt;br /&gt;
?- megold(ba*2).&lt;br /&gt;
?- megold(2*ba).&lt;br /&gt;
?- megold(alma+&amp;#039;_korte&amp;#039;+2*&amp;#039;_barack&amp;#039;).&lt;br /&gt;
?- nl.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;EOF&amp;amp;gt;&amp;lt;hr&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- [[BartfaiViktorJeno|kronik]] - 2005.05.27.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Infoalap]]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>