If Abfragen mit einer print anweisung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
BlackJack

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. :-)
Benutzeravatar
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]
In specifications, Murphy's Law supersedes Ohm's.
BlackJack

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]
Antworten