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:

Programmveränderungen ohne Zutun

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



Anmeldungsdatum: 24.03.2006
Beiträge: 181

BeitragVerfasst am: 22.09.2014, 20:05    Titel: Programmveränderungen ohne Zutun Antworten mit Zitat

Moin Gemeinde!

Hab' mir heute ein kleines Progrämmchen geschrieben, das auch recht fleißig arbeitete.
Ich wollte dann noch einen Zusatzfunktion einbauen. Das war nicht viel. Vom Grundsatz her war das nur eine Gosub...return Geschichte. gelang mir acuh flüssig und: Das Programm rechnete jetzt nur noch Blödsinn! Es lief zwar alles, aber die Werte waren völlig falsch! Selbst als ich die Einfügungen rauslöschte und auf Neustart ging: dasselbe Ergebniss. Kurzerhand hab' ich den Rechenkern rauskopiert und in eine neues Programm rein: Da lief es wieder wie zuvor!
Was ist da geschehen?
Sind die Programmzeilen, die ich auf dem Bildschirm sehe, gar nicht das Programm?

Manchmal verschwinden auch Zeilen bei copy und paste. Hat das damit zu tun?

grüsse Nils
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 131

BeitragVerfasst am: 22.09.2014, 20:55    Titel: Antworten mit Zitat

Genau sowas passiert leicht, wenn man gosub/return statt Prozeduren nutzt. (sub bzw. function). Du wirst irgendwo in deinem Programm eine Variable doppelt verwenden. Das würde nicht passieren, wenn du unserer Empfehlung folgen würdest. Dann könntest du lokale Variablen nutzen und alles was von außen kommt nicht verändert mit ByVal Parametern bzw. was geändert werden soll mit Byref übergeben.

In qbasic wird standardmäßig als byref übergeben. das Byval schlüsselwort gibt es dort nicht, das gibt es erst ab Quickbasic 4.5. Allerdings kann man beim Aufruf der Prozedur mit hilfe von klammern eine Kopie einer Variablen übergeben also indirekt Byval.

Der große Unterschied liegt darin, dass du mit den Klammern beim jedem Aufruf aufpassen musst, wie du denn die Parameter übergibst. Mit dem ByVAL und ByREF oder in FB CONST Schlüsselwörtern bzw. Konzept kannst du das bequem einmal Zentral in der Prozedur Definition erldeigen, was deutlich Fehlerunanfälliger ist.

Beispiel für den QBASIC 1.1 Interpreter:
Code:

DECLARE SUB AddiereABCSpeichereInD (a AS INTEGER, b AS INTEGER, c AS INTEGER, d AS INTEGER)

DIM bla AS INTEGER
DIM blub AS INTEGER
DIM brrr AS INTEGER
DIM ergebnis AS INTEGER

CLS
bla = 1
blub = 2
brrr = 3
ergebnis = 4

'alles per BYREF
AddiereABCSpeichereInD bla, blub, brrr, ergebnis
PRINT bla, blub, brrr, ergebnis

bla = 1
blub = 2
brrr = 3
ergebnis = 4

'Alles in klammern BYVAL
AddiereABCSpeichereInD (bla), (blub), (brrr), ergebnis

PRINT bla, blub, brrr, ergebnis

SUB AddiereABCSpeichereInD (a AS INTEGER, b AS INTEGER, c AS INTEGER, d AS INTEGER)
  d = a + b + c
  a = 10
  b = 20
  c = 30
END SUB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 910
Wohnort: Austria

BeitragVerfasst am: 22.09.2014, 21:06    Titel: Antworten mit Zitat

Das kommt davon wenn man GOSUB anstatt SUB/FUNCTION und QBasic anstatt FreeBasic einsetzt. Zunge rausstrecken

Nein, im Ernst - da GOSUB keinen neuen Scope (Kontext) erzeugt kann es leicht sein dass durch das Programm drumherum die Funktion quasi "gestört" wird. Die Empfehlung SUB/FUNCTION stattdessen zu verwenden kommt ja nicht von irgendwoher.

Das Zeilen beim copy/paste verwinden ist seltsam (Bedienungsfehler?) - welche IDE verwendest du?
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 836
Wohnort: Ruhrpott

BeitragVerfasst am: 22.09.2014, 22:41    Titel: Antworten mit Zitat

Ich schließe mich der Argumentation meiner Vorgänger an. grinsen

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 131

BeitragVerfasst am: 23.09.2014, 01:13    Titel: Antworten mit Zitat

Ich hatte gerade so richtig Spaß nach über 10 Jahren wieder etwas in QBasic zu proggen und ich muss sagen ich vermisse so viele Dinge. Aber letztlich habe ich wohl ein gutes Beispiel erstellt, wie man auch in so einer alten beschränkten Umgebung wie QBasic übersichtlich, fast objectorientiert programmieren kann. Ich habe nichts kommentiert, weil der code eigentlich keinen echten Sinn hat, außer zu veranschaulichen wie man types / subs / function und "arrays mit for schleifen" nutzt.

Nils ich glaube wenn du dieses Beispiel verstanden hast, also richtig Verstanden, indem du es vielleicht sogar weiterspinnst mit weiteren Vector und Vector Array Operationen, willst du ganz von alleine zu einer Objektorientierteren Sprache wechseln. FreeBasic hat soviel zu bieten. aber selbst wenn du bei QB bleibst, nutze wenigstens die Möglichkeiten, die es zu bieten hat.

Code:
DECLARE SUB V3D.PrintArray (v() AS ANY)
DECLARE SUB V3D.ADD (v1 AS ANY, v2 AS ANY, r AS ANY)
DECLARE SUB V3D.InitArray (v() AS ANY)
DECLARE FUNCTION V3D.STR$ (v AS ANY)

TYPE Vector3D
   x AS DOUBLE
   y AS DOUBLE
   z AS DOUBLE
END TYPE

CLS
DIM v1 AS Vector3D
DIM v2 AS Vector3D

v1.x = 10
v1.y = 20
v1.z = 3

v2 = v1
v2.z = 0

PRINT V3D.STR$(v1)
PRINT V3D.STR$(v2)
V3D.ADD v1, v2, v2
PRINT V3D.STR$(v2)

DIM v(1 TO 4) AS Vector3D
V3D.InitArray v()
V3D.PrintArray v()

DIM r AS Vector3D

FOR i% = LBOUND(v) TO UBOUND(v)
   V3D.ADD r, v(i%), r
   PRINT i%, V3D.STR(r)
NEXT i%

SUB V3D.ADD (v1 AS Vector3D, v2 AS Vector3D, r AS Vector3D)
r.x = v1.x + v2.x
r.y = v1.y + v2.y
r.z = v1.z + v2.z
END SUB

SUB V3D.InitArray (v() AS Vector3D)
RANDOMIZE TIMER
FOR i% = LBOUND(v) TO UBOUND(v)
   v(i%).x = RND * RND * i%
   v(i%).y = RND * RND * i%
   v(i%).z = RND * RND * i%
NEXT i%
END SUB

SUB V3D.PrintArray (v() AS Vector3D)
FOR i% = LBOUND(v) TO UBOUND(v)
   PRINT V3D.STR$(v(i%))
NEXT i%
END SUB

FUNCTION V3D.STR$ (v AS Vector3D)
V3D.STR$ = STR$(v.x) + "," + STR$(v.y) + "," + STR$(v.z)
END FUNCTION
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 181

BeitragVerfasst am: 23.09.2014, 10:33    Titel: Antworten mit Zitat

@ RockTheShock:
Nun, an die Doppelbelegung einer Variablen denke ich doch zu allererst. Das isses nich!

@ St_W:
Schön wenn man verstanden wird!
q-p: Nein, kein Bedienungsfehler! Die kopierte Seite verschwindet, was ja nur die ausgeschnittene dürfte. Mit der Zeit habe ich gelernt das zu ignorieren, denn später ist die wieder da. Man kann das auch erzwingen, wenn man speichert.
Nur falls gosub...return tatsächlich irgendwelchen Mist macht, sollte das doch rundherum bekannt sein.

@ RockTheShock:
Deinen Code schau ich mir an. Sobald ich mein gestohlenes Programm wieder hergestellt habe. ZZ sieht das so aus, dass ich den Algorithmus zigfach überprüft habe und keinen Fehler finde. Vllt. gibt mir das geschilderte Problem (das geschah nämlich in einem Programmteil, das ich zur Frustbekämpfung in ein eigenes Programm überführte, den Fingerwink zur Lösung.
Gib mir doch bitte mal einen genauen link auf ein Programmpaket -sozusagen ein sorglos Rundumpaket- wo ich mit einem Download alles habe, was ich zum programmieren in FB brauche! Das würde meine Entscheidung für FB sehr erleichtern. ZZ sehe ich da nämlich kein Land: Downloads über Downloads.

p.s.: Da fällt mir noch ein: Ich hatte zwei variablen dimensioniert sie hießen ll und lll. Das hat QB akzeptiert und im Programmlauf korrekt mit gearbeitet. Im Laufe der weiteren Programmierung fügte ich nur eine Leerzeile ein und QB meckerte was von Variable bereits dimensioniert. Ich bekam das nicht mehr weg. Ist das nicht merksam?

grüsse aus der besonnten Stadt am vielen Wasser

Nils
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 131

BeitragVerfasst am: 23.09.2014, 12:29    Titel: Antworten mit Zitat

Naja für FreeBasic brauchst du den Compiler am besten die aktuellste Version. Am sichersten fährst du mit der Windows 32 bit Version. Diese erzeugt 32 bit Programme die aber auch problemlos auf 64 bit Systemen laufen.
http://www.freebasic-portal.de/downloads/aktuelle-compiler/

Und dann brauchst du eine IDE deiner Wahl.
http://www.freebasic-portal.de/downloads/ides-fuer-freebasic/


oder du nimmst ein Komplettpaket. Z.b. die IDE WXFBE mit FB Compiler
http://www.freebasic-portal.de/projekte/wxfbe-69.html
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 181

BeitragVerfasst am: 23.09.2014, 20:04    Titel: Antworten mit Zitat

Hi RockTheShock!

Und welche IDE? Da sind ja ein paar Schätzchen im Angebot!

grüsse
Nils, der die Qual hat weil die Wahl
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 131

BeitragVerfasst am: 23.09.2014, 20:26    Titel: Antworten mit Zitat

Ich verwende unter Windows meist FBedit habe die anderen auch schon benutzt. wxFBE sieht aber auch sehr gut aus. Unter Linux nutze ich Geany.

Ich würde an deiner Stelle diese 3 einfach mal kurz antesten. Es ist auch geschmacksache
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 181

BeitragVerfasst am: 23.09.2014, 20:32    Titel: Antworten mit Zitat

Thanks a lot!

nils
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. 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