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:

Variable zählt mit

 
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
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 28.12.2005, 21:42    Titel: Variable zählt mit Antworten mit Zitat

Hi...

Ich habe hier einen Codeschnippsel, der in FB0.14 seltsam läuft:
screen 14,8,2,0

(...)

dim ColUsed(0 to 255) as Uinteger
(...)
for Y=0 to Size2Height*2 step 2
for X=0 to Size2Width*2 step 2
P=Point(X,Y)
ColUsed(P)+=1
next X
next Y


früher hatten die variablen folgende werte:
size2width: 320
size2height: 200

danach hatte size2height den wert 721!
Was mache ich falsch?

denn wenn ich entweder die P=... oder ColUsed(P)... Linie entferne, kommt der falsche wert nicht!
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 29.12.2005, 00:13    Titel: Antworten mit Zitat

Hast du's schon mit der v0.15 versucht? die is inzwischen stable.
Bei mir funzt der Snippet unter v0.16b auf jeden fall, solange ich 32 und 24 verwende, bei den zehnfachen Werten hängt sich das Prog auf...
Interessant: Bau mal nach For x =... das ein:
? Using "### ###"; x; y
man könnte meinen, dass x und y zw. 0 und 720 lägen... anyway, bei mir kommt x auf über 10000....

Strange...
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 29.12.2005, 09:00    Titel: Antworten mit Zitat

verwundert
gfxlib.txt hat Folgendes geschrieben:
Mode 14: 320x240
40x30 text format, 8x8 character size.
Assignment of up to 256K colors to any of 256 attributes.


Code:
size2width= 320
size2height= 200

hier eingesetzt:
Code:
for Y=0 to Size2Height*2 step 2
    for X=0 to Size2Width*2 step 2

gibt
Code:
for Y=0 to 400 step 2
    for X=0 to 640 step 2

Wieso fragst du die Farbe eines nicht vorhandenen bereiches ab?

So geht es:
Code:
screen 14,8,2,0

dim ColUsed(0 to 255) as Uinteger

size2width= 319
size2height= 239

for Y=0 to Size2Height
    for X=0 to Size2Width
        ? x;y;size2width;size2height
        P=Point(X,Y)
        ColUsed(P)+=1
    next X
next Y
?
? size2width
? size2height
sleep


Ich Tippe mal auf den klassischen Bufferoverflow, du greifst wegen falsch dimensionierung auf den nächsten, anders benutzen Speicherbereich zu.
Bildlich:
Du hast eine Blattpapier, dort sind zwei Listen drauf etwa so:
Liste1:-Apfel
---------Birne
---------Pflaume
Liste2:-Hund
---------Katze
---------Fisch
Du sagst nun, du willst den Vierten eintrag auf Liste 1, dieser Existiert nicht, aber wenn man vom Begin der Liste 1 auf Vier zählt (was der Computer eben macht) bekommt man "Hund", obwohl er auf der anderen Liste steht die nicht gemeint war.
Kurz zum beweisch:
Code:
dim liste1(1 to 3) as string*8
dim liste2(1 to 3) as string*8
liste1(1)="Apfel  "
liste1(2)="Birne  "
liste1(3)="Pflaume"
liste2(1)="Hund   "
liste2(2)="Katze  "
liste2(3)="Fisch  "

for i=0 to 6
    ? liste1(i)
next i
sleep

nicht Perfekt, aber es zeigt was ich meine.
_________________
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
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 29.12.2005, 14:54    Titel: Antworten mit Zitat

Ich hab den screen nur nachträglich ins forum eingefügt (der stand im original-code nämlcih viel weiter oben), und hab 14 statt 17 oder 18 eingetippt. das kann es also nicht sein zwinkern
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 29.12.2005, 15:14    Titel: Antworten mit Zitat

füg mal
Code:
Dim P As UByte

ein, damit du bei ColUsed(P)+=1 keine Speicherstellen ungewollt veränderst.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 29.12.2005, 15:36    Titel: Antworten mit Zitat

das ist ja kein direkter screen-zugriff. der ganze code sollte eigentlich nur zählen, wie oft die farben auf screen benutzt wurden.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 29.12.2005, 15:53    Titel: Antworten mit Zitat

ich dachte da auch nicht an das Überschreiben der Farbe des Pixels,
sondern an das Überschreiben von Variableninhalten wenn P mal größer als 255 werden sollte!
jojo hat Folgendes geschrieben:
denn wenn ich entweder die P=... oder ColUsed(P)... Linie entferne, kommt der falsche wert nicht!

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 29.12.2005, 17:53    Titel: Antworten mit Zitat

verwundert
gfxlib.txt hat Folgendes geschrieben:
Mode 17: 640x400
80x25 or 80x50 text format, 8x16 or 8x8 character size.
Assignment of up to 256K colors to any of 256 attributes.
Mode 18: 640x480
80x30 or 80x60 text format, 8x16 or 8x8 character size.
Assignment of up to 256K colors to any of 256 attributes.


So geht es:
Code:
screen 18,8,2,0

dim ColUsed(0 to 255) as Uinteger

size2width= 319
size2height= 200

for Y=0 to Size2Height*2 step 2
for X=0 to Size2Width*2 step 2
? x;y;size2width;size2height
P=Point(X,Y)
ColUsed(P)+=1
next X
next Y
sleep


Code:
screen 18,8,2,0
pset(640,400),6
pset(639,400),4
sleep

Den Gelben Pixel bei 640,400 wirst du nicht sehen, weil 640 ausserhalb des Bildes ist, der Computer Rechnet von Null aus und nicht wie du von 1 ...
Das Pixel oben Links hat 0,0 bei screen 18, der Pixel unten Links hat 639,479 weil Null eben auch eine Zahl ist ...

Kurz: Ich bin noch immer der Meinung das meine Erste Diagnosse gültig ist, wenn auch nun mit anderem Vorzeichen ...
_________________
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
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 29.12.2005, 21:16    Titel: Antworten mit Zitat

`dass der fehler davon kommt, glaub ich nicht, ganz abgesehen davon, dass sich ja diese variable nicht anpassen DARF!

denn wenn ich Pset(x,Y) mache, und X oder Y ist außerhalb des screens, darf sich diese variable doch nicht anpassen..
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 30.12.2005, 10:15    Titel: Antworten mit Zitat

Code:
screen 18,8,2,0

dim ColUsed(0 to 255) as Uinteger

size2width= 320
size2height= 200

for Y=0 to Size2Height*2 step 2
for X=0 to Size2Width*2 step 2
? x;y;size2width;size2height
P=Point(X,Y)
ColUsed(P)+=1
next X
next Y
sleep

Probier's aus!
Die letzte Ausgabe wird 640 0 320 200 sein, dann ist das Programm abgeschossen.

Ein Bitte: Probier das was die Leute sagen einfach mal aus!
Vielleicht haben sie recht!
Und wenn du schon ein Beispiel bringst, dann achte darauf das es mit dem eigentlichen Problem übereinstimmt (stichwort andere Bildschirm Modus)...

Es ist zwar nicht logisch, wieso ein point(x,y) ausserhalb des Bildes einen Überlauf erzeugt (ich verstehs selber nicht ganz), aber Freebasic ist halt nicht Fehlerfrei! Und solch ein kleiner Workaround, das man nur das abfragt was existiert ist aber beim besten Willen nicht schlim!

Probiers aus, wenn geht ist gut (davon gehe ich aus) und wenn nicht, naja ...
_________________
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
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 30.12.2005, 12:05    Titel: Antworten mit Zitat

Hi Michael,
das ist kein Bug in FB.
An deinem Programm kann man das gut testen.
füg mal
Code:
Dim P As UByte
ein, wie ich oben schon geschrieben habe.
Wenn P einen Wert >255 erhält verändert 'ColUsed(P)+=1' irgenwo im Speicher einen Wert, da FB nicht überprüft ob die Grenzen eines Array eingehalten werden. Das muss der Progger machen, durch 'Dim P As UByte' stellst du das sicher.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 30.12.2005, 15:51    Titel: Antworten mit Zitat

Dein Workaround ist geht auch, gib ich zu.
Andere vorschlag basierend auf diesem Programm:
Code:
screen 18,8,2,0
P=Point(640,20)
? P
sleep

(die Ausgabe ist -1)

Code:
screen 18,8,2,0

dim ColUsed(-1 to 255) as Uinteger

size2width= 320
size2height= 200

for Y=0 to Size2Height*2 step 2
for X=0 to Size2Width*2 step 2
? x;y;size2width;size2height
P=Point(X,Y)
ColUsed(P)+=1
next X
next Y
sleep


Offensichtlich ist das Problem, das FB bei einem nicht Vorhanden Punkt, den Rückgabe Wert -1 liefert, das Problem lässt sich wie festgestellt auf 3 Arten lössen:

1. (volta Idee)
Die Variabel die den Rückgabe wert speichert als UByte wählen. Mit dem Nachteil, das nicht vorhandene Pixel als Farbe 255 gezählt werden.
2. (Meine Erste Idee)
Die nicht Vorhandenen Pixel nicht abfragen.
3. (Meine Zweite Idee)
Das Array, das das Resultat speichert von -1 her beginnen lassen.
_________________
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
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 30.12.2005, 22:30    Titel: Antworten mit Zitat

4. (meine idee) grinsen
einfach nicht "über den rand" zählen lassen lächeln

5. (auch meine idee)
ein neues system für dieses code-abschnitt verwenden.
das system wird im janaur in meinem rle-kompressionsprogramm "Size²" für Freebasic auf www.saga-games.de.ms veröffnetlicht.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht 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