Nach den ganzen strukturierten „high level“-Lösungen noch eine die aus einer Zeit stammen könnte als es Wikipedia noch nicht gab: Ein BASIC-Programm für den C64:
[codebox=locobasic file=Unbenannt.txt] 10 u=0:cr$=chr$(13):print chr$(14):poke 53280,0:poke 53281,0
20 print"{blue}{clear}Wikipedia{red} - hochladen von Bildern"
100 q$="Hast Du das Bild selbst erstellt":gosub 2000:on a goto 500
200 q$="Willst Du das Bild unter einer in"+cr$
210 q$=q$+"der Wikipedia zulaessigen freien"+cr$
220 q$=q$+"Lizenz veroeffentlichen":gosub 2000:on a goto 1010
300 q$="Sind Bildrechte Dritter"+cr$+"auszuschliessen":gosub 2000:on a goto 400
310 goto 1000
400 q$="Hast Du das schriftliche"+cr$+"Einverstaendnis aller Betroffenen"
410 gosub 2000:on a+1 goto 1000,1010
500 q$="Ist der Urheber des Bildes bekannt":gosub 2000:on a goto 800
600 u=1:q$="Ist der Urheber vor mehr als"+cr$+"70 Jahren verstorben"
610 gosub 2000:u=0:on a+1 goto 300,700,800
700 q$="Hat der Urheber des Bildes"+cr$
710 q$=q$+"zugestimmt das Bild unter eine freie"+cr$
720 q$=q$+"Lizenz zu stellen":goto 410
800 q$="Ist das Bild aelter als 100 Jahre":goto 410
1000 n$="":goto 1020
1010 n$="nicht "
1020 print"{down}{purple}Bild ";n$;"hochladen.{red}":end
2000 print"{down}";q$;"? {purple}j/n";:if u then print"/u(nbekannt)";
2010 print"{red}"
2020 get a$:if a$="" then 2020
2030 if a$="j" then a=0:return
2040 if a$="n" then a=1:return
2050 if u and a$="u" then a=2:return
2060 goto 2000[/code]
Dazu hätte es dann noch einen Zettel gegeben auf dem handschriftlich der Entscheidungsgraph gezeichnet wäre, mit den Fragen von 1 bis 8 nummeriert, und dem Hinweis das jede der Fragen bei einer Hunderter-Zeilennummer beginnt (100: Frage 1, 200: Frage 2, …), bei 1000 der Einsprung zum Hochladen und 1010 der Einsprung zum nicht-hochladen ist, und bei 2000 das Unterprogramm, das dem Benutzer die aktuelle Frage (Q$) stellt und nach der Antwort (a) fragt. Und eine Liste mit den Variablennamen und einer Erklärung was sie bedeuten.
If Abfragen mit einer print anweisung
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
In SWI-Prolog:[codebox=prolog file=Unbenannt.txt]question_0(
'Hast du das Bild selbst erstellt?',
question_1, question_2, answer_2).
question_1(
'Willst du das Bild unter einer in der Wikipedia zulaessigen Lizenz veroeffentlichen?',
question_5, answer_1, answer_2).
question_2(
'Ist der Urheber des Bildes bekannt?',
question_3, question_4, answer_2).
question_3(
'Ist der Urheber vor mehr als 70 Jahren verstorben?',
question_5, question_6, question_4).
question_4(
'Ist das Bild mehr als 100 Jahre alt?',
answer_0, answer_1, answer_2).
question_5(
'Sind Bildrechte Dritter ausgeschlossen?',
answer_0, question_7, answer_2).
question_6(
'Hat der Urheber des Bides zugestimmt, das Bild unter eine freie Lizenz zu stellen?',
answer_0, answer_1, answer_2).
question_7(
'Hast du das schriftliche Einverstaendnis aller Betroffenen?',
answer_0, answer_1, answer_2).
get_valid_chars(answer_2, ' (j/n)') :- !.
get_valid_chars(_, ' (j/n/u)').
ask(Question, Unknown, Atom) :-
write(Question),
get_valid_chars(Unknown, Valid),
writeln(Valid),
get_single_char(Char),
char_code(Atom, Char).
dispatch(j, Yes, _, _, Yes) :- !.
dispatch(n, _, No, _, No) :- !.
dispatch(_, _, _, Unknown, Unknown).
evaluate(answer_0, 'Hochladen!') :- !.
evaluate(answer_1, 'Nicht hochladen!') :- !.
evaluate(answer_2, 'Falsche Eingabe!') :- !.
evaluate(Q, Answer) :-
call(Q, Question, Yes, No, Unknown),
ask(Question, Unknown, Input),
dispatch(Input, Yes, No, Unknown, Next),
!, evaluate(Next, Answer).
run :-
evaluate(question_0, Answer),
writeln(Answer).[/code]
'Hast du das Bild selbst erstellt?',
question_1, question_2, answer_2).
question_1(
'Willst du das Bild unter einer in der Wikipedia zulaessigen Lizenz veroeffentlichen?',
question_5, answer_1, answer_2).
question_2(
'Ist der Urheber des Bildes bekannt?',
question_3, question_4, answer_2).
question_3(
'Ist der Urheber vor mehr als 70 Jahren verstorben?',
question_5, question_6, question_4).
question_4(
'Ist das Bild mehr als 100 Jahre alt?',
answer_0, answer_1, answer_2).
question_5(
'Sind Bildrechte Dritter ausgeschlossen?',
answer_0, question_7, answer_2).
question_6(
'Hat der Urheber des Bides zugestimmt, das Bild unter eine freie Lizenz zu stellen?',
answer_0, answer_1, answer_2).
question_7(
'Hast du das schriftliche Einverstaendnis aller Betroffenen?',
answer_0, answer_1, answer_2).
get_valid_chars(answer_2, ' (j/n)') :- !.
get_valid_chars(_, ' (j/n/u)').
ask(Question, Unknown, Atom) :-
write(Question),
get_valid_chars(Unknown, Valid),
writeln(Valid),
get_single_char(Char),
char_code(Atom, Char).
dispatch(j, Yes, _, _, Yes) :- !.
dispatch(n, _, No, _, No) :- !.
dispatch(_, _, _, Unknown, Unknown).
evaluate(answer_0, 'Hochladen!') :- !.
evaluate(answer_1, 'Nicht hochladen!') :- !.
evaluate(answer_2, 'Falsche Eingabe!') :- !.
evaluate(Q, Answer) :-
call(Q, Question, Yes, No, Unknown),
ask(Question, Unknown, Input),
dispatch(Input, Yes, No, Unknown, Next),
!, evaluate(Next, Answer).
run :-
evaluate(question_0, Answer),
writeln(Answer).[/code]
In specifications, Murphy's Law supersedes Ohm's.
Nochmal JavaScript, weil ich Daten und Programm mal trennen wollte in dem die Daten als Text und `id`- und `data-*`-Attribute im HTML stehen. Es gibt eine Liste von Fragen und eine Liste von Antworten als Listen im HTML. Die Graph-Struktur ist über `id` und `date-*`-Attribute abgebildet.
Keine Syntaxhervorhebung weil die nicht mit drei Sprachen (HTML, CSS, JavaScript) in einer Datei klar kommt.
[codebox=text file=Unbenannt.txt]<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Wikipedia — hochladen von Bildern</title>
<style type="text/css">
#ui {
width: 75%;
border: thin solid black;
padding: 2em;
}
.normal {
background-color: lightblue;
}
.positive {
background-color: lightgreen;
}
.negative {
background-color: lightpink;
}
ol#questions, ol#answers {
margin: 0;
padding: 0;
list-style: none;
}
.buttons {
border: medium ridge blue;
border-radius: 10px;
background-color: lightblue;
float: right;
padding: 1em;
}
</style>
</head>
<body>
<div id="ui">
<ol id="questions" data-start="#q1">
<li id="q1" data-yes="#q2" data-no="#q5">
Hast Du das Bild selbst erstellt?
</li>
<li id="q2" data-yes="#q3" data-no="#false">
Willst Du das Bild unter einer in der Wikipedia zulässigen freien Lizenz
veröffentlichen?
</li>
<li id="q3" data-yes="#true" data-no="#q4">
Sind Bildrechte Dritter auszuschliessen?
</li>
<li id="q4" data-yes="#true" data-no="#false">
Hast Du das schriftliche Einverständnis aller Betroffenen?
</li>
<li id="q5" data-yes="#q6" data-no="#q8">
Ist der Urheber des Bildes bekannt?
</li>
<li id="q6" data-yes="#q3" data-no="#q7" data-unknown="#q8">
Ist der Urheber vor mehr als 70 Jahren verstorben?
</li>
<li id="q7" data-yes="#true" data-no="#false">
Hat der Urheber des Bildes zugestimmt das Bild unter eine freie Lizenz
zu stellen?
</li>
<li id="q8" data-yes="#true" data-no="#false">
Ist das Bild älter als 100 Jahre?
</li>
</ol>
<ol id="answers">
<li id="true" data-reset="#q1">Bild hochladen.</li>
<li id="false" data-reset="#q1">Bild <em>nicht</em> hochladen.</li>
</ol>
<div class="buttons">
<button id="yes-button" data-answer-type="yes">Ja</button>
<button id="no-button" data-answer-type="no">Nein</button>
<button id="unknown-button" data-answer-type="unknown">Unbekannt</button>
<button id="reset-button" data-answer-type="reset">Neustart</button>
</div>
</div>
<script type="text/javascript">
var ANSWERS = ['yes', 'no', 'unknown', 'reset'];
var hide = function (element) {
element.style.display = 'none';
};
var show = function (element) {
element.style.display = '';
};
var hideAll = function (elements) {
for (var i = 0; i < elements.length; i++) hide(elements);
};
var Node = function (element) {
this.element = element;
};
Node.prototype.show = function () { show(this.element); };
Node.prototype.hide = function () { hide(this.element); };
Node.prototype.getPossibleAnswers = function () {
var result = {};
for (var i = 0; i < ANSWERS.length; i++) {
answer = ANSWERS;
id = this.element.dataset[answer];
if (id !== undefined) {
result[answer] = id;
}
}
return result;
};
Node.prototype.get = function (answer) {
return this.element.dataset[answer];
};
var Graph = function (elements, startId) {
var self = this;
this.nodes = {};
for (var i = 0; i < elements.length; i++) {
var element = elements;
var node = new Node(element);
node.hide();
this.nodes['#' + element.id] = node;
};
this.ui = document.querySelector('#ui');
this.buttonsElement = this.ui.querySelector('.buttons');
for (var i = 0; i < ANSWERS.length; i++) {
var answer = ANSWERS;
var button = this.buttonsElement.querySelector(
'#' + answer + '-button'
);
button.addEventListener('click', this.onChoice.bind(this, answer));
}
this.current = null;
this.moveTo(startId);
};
Graph.prototype.moveTo = function (nodeId) {
if (this.current !== null) {
this.current.hide();
}
this.current = this.nodes[nodeId];
this.current.show();
if (nodeId === '#true') {
this.ui.style.backgroundColor = 'lightgreen';
} else if (nodeId === '#false') {
this.ui.style.backgroundColor = 'lightpink';
} else {
this.ui.style.backgroundColor = 'lightblue'
}
this.updateButtons();
};
Graph.prototype.updateButtons = function () {
hideAll(this.buttonsElement.querySelectorAll('button'));
var possibleAnswers = this.current.getPossibleAnswers();
var answers = Object.keys(possibleAnswers);
for (var i = 0; i < answers.length; i++) {
var buttonId = '#' + answers + '-button';
show(this.buttonsElement.querySelector(buttonId));
}
};
Graph.prototype.onChoice = function (answer) {
this.moveTo(this.current.get(answer));
};
var elements = document.querySelectorAll('#ui li');
var startId = document.querySelector('#questions').dataset.start;
var graph = new Graph(elements, startId);
</script>
</body>
</html>[/code]
Keine Syntaxhervorhebung weil die nicht mit drei Sprachen (HTML, CSS, JavaScript) in einer Datei klar kommt.
[codebox=text file=Unbenannt.txt]<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Wikipedia — hochladen von Bildern</title>
<style type="text/css">
#ui {
width: 75%;
border: thin solid black;
padding: 2em;
}
.normal {
background-color: lightblue;
}
.positive {
background-color: lightgreen;
}
.negative {
background-color: lightpink;
}
ol#questions, ol#answers {
margin: 0;
padding: 0;
list-style: none;
}
.buttons {
border: medium ridge blue;
border-radius: 10px;
background-color: lightblue;
float: right;
padding: 1em;
}
</style>
</head>
<body>
<div id="ui">
<ol id="questions" data-start="#q1">
<li id="q1" data-yes="#q2" data-no="#q5">
Hast Du das Bild selbst erstellt?
</li>
<li id="q2" data-yes="#q3" data-no="#false">
Willst Du das Bild unter einer in der Wikipedia zulässigen freien Lizenz
veröffentlichen?
</li>
<li id="q3" data-yes="#true" data-no="#q4">
Sind Bildrechte Dritter auszuschliessen?
</li>
<li id="q4" data-yes="#true" data-no="#false">
Hast Du das schriftliche Einverständnis aller Betroffenen?
</li>
<li id="q5" data-yes="#q6" data-no="#q8">
Ist der Urheber des Bildes bekannt?
</li>
<li id="q6" data-yes="#q3" data-no="#q7" data-unknown="#q8">
Ist der Urheber vor mehr als 70 Jahren verstorben?
</li>
<li id="q7" data-yes="#true" data-no="#false">
Hat der Urheber des Bildes zugestimmt das Bild unter eine freie Lizenz
zu stellen?
</li>
<li id="q8" data-yes="#true" data-no="#false">
Ist das Bild älter als 100 Jahre?
</li>
</ol>
<ol id="answers">
<li id="true" data-reset="#q1">Bild hochladen.</li>
<li id="false" data-reset="#q1">Bild <em>nicht</em> hochladen.</li>
</ol>
<div class="buttons">
<button id="yes-button" data-answer-type="yes">Ja</button>
<button id="no-button" data-answer-type="no">Nein</button>
<button id="unknown-button" data-answer-type="unknown">Unbekannt</button>
<button id="reset-button" data-answer-type="reset">Neustart</button>
</div>
</div>
<script type="text/javascript">
var ANSWERS = ['yes', 'no', 'unknown', 'reset'];
var hide = function (element) {
element.style.display = 'none';
};
var show = function (element) {
element.style.display = '';
};
var hideAll = function (elements) {
for (var i = 0; i < elements.length; i++) hide(elements);
};
var Node = function (element) {
this.element = element;
};
Node.prototype.show = function () { show(this.element); };
Node.prototype.hide = function () { hide(this.element); };
Node.prototype.getPossibleAnswers = function () {
var result = {};
for (var i = 0; i < ANSWERS.length; i++) {
answer = ANSWERS;
id = this.element.dataset[answer];
if (id !== undefined) {
result[answer] = id;
}
}
return result;
};
Node.prototype.get = function (answer) {
return this.element.dataset[answer];
};
var Graph = function (elements, startId) {
var self = this;
this.nodes = {};
for (var i = 0; i < elements.length; i++) {
var element = elements;
var node = new Node(element);
node.hide();
this.nodes['#' + element.id] = node;
};
this.ui = document.querySelector('#ui');
this.buttonsElement = this.ui.querySelector('.buttons');
for (var i = 0; i < ANSWERS.length; i++) {
var answer = ANSWERS;
var button = this.buttonsElement.querySelector(
'#' + answer + '-button'
);
button.addEventListener('click', this.onChoice.bind(this, answer));
}
this.current = null;
this.moveTo(startId);
};
Graph.prototype.moveTo = function (nodeId) {
if (this.current !== null) {
this.current.hide();
}
this.current = this.nodes[nodeId];
this.current.show();
if (nodeId === '#true') {
this.ui.style.backgroundColor = 'lightgreen';
} else if (nodeId === '#false') {
this.ui.style.backgroundColor = 'lightpink';
} else {
this.ui.style.backgroundColor = 'lightblue'
}
this.updateButtons();
};
Graph.prototype.updateButtons = function () {
hideAll(this.buttonsElement.querySelectorAll('button'));
var possibleAnswers = this.current.getPossibleAnswers();
var answers = Object.keys(possibleAnswers);
for (var i = 0; i < answers.length; i++) {
var buttonId = '#' + answers + '-button';
show(this.buttonsElement.querySelector(buttonId));
}
};
Graph.prototype.onChoice = function (answer) {
this.moveTo(this.current.get(answer));
};
var elements = document.querySelectorAll('#ui li');
var startId = document.querySelector('#questions').dataset.start;
var graph = new Graph(elements, startId);
</script>
</body>
</html>[/code]