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:

bild springt automatisch um?
Gehe zu Seite 1, 2  Weiter
 
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
Sippo



Anmeldungsdatum: 17.04.2008
Beiträge: 125

BeitragVerfasst am: 27.04.2008, 20:09    Titel: bild springt automatisch um? Antworten mit Zitat

ich habe das Problem, dass das bild automatisch umspringt, wenn ich mit der maus auf einen schalter klicke und beim nächsten Fenster an der selben stelle ein feld ist wird dieses automatisch auch angecklickt. wie kann ich das verhindern?

Hier der code:
Code:

DIM SHARED AS INTEGER x, y, a, b


SUB Start
    Cls
    BLOAD "DATA\marv1.bmp"
    print "marv1"
    b = 1
END SUB

SUB marv2
  CLS
  bload "Data\marv2.bmp"
  PRINT "marv2"
  b = 2
  sleep
END SUB

SUB marv3
  CLS
  bload "data\marv3.bmp"
  PRINT "marv3"
END SUB

SUB marv4
  CLS
  PRINT "info"
  SLEEP
END SUB

SUB thom1
  CLS
  PRINT "intro"
  SLEEP
END SUB

SCREEN 21, 32
BLOAD "DATA\menue.bmp"

DO
  GETMOUSE (x,y, ,a)
  LOCATE 1,1
  PRINT USING "####:####"; x,y
  IF a AND 1 AND x >= 338 AND x <= 855 AND y >= 98 AND y <= 576 THEN  Start             'Bild im menü (start)
  IF a AND 1 AND x >= 474 AND x <= 764 AND y >= 883 AND y <= 951  and b = 0 THEN END    ' Beenden Button im Menü
  IF a AND 1 AND x >= 1141 AND x <= 1250 AND y >= 895 AND y <= 1007  AND b = 1 THEN  marv2 'Von marv1 zu marv2
  IF a AND 1 AND x >= 1141 AND x <= 1250 AND y >= 895 AND y <= 1007  AND b = 2 THEN  marv3 'Von marv 2 zu marv3
  IF a AND 1 AND x >= 1141 AND x <= 1250 AND y >= 895 AND y <= 1007  AND b = 3 THEN  marv4
  IF a AND 1 AND x >= 1141 AND x <= 1250 AND y >= 895 AND y <= 1007  AND b = 4 THEN  thom1 
LOOP until inkey = chr(27)


(das ganze soll eine art erweiterte Präsentation werden.)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 27.04.2008, 20:13    Titel: Antworten mit Zitat

du solltest wohl nach einem klick erst warten, bis die maustaste wieder losgelassen wurde, bevor du fortfährst.

Code:

do
getmouse x,y,z,button
loop until button = 0

_________________
» 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
Sippo



Anmeldungsdatum: 17.04.2008
Beiträge: 125

BeitragVerfasst am: 27.04.2008, 20:19    Titel: Antworten mit Zitat

wow danke es funktioniert
war ja wohl zu einfach verlegen
danke lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 27.04.2008, 20:21    Titel: Antworten mit Zitat

oh, und natürlich bitte das SLEEP 1 in der schleife nicht vergessen, damit die cpu-last schön auf 0% bleibt happy
_________________
» 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
Sippo



Anmeldungsdatum: 17.04.2008
Beiträge: 125

BeitragVerfasst am: 02.10.2008, 21:29    Titel: Antworten mit Zitat

Noch eine frage wie ich "richtig" runden kann und zwar habe ich zahlen wie 15, 2, 3,29,usw. diese will ich auf den nächsten zehner aufrunden (10,20,30,40,usw.) kann mir vll einer verraten wie das geht ??? ich habe keinen plan!! danke schon mal für eure antworten, welche hoffentlich bald komen happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 03.10.2008, 04:52    Titel: Antworten mit Zitat

durch 10 teilen, normal runden, mit 10 malnehmen
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sippo



Anmeldungsdatum: 17.04.2008
Beiträge: 125

BeitragVerfasst am: 03.10.2008, 12:27    Titel: Antworten mit Zitat

stimmt aber ich weis nicht mal wie man ormal rundet xD werd wohl mal die referenz studieren.

edit: außerdem muss immer aufgerundet werden. dies könnte ich aber auch dur + 0,4 erreichen^^.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 03.10.2008, 14:03    Titel: Antworten mit Zitat

runden: y = int(x+.5)
mit nochmal +.4 (insgesamt also +.9) rundest du nicht auf, 0.01 würde immernoch zu 0. aufrunden könntest du zB so:
if x=int(x) then y=x else y=int(x+1)
oder so:
y=-int(-x)
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 03.10.2008, 18:29    Titel: Antworten mit Zitat

cint rundet meines Wissens nach auch mathematisch richtig...
_________________
MFG
Flo

Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.

zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 04.10.2008, 04:10    Titel: Antworten mit Zitat

dieses Rundungsproblem hat mich jetzt doch interessiert...
meine Lösung:
Code:
zahl= int((zahl-1)/10) * 10 + 10


..und jetzt gibbed Küppel uff Kopp bei mir, wegen Lerneffekt und so... grinsen
Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 04.10.2008, 14:09    Titel: Antworten mit Zitat

Code:
INT((zahl-1)/10)

ist übrigens dasselbe wie
Code:
(zahl-1)\10

(beachte die Richtung des Schrägstriches)
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sippo



Anmeldungsdatum: 17.04.2008
Beiträge: 125

BeitragVerfasst am: 04.10.2008, 16:51    Titel: Antworten mit Zitat

hier noch meine Lösung nach google und referenz happy

Code:

dim as single a,b,c,d,e,f,g,h
dim as integer i,j,k,l,m,n,o,p
screen 19
cls
a = 12.967
b = 56.483
c = 432.432
d = 56.3245
e = 5.45
f = 345.3415
g = 34.675
h = 1345.1435
i = cint(a)
j = cint(b)
k = cint(c)
l = cint(d)
m = cint(e)
n = cint(f)
o = cint(g)
p = cint(h)

print a;i
print b;j
print c;k
print d;l
print e;m
print f;n
print g;o
print h;p
sleep
end


so funzt des einwand frei und um nur aufzurunden müsste des dann so aussehen:

Code:


'Nötige Variablen:
dim as single a,b,c,d,e,f,g,h
dim as integer i,j,k,l,m,n,o,p
screen 19
cls

' einfach mal paar testzahlen:
a = 12.967
b = 56.483
c = 432.432
d = 56.3245
e = 5.45
f = 345.3415
g = 34.675
h = 1345.1435


' dmit nur aufgerundet wird:
a = a + 0.4
b = b + 0.4
c = c + 0.4
d = d + 0.4
e = e + 0.4
f = f + 0.4
g = g + 0.4
h = h + 0.4

'der eigentliche vorgan der rundung (cint)
i = cint(a)
j = cint(b)
k = cint(c)
l = cint(d)
m = cint(e)
n = cint(f)
o = cint(g)
p = cint(h)

'zum überprüfen ob das gerundete korrekt ist (Ausgangszahl : gerundete zahl)
print a;":";i
print b;":";j
print c;":";k
print d;":";l
print e;":";m
print f;":";n
print g;":";o
print h;":";p
sleep
end


ich weiß es wäre auch einfacher gegangen aber so isses übersichtlicher.

Mfg, Sippo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 04.10.2008, 17:33    Titel: Antworten mit Zitat

Zitat:
ich weiß es wäre auch einfacher gegangen aber so isses übersichtlicher.

Mit Array wäre es weniger Aufwand gewesen und übersichtlicher noch dazu. zwinkern
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sippo



Anmeldungsdatum: 17.04.2008
Beiträge: 125

BeitragVerfasst am: 04.10.2008, 17:46    Titel: Antworten mit Zitat

ok kann sein aber das muss ich erst au no lernen vll könnt ihr mir ja ein beispiel reinstellden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 04.10.2008, 18:32    Titel: Antworten mit Zitat

Achtung, deine Methode enthält einen Fehler!
Code:
' einfach mal paar testzahlen:
a = 3.012
[...]
' damit nur aufgerundet wird:
a = a + 0.4
[...]
'der eigentliche Vorgang der Rundung (CINT)
i = CINT(a)
' i ist jetzt 3 !!

_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sippo



Anmeldungsdatum: 17.04.2008
Beiträge: 125

BeitragVerfasst am: 04.10.2008, 18:36    Titel: Antworten mit Zitat

stimmt ich habe nur auf die 1. nachkommastelle gechtet o.O

edit: weiß nun auch wieder warum: das Programm für das ich das brauch hat nur immer 1 nachkommastelle. aber hier ein neuer code ( der is auch noch kürzer xD)

Code:

dim as single a,b,c,d,e,f,g   ,h,i,j,k,l,m,n

a = 12.067
b = 56.483
c = 432.432
d = 56.0245
e = 5.45
f = 345.3415
g = 34.675


h = cint(a)
i = cint(b)
j = cint(c)
k = cint(d)
l = cint(e)
m = cint(f)
n = cint(g)

if a >= h then h = h +1
if b >= i then i = i +1
if c >= j then j = j +1
if d >= k then k = k +1
if e >= l then l = l +1
if f >= m then m = m +1
if g >= n then n = n +1

print h
print i
print j
print k
print l
print m
print n
sleep
end
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 04.10.2008, 19:29    Titel: Antworten mit Zitat

Code:
aufgerundet = CInt(x + .5 * ((Frac(x) <> 0) And Sgn(x)))
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 04.10.2008, 19:39    Titel: Antworten mit Zitat

Mir gefällt MisterDs Lösung sehr gut:
Code:
y=-int(-x)

_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sippo



Anmeldungsdatum: 17.04.2008
Beiträge: 125

BeitragVerfasst am: 04.10.2008, 19:39    Titel: Antworten mit Zitat

hier noch meine array variante, ist wirklich kleiner aber übersichtlicher???
muss ich wohl noch üben bisses so aussieht wie bei cherry. xD

Code:

dim as single a(1 to 7), b(1 to 8),c

a(1) = 12.067
a(2) = 56.483
a(3) = 432.432
a(4) = 56.0245
a(5) = 5.45
a(6) = 345.3415
a(7) = 34.675

do
    c = c + 1
    b(c) = cint(a(c))
    if b(c) >= a(c) then b(c) = b(c)+1
    locate c,1
    print b(c)
loop until c = 7
sleep
end
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 04.10.2008, 19:51    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:
Mir gefällt MisterDs Lösung sehr gut:
Code:
y=-int(-x)


Da wird dann aber -4.1 z.B. zu -4. Beim Runden wird dann aber meistens -5 gewünscht.

Btw - lol, "Print -0f" gibt tatsächlich "-0" aus! Ich wusste gar nicht, dass es das gibt.

EDIT:
Sippo hat Folgendes geschrieben:
Code:

DIM AS SINGLE a(1 TO 7), b(1 TO 8),c

a(1) = 12.067
a(2) = 56.483
a(3) = 432.432
a(4) = 56.0245
a(5) = 5.45
a(6) = 345.3415
a(7) = 34.675

DO
    c = c + 1
    b(c) = CINT(a(c))
    IF b(c) >= a(c) THEN b(c) = b(c)+1
    LOCATE c,1
    PRINT b(c)
LOOP UNTIL c = 7
SLEEP
END


Das geht noch kleiner - wobei noch immer der selbe Algorithmus verwendet wird:

Code:

DIM AS SINGLE a(6) => {12.067, 56.483, 432.432, 56.0245, 5.45, 345.3415, 34.675}, b(6)

For i As Integer = LBound(a) To UBound(a)
    b(i) = CINT(a(i))
    IF b(i) >= a(i) THEN b(c) += 1
    PRINT b(c)
Next

SLEEP
END


Zuletzt bearbeitet von Cherry am 04.10.2008, 19:59, insgesamt 3-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
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
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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