Wer weiß was? Absolutes Anfänger Quiz

Anfängerfragen zum Programmieren mit PureBasic.

Was ist eine Variable

Was zum Essen
7
24%
Eine Variable ist immer etwas glibschiges Grünes
5
17%
meist sind Variablen eckig
1
3%
Variablen sind Behälter für Werte
11
38%
meine große Schwester kommt immer Abends mit einer nach Hause
3
10%
Früh morgens nach dem Aufstehen sieht man sie im Sonnenaufgang
2
7%
 
Insgesamt abgegebene Stimmen: 29

Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Wer weiß was? Absolutes Anfänger Quiz

Beitrag 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.
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Also ich habe "Was zum Essen" angeklickt denn :

Variable heißt:

Verschiedene argentinische Rippchen in Annanas belegtem Limonen Eis
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag 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:
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

>>>Früh morgens nach dem Aufstehen sieht man sie im Sonnenaufgang

Variable
Voll auf richtig irtierte Augen bei langen eifer

:allright:
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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 /:->
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag 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 ?
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Mach das hier in die Laberecke rein, mehr kommt da eh nicht raus...
Eine Art Query-Planner soll die Ausführung von Map/Reduce-Funktionen in Hadoop stark beschleunigen.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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.
Zuletzt geändert von Xaby am 18.11.2008 10:31, insgesamt 1-mal geändert.
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

> (Verbrauch: 1 Byte im Speicher)
Ne, höchstens in der Theorie :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten