Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Macros: HHGTTG oder warum ist 54=42?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 13.01.2006, 20:41    Titel: Macros: HHGTTG oder warum ist 54=42? Antworten mit Zitat

Macros sind eine feine Sache, jedoch sollten sie nicht unvorsichtig benutzt werden.
Hitchhikers Guide to the Galaxy(HHGTTG) ist ein tolles Buch, Spiel und mglw. Kino-Film.
Fans kennen den Hypersuperdupaultra-Rechner DeepThought, der nach irre langer
Rechenzeit das Ergebnis '42' als Antwort auf die Frage:
'WHAT DO YOU GET, WHEN YOU MULTIPLY SIX BY NINE ?'
(Was erhält man, wenn man SECHS mit NEUN malnimmt?)
ausgibt. Es gibt im Internet genug Material zu HHGTTG, das will ich hier nicht
aufführen, aber warum ist denn nun 54=42 ???
Im freeBasic-Programm DeepThought.Bas steht eine mögliche Antwort!
Aber wo ist die Datei?
Hier: http://ytwinky.freebasic.de/files/DeepThought.Bas
Ich habe nämlich von Mecki ein büschen WebSpace bekommen, wo ich freeBASIC-Quellcodes
'lagern' möchte. Herzlichen Dank an Mecki an dieser Stelle.
(An der Werbung rechts sollte sich der geneigte Besucher nicht stören, die ganze Sache
muß schließlich irgendwie finanziert werden.)
Anmerken möchte ich noch, daß dies meine erste Site ist und sie noch nicht 100%ig läuft.
Na, das lerne ich auch noch und mglw. ist das Layout nach diesem Wochenende schon ein
ganz Anderes..
Zurück zum Thema:
Code:
#define SIX 1+5
definiert SIX als Ergebnis von 5+1, das macht 6, da gibt es keinen Zweifel..
Code:
#define NINE 8+1
ist 9, auch darüber gibt es keinen Streit..
(6*9=54, das geht auch ohne Taschenrechner, wer will, kann es mit Excel prüfen vor lachen auf dem Boden rollen )
Warum ist denn nun SIX*NINE=42?
Nun, beim Kompilieren wird der Macro-Name durch den Macro-Text ersetzt, also:
Code:
SIX*NINE=1+5*8+1
und das ist eben nichts anders als 42.
Wer mag kann mit diesen define's mal rumspielen, um andere Ergebnisse zu sehen:
Code:
Option Explicit
#Define SIX 1+5
#Define NINE 8+1
#Define Sechs (1+5)
#Define Neun (8+1)
?"SIX*NINE=" &SIX*NINE
?"(SIX*NINE)=" &(SIX*NINE)
?"(SIX)*(NINE)=" &(SIX)*(NINE)
?"NINE*SIX=" &NINE*SIX
?"Sechs*Neun=" &Sechs*Neun
Sleep
Interessant ist folgender Teil:
Code:
Do
  y$="":While y$="":y$=UCase$(Inkey$):Wend
Loop Until Instr("DE" &Chr(27), y$)<>0
Turbo-Pascal liefert in einer ähnlichen Schleife beim Drücken der Enter-Taste 1 und bricht ab.
FB0.15b macht das, was ich will und erkennt, daß Enter(also Chr(13))nicht im zu durchsuchenden String ist und liefert 0..
.. astrein..
Was lernen wir daraus?
Manchmal ist SIX*NINE=42, manchmal aber auch 54, denn der Kompiler macht nicht, was er will,
sondern das was er soll..
Viele Grüße
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 14.01.2006, 11:43    Titel: Antworten mit Zitat

Jaja, der Praprozessor ...
Immer wieder witzig.

Zu deiner Theorie:
ugly!
Meiner Meinung nach Falsch!

Das Ding Arbeitet im 13er System und wir 10er System durchgeknallt.
Zum Beweiss:
Code:
54/13=4 Rest 2
 4/13=0 Rest 4

Also ist
54 im 10er System
gleich
42 im 13er System

, folglich hat DeepThought richtig gerechnet, nur im Falschen Zahlen System.
Zunge rausstrecken
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 14.01.2006, 19:32    Titel: Antworten mit Zitat

Au prima, ein Streit, das freut mich aber grinsen
Michael Frey hat Folgendes geschrieben:
Zu deiner Theorie:
ugly!
Meiner Meinung nach Falsch!
Das akzeptiere ich nicht Kopf schütteln
Wie die o.a. Beispiele zeigen, liegt es an den Macros!
Deshalb:
Thread-Titel hat Folgendes geschrieben:
Macros: HHGTTG oder warum ist 54=42?
Daß hier viele Wege nach Rom führen ist klar und deine Erklärung einleuchtend happy
Wenn es um Zahlensysteme ginge, hätte ich ihn
möglicherweise hat Folgendes geschrieben:
Zahlensysteme: Welches ist das Richtige, um aus 54 denn doch 42 zu machen?
genannt, oder meinst du nicht?
Wenn ich einen Fehler in einem Programm suche, KANN letzten Endes eben eine solche 'fehlerhafte' Macrodefinition schuld sein.
Beachte: http://www.freebasic.net/forum/viewtopic.php?t=2528&start=15
Der Übersetzer hat Folgendes geschrieben:
#define IstGerade(n) (n AND 1 = 0)
' ...
CONST Eine_Zahl = 2
IF IstGerade( Eine_Zahl ) THEN PRINT Eine_Zahl; " ist gerade!"
' ...
END

Vorsicht: #define macht in Wirklichkeit (n AND (1 = 0)) und das ist immer 0.
Auf solche Sachen wollte ich nur hinweisen..
..rechnen an sich ist langweilig lachen
Viele Grüße
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 14.01.2006, 20:08    Titel: Antworten mit Zitat

War ja auch nicht ganz ernst gemeint grinsen.

Klar kenne ich den Ärger den man sich mit Macros einfangen kann und das sie trotzdem vieles erleichtern.
(Plötzlich gibt es Fehler in Quellcode der im Editor nicht existiert oder plötzlich fehlt ein "end sub" weil man ein "#Endif" vergessen hat)
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 14.01.2006, 20:27    Titel: Antworten mit Zitat

Michael Frey hat Folgendes geschrieben:
War ja auch nicht ganz ernst gemeint grinsen.
..habe ich auch nicht so aufgefaßt.. happy
Aber weil ich ein ganz fieser Nachrechner bin, habe ich deine Zahlensystemgeschichte natürlich überprüft lachen
Nicht, weil ich dir mißtraue, sondern endlich hatte ich mal einen 'richtigen' Grund, meinen AllesUmwandler zu testen..
..wenn du jetzt aber ein FB-Programm erwartest, muß ich dich enttäuschen:
Für so etwas habe ich doch Numerical Chameleon 1.0.6, damit rechne ich alles um. Das ist das zweite Mal, daß ich ein java-Programm benutze, das erste war dies CoffeeCup, mit dem Grafiken nach freeBASIC.de hochgeladen werden können.
Doch nun zurück zur Umwandlung:
Du hast ja recht..
Ich fand das Beispiel aus dem amerikanischen Forum nur deshalb nicht schlecht, weil es ganz deutlich macht, wohin Copy&Paste-Programmierung führen kann: Das #define kann nicht falsch sein, das habe ich aus dem amerikanischen Forum, der Fehler muß woanders liegen, ja und dann such mal..
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 14.01.2006, 20:56    Titel: Antworten mit Zitat

Alles Umwandler grinsen.
Geiles "Spielzeug" auf dem Programmierbaren Taschenrechner.
Hab mir auch mal so ein Programm für meinen Taschenrechner (Casio Classpad 300) geschrieben.
Ich war der (fast) einizige der das 7er System (spielerei an der Berufschule um die Lehrlinge zustressen) mit dem Taschenrechner umwandeln konnte und der sogar den Lösungsweg von Taschenrechner ab schreiben konnte grinsen.

Macht echt Fun die anderen beim berrechen des Restes zuzusehen und ich kann ihn ganz einfach vom Taschenrechner abschreiben.
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 14.01.2006, 21:08    Titel: Antworten mit Zitat

Ich wollte mal selbst einen AllesUmwandler schreiben(in Pascal), habe es dann aber bei den Systemen 2, 8, 10 und 16 belassen, weil der Rest nur theoretischen Wert hat, auch "um die Lehrlinge zustressen"..
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz