Seite 1 von 2

Wer weiß was? Absolutes Anfänger Quiz

Verfasst: 17.11.2008 23:02
von Xaby
Hier mal ein Anfängerbeitrag von mir für die Neulinge unter uns.

Für jene, die es im Gefühl haben, dass Programmieren das Richtige für sie ist.
Aber leider noch nicht viel über das Programmieren selbst wissen.

Grundvoraussetzungen:

- Lesen können
- PC an und ausschlaten können, das Forum finden
- Maus schieben und klicken können
- Finger auf die Tasten auf der Tastaur drücken können

Hilfreich wären Kenntnisse in Mathematik und Physik.
Ein leichtes Interesse am kreativen Arbeiten wie zum Beispiel im Fach:
Zeichnen, Malen oder Kunst. Wer gern musiziert oder sonst ein Hobby hat,
kann seine Ideen gern mit einbringen.

>>>>> Was wollt ihr wissen?

Das ist sicherlich am Anfang gar nicht so einfach, wenn man noch nicht
weiß, was es alles so zu wissen gibt. Oder welche Dinge einem von
Nutzen sein könnten.

Ich gehe davon aus, dass viele von den Anfängern gern ein Spiel
erschaffen wollen. Was benötigen wir dazu?

>>> Einen Helden, eine Spielwelt und ein Ziel des Spiels.

Wie im Deutschen: Subjekt Prädikat Objekt.

>>>>>>> Wer tut was mit wem

Ein Computer ist eine Maschine, die einfache Anweisungen ausführen kann,
sie kann selbst nicht nachdenken. Das bedeutet, dass wir ihr alles ganz
genau erklären müssen.

Es reicht also nicht, ihr zu sagen: Mein Held soll springen können und
ich will Äpfel mit ihm einsammeln.

>>>>>>>>>>>>>

Versuchen wir den Satz in kleinere verständliche Sätze zu formulieren.
Bedingungen hat geschrieben:Mein Held soll springen, wenn ich die Pfeiltaste nach oben drücke.
Mein Held soll nach links gehen, wenn ich die Pfeiltaste nach links drücke.
Wenn mein Held auf einen Apfel trifft, soll mein Held den Apfel einsammeln.

Wenn alle Äpfel eingesammelt sind, soll die nächste Welt geladen werden.
Die Sätze nennt man Bedingungen.
Eine Bedinung erkennt man ganz leicht an dem Wort "wenn"
Im Englischen heißt "wenn" "if".

Also immer, wenn ihr in einer Programmzeile das Wort "if" entdeckt,
wisst ihr, dass hier eine Bedingung steht.

>>>>>>>>>>>>>>>>

Wie müsste der Satz lauten, bei dem wir dem Computer klar machen
wollen, dass unser Held nicht durch eine Wand laufen kann?
Bzw. wie müsste er lauten, wenn wir unserem Helden erlauben
nur dann zu gehen zu können, wenn der Weg frei ist?
Was wäre, wenn es Türen in unserem Spiel gibt und der Held einen
bestimmten Schlüssel benötigt und dann damit durch die entsprechende
Tür hindurch gehen kann?

Es reicht aus, wenn ihr die Sätze auf deutsch formulieren könnt.

Verfasst: 17.11.2008 23:42
von STARGÅTE
Also ich habe "Was zum Essen" angeklickt denn :

Variable heißt:

Verschiedene argentinische Rippchen in Annanas belegtem Limonen Eis

Verfasst: 17.11.2008 23:50
von milan1612
STARGÅTE hat geschrieben:Also ich habe "Was zum Essen" angeklickt denn :

Variable heißt:

Verschiedene argentinische Rippchen in Annanas belegtem Limonen Eis
Nein, das sind voll ausgelutschte Rhinozeros Innereien angebraten bei langsamer Erwärmung... :lol: :lol: :lol:

Verfasst: 18.11.2008 00:00
von X360 Andy
>>>Früh morgens nach dem Aufstehen sieht man sie im Sonnenaufgang

Variable
Voll auf richtig irtierte Augen bei langen eifer

:allright:

Verfasst: 18.11.2008 00:08
von Xaby
Ich hab ja auch was grünes Glibbriges angeklickt, aber mit den Kommentaren
macht ihr doch meinen Thread kaputt :?

Soll ja nicht in die Laberecke, sondern ist eher für die Anfänger gedacht.

Einer von denen schreibt hier mal eine gut formulierte Bedinung.
Aber ist wohl etwas spät für unsere jungen Freunde /:->

Verfasst: 18.11.2008 00:13
von X360 Andy
Xaby hat geschrieben:Ich hab ja auch was grünes Glibbriges angeklickt, aber mit den Kommentaren
macht ihr doch meinen Thread kaputt :?

Soll ja nicht in die Laberecke, sondern ist eher für die Anfänger gedacht.

Einer von denen schreibt hier mal eine gut formulierte Bedinung.
Aber ist wohl etwas spät für unsere jungen Freunde /:->
Tschudligung :(

Danke für die Arbeit :allright:

Ah da kann ich grad meine Frage stellen passt ja eigentlich gut dazu...

Wieso brauch ich eigentlich Str() ?
Ich verstehe den Sinn dahinter einfach nicht , wieso kann PB das nicht selber ?

Verfasst: 18.11.2008 00:28
von THEEX
Mach das hier in die Laberecke rein, mehr kommt da eh nicht raus...

Verfasst: 18.11.2008 01:19
von Xaby
X360 Andy hat geschrieben: Wieso brauch ich eigentlich Str() ?
Ich verstehe den Sinn dahinter einfach nicht , wieso kann PB das nicht selber ?
So doof ist die Frage gar nicht.
Ich meine, der Compiler merkt ja schon den Fehler und sagt, was er benötigt:

Code: Alles auswählen

A="100"
Fehler hat geschrieben: ---------------------------
PureBasic
---------------------------
Zeile 1: Trying to write a string into a numerical variable
---------------------------
OK
---------------------------
Woher soll aber nun der Compiler deine Gedanken lesen können?
Es könnte doch sein, dass du folgendes machen wolltest:

Code: Alles auswählen

A.b=100
(Verbrauch: mindestens 1 Byte im Speicher)

Oder

Code: Alles auswählen

A.s="100"
(Verbrauch: mindestens 4 Byte im Speicher)

Auf einen String kannst du mit den ganzen StringOperatoren zugfreifen.
Die Buchstaben betrachten etc.

Aber im Speicher haste zum Beispiel folgendes:

A=65 und wenn es eine Zahl ist, ist es 65 und wenn es ein Buchstabe ist,
ist es "A"

woher soll der Compiler wissen, ob du 65 oder "A" meinst?

Das sieht im Speicher komplett gleich aus. Wenn du sagst:

Print(A+B) dann könnte das sein "A"+"B" also "AB" oder
65+66 also 131

Wenn du schreibst Print(A+B) was möchtest du dann auf dem Bildschirm sehen?

Und um hier keiner Willkür ausgesetzt zu sein, muss man halt
die Typen entsprechend umwandeln.

Verfasst: 18.11.2008 01:26
von ts-soft
> (Verbrauch: 1 Byte im Speicher)
Ne, höchstens in der Theorie :mrgreen:

Verfasst: 18.11.2008 19:36
von AND51
> Wieso brauch ich eigentlich Str() ?
PureBasic unterscheidet wie die meisten anderen Hochsprachen (Delphi, C, etc.) zwischen Zahlen und Strings.
Mit Zahlen kann der Computer besser rechnen, als mit Strings. Das ist einer der Gründe, warum man die Unterscheidung eingeführt hat. Verschiedene Scriptsprachen wie JavaScript und Perl hingegen unterscheiden NICHT zwischen Zahl und String. In JavaScript und Perl haben Variablen keinen bestimmten Typ; Variablen dort heißen "Skalare".

Code: Alles auswählen

# Ein Beispiel in Perl

$alpha = 5;   # hat den Wert 5
$beta = 77;   # hat den Wert 77

print $alpha.$beta;   # gibt 577 aus
print $alpha+$beta;   # gibt 82 aus

$beta = "Betablocker";

print $beta;   # gibt Betablocker aus
print $beta.$alpha  # gibt Betablocker5 aus
Hier werden zwei Skalare (Variablen) definiert. Ich speichere Zahlen hinein. Ein Perl-Interpreter (das Programm, was meinen Code ausführt) kann mit diesen Skalaren umgehen, als seien es Strings oder Zahlen - je nach Kontext.

Was bedeutet je nach Kontext?
Sehen wir die nächste Zeile an: print entspricht unserem Debug.
Während wir in PureBasic Debug "Hallo"+"Welt" schreiben können, gibt es in Perl zwei Operatoren, an denen Perl erkennt, ob ich zwei Objekte zusammenfügen will.
Es gibt zum einen den Punkt, der hängt zwei Variablen aneinander und gibt sie aus wie einen String. Den punkt kann ich bei Strings und Zahlen verwenden. Dann gibt es das Pluszeichen. Das hat nur eine mathematische Bedeutung. Perl erkennt, dass hier gerechnet und nicht bloß aneinandergehängt werden soll. Es rechnet also 5+77 aus und gibt das Ergebnis (82) aus.

Es gibt nur einen Typ: den Skalar. Eine Variable kann, wie schon gesagt, Strings und Zahlen aufnehmen. Zum Beweis wird in der Variablen $beta nun ein String abgespeichert. Es gibt keine Fehlermeldung! PureBaisc mit seiner Unterscheidung würde meckern: "Trying to write a string into a numeric variable."

Als weiterführenden Beweis lasse ich in der letzten Zeile den Text aus der Variable ausgeben. Verblüffend: Die letzte Zeile funktioniert ja auch! Woran liegt das? Nun, es hängt vom Kontext ab. Wir verwenden einen Punkt, woran Perl erkennt, es soll die Inhalte beider Variablen einfach aneinander hängen. Es wird hier nicht gerechnet, sondern einfach die "5" an das Wort "Betablocker" angehängt.

Ja und warum macht PureBasic das nicht?
Das ist eine gute Frage. Das ist eine ausgesprochen gute Frage. Eine Frage, die auch eine ehrliche und direkte Antwort verdient. Wie war die Frage noch gleich? Ach ja, warum PureBasic das nicht genauso macht.
Nun, wie eingangs schon beschrieben ist der Hauptgrund die Performance. Unsere Programme würden wesentlich langsamer ablaufen, wenn PureBasic selber darauf achten müsste, ob es den Inhalt einer Variable nun als String oder Zahl ansehen soll. PureBasic ist schließlich ein Compiler, Perl hingegen ein Interpreter. PureBasic kompiliert den Code, erzeugt also aus Code eine EXE-Datei. In dieser EXE-Datei stehen Befehle, die ein Prozessor versteht und ausführen kann. Ein Interpreter dagegen liest den Code jedesmal neu ein und führt ihn aus. Ich kann also jederzeit ein Skript mit dem Editor öffnen und ändern. Es kostet aber erheblich viel Zeit, das Skript jedes Mal neu einzulesen, auf Syntaxfehler zu prüfen und dann, wenn alles korrekt ist, die Befehle auszuführen. Da Skripte/Interpreter also sowieso "von Natur aus" langsamer als Programme/Compiler sind, kann man sich den Luxus dort eben leisten.
Und übrigens: Auch Floats, Quads, Doubles und Booleans (gibt's nicht in PureBasic, aber in anderen Sprachen), Words, Characters, sie alle können in einer Variablen gespeichert und miteinander gemixt werden.

Andere Grunde außer der Perfoamnce sind zum Beispiel der Speicherverbrauch. Eine zahl, beispielsweise ein Long, verbraucht nur 4 Byte Speicherplatz. Ein Long besteht aus 32 Bits und wie jeder weiß (bzw. wissen sollte) sind das 4 Byte (8 Bit = 1 Byte). Bei Strings sieht das schon wieder anders aus: In einem String verbraucht jeder Buchstabe 1 Byte. Dieser Umstand ist mit dafür verantwortlich, warum überhaupt mit Str() und Val() immer zwischen String und Zahl umgewandelt werden muss. Nur dort, wo wirklich eine Konvertierung (Umwandlung) von String nach Zahl und umgekehrt notwendig ist, verwendet man einen dieser Befehle. Umwandlungen kosten Zeit. Das ist nun einmal so. Könnte ein Computer mit Strings genauso schnell umgehen, wie mit Zahlen, dann wäre das alles kein Problem.

Zum Schluss noch eine Aufgabe für X360 Andy:
Nimm einmal meine beiden Variablen von dort oben: $alpha=5 und $beta="Betablocker". Du weißt ja jetzt, dass es . und + als Operatoren gibt.
Was kommt wohl hier bei raus?

Code: Alles auswählen

print ($alpha+$elpha).$beta.$alpha;
:mrgreen: