1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
<!DOCTYPE html>
<html lang="sl">
<head>
<meta charset="utf-8" />
<title>CodeQ: Prolog</title>
<link rel="stylesheet" type="text/css" href="/css/codeq.css" />
<link rel="stylesheet" type="text/css" href="../style.css" />
</head>
<body>
<h1><span class="codeq">CodeQ</span>: Prolog</h1>
<p>
V oknu, ki ga sedaj bereš, je nekaj praktičnih napotkov in teorije za vsak učni
sklop. Ob tem je tudi seznam nalog tega sklopa. Naloge lahko načeloma rešuješ v
poljubnem vrstnem redu, so pa tipično urejene po naraščajoči težavnosti.
Nekatere naloge tudi lažje rešiš z uporabo rešitev predhodnih nalog. Teh
rešitev ne potrebuješ prepisovati, sistem si jih zapomni sam od sebe in jih
lahko takoj uporabljaš, če želiš.
</p>
<h2>Kako rešujem naloge?</h2>
<p>
Nalogo začneš reševati s klikom nanjo. S tem se odpre spletna stran, v kateri
programiraš rešitev. Vsaka stran je povezana s konkretno nalogo in vsebuje
štiri razdelke.
Razpored razdelkov lahko spremeniš v nastavitvah.
</p>
<ul>
<li>
<p>
Navodila, ki na kratko opišejo nalogo. Posebej bodi pozoren na ime predikata,
ki ga moraš sprogramirati – poimenovati ga moraš točno tako, kot je navedeno,
da bo sistem razpoznal tvojo rešitev.
Seveda pa lahko sprogramiraš več pomožnih predikatov; tu ni nobenih omejitev.
</p>
<p>
Poleg tega bodi pozoren tudi na število argumentov, ki jih ciljni predikat
zahteva. Npr. predikat <code>mother(?X, ?Y)</code> zahteva dva argumenta,
<code>X</code> in <code>Y</code>. Vprašaj pred imenom argumenta pomeni, da ta
argument lahko predstavlja tako vhod kot izhod. Argumenti, ki delujejo le kot
vhod, so označeni s <code>+</code>, argumenti, ki delujejo le kot izhod, pa z
<code>-</code>.
Na začetku se ne obremenjuj s tem, ampak preprosto programiraj, vhod/izhod se
bo večinoma pravilno uredil sam od sebe. Prolog je pameten. 😉
</p>
</li>
<li>
<p>
V levem razdelku, ti bo aplikacija dajala povratne informacije. Te so lahko v
obliki splošnega plana (kako se neke naloge lotiti), ali pa specifični nasveti,
kaj je morda narobe s tvojo <em>trenutno</em> rešitvijo.
Namigi so različni, včasih bodo tudi v obliki protiprimera – konkretnega vhoda,
na katerem tvoj program deluje narobe. Tukaj bodo tudi prologova opozorila in
obvestila o napakah v programu.
</p>
<p>
Če se ti kakšen namig zdi napačen, najprej dobro poglej svoj program.
Če se ti še vedno zdi napačen, nas obvesti.
Če bo res napačen, plačamo kavo mi, sicer jo plačaš ti! 😉
</p>
<p>
(<em>Disclaimer</em>: včasih ni možno z gotovostjo ugotoviti, ali je neka
napaka prisotna; takrat sistem uporabi besede, kot so <em>mogoče</em>,
<em>morda</em> in <em>verjetno</em> – tega ne štejemo kot napačno.)
</p>
</li>
<li>
<p>
Konzola, tipično črne barve in kjer te čaka prologov poziv <code>?-</code>, je
namenjena tvojemu pogovoru s prologom. V ozadju teče minimalno okrnjen
<a target="_blank" href="http://www.swi-prolog.org">SWI Prolog</a>,
ki mu lahko zastavljaš vprašanja.
Vse potrebne podatke za posamezno nalogo (npr. bazo znanja) ima sistem že
naložene. Prav tako vedno samodejno naloži trenutno različico tvojega programa.
Prologu lahko zastavljaš poljubna vprašanja, ne le ta, povezana s tvojim
programom.
</p>
</li>
<li>
<p>
Nazadnje je tu še osrednji del: urejevalnik besedila, v katerem pišeš svojo
rešitev. Na prvi pogled morda res manjkajo reči, kot je npr. „autocomplete“, a
boš hitro ugotovil, da so programi v prologu kratki in ne zahtevajo veliko
tipkanja.
</p>
<p>
Če tvoj program prerase 8‒10 vrstic, si ga verjetno preveč zakompliciral! 😉
Najdaljši program v vseh sklopih nalog ne potrebuje več kot kakšnih 12 vrstic
(in takšne naloge so redke). Prej omenjeni gumbi pa so opisani spodaj.
</p>
</li>
</ul>
<p>
Osrednji programerski del vsebuje tudi gumba „Plan“ in „Testiraj“.
Najpogosteje boš uporabljal slednjega, ki sproži samodejno preverjanje tvoje
rešitve.
Gumb „Plan“ ti da splošen nasvet, kako se lotiti dane naloge; včasih ga lahko
pritisneš večkrat, za zmeraj bolj „izdajalske“ nasvete.
Seveda pa poskusi vsako nalogo najprej rešiti brez uporabe namigov.
</p>
<p>
Če program ni pravilen, ti bo <span class="codeq">CodeQ</span> poleg sporočila
o opravljenih testih včasih ponudil gumb „Namig“.
Ta gumb ti poda namig, kaj je morda narobe s tvojim programom.
Nekateri namigi so pripravljeni ročno s strani avtorjev aplikacije, včasih bo
na delu umetna inteligenca, včasih boš dobil protiprimer, na katerem program ne
deluje, včasih pa namiga sploh ne bo.
V tem primeru je program najbrž grozen! Malce se hecam… morda. 😉
</p>
<h2>Kako shranim rešitve?</h2>
<p>
Sistem <span class="codeq">CodeQ</span> avtomatsko shranjuje tvoje rešitve na
strežnik, seveda pa moraš biti povezan na internet.
Vse spremembe se beležijo v realnem času, zato ne potrebuješ skrbeti za
shranjevanje kode ali se obremenjavati s tem kdaj ti bo potekla seja.
Trajanje seje je načeloma 60 minut, prekine pa se tudi, če se na drugem
računalniku ali v drugem zavihku prijaviš z istim uporabniškim imenom.
</p>
<p>
Opozorilo: glede na to, da sistem v realnem času shranjuje vse, kar v njem
pišeš (tako je, keylogger je!), priporočamo, da se zaupnih sporočil ne piše
vanj. Sicer jih bomo prebrali, obljubimo! 😊
</p>
<p>
Vse svoje rešitve za posamezni sklop si lahko ogledaš s klikom na povezavo ob
naslovu.
</p>
</body>
</html>
|