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:

Grundlagen-Eletronik -> Problem mit meinem kleinen Progra

 
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
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 02.01.2013, 22:20    Titel: Grundlagen-Eletronik -> Problem mit meinem kleinen Progra Antworten mit Zitat

Hi Leute
und ein frohes neues Jahr.
Hab schon lange nichts mehr gemacht im Bereich Programmierung,
aber heute habe ich spontan angefangen und das ist dabei raus gekommen.


Code:


Dim As Integer  I, R, U, P
Dim As String auswahl

Do
   Cls
   Print "U = Spannung"
   Print "I = Strom"
   Print "R = Widerstand"
   Print "P = Leistung"
   Print
   Print   
   Input "Auswahl: "; auswahl
   Print
   
   Select Case UCase(auswahl)
      Case "U"
         Input "Spannung in Volt = ", U
      Case "I"
         Input "Strom in Ampere = ", I
      Case "R"
         Input "Widerstand in Ohm = ", R
      Case "P"
         Input "Leistung in Watt = ", P
   End Select
   
   U = R*I
   U = P/I
   I = U/R
   I = P/U
   R = U/I
   P = U*I
   P = (U^2)/R
   
   Print "U = "; U
   Print "I = "; I
   Print "R = "; R
   Print "P = "; P
   Sleep
Loop




Es funktioniert aber nicht so wie ich es will.
Mein Programm soll, wenn ich ein Wert nach dem anderen eingegeben habe, im Hintergrund die restlichen Werte ausrechnen.

Ich verstehen allerdings nicht warum es nicht funktioniert.

Hoffe ihr könnt mir helfen...[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 02.01.2013, 22:23    Titel: Antworten mit Zitat

Hmm ... wenn ich U eingebe, ist ja I und R noch 0 ... und wenn ich dann U = R*I berechne, ist U auch wieder 0 ...
_________________
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
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 02.01.2013, 22:32    Titel: Antworten mit Zitat

Na ich dachte es mir so das man einen Wert eingibt, das Programm sich diesen Wert merkt und dann und im nächsten Durchlauf, wenn ich einen anderen Wert eingebe, ein neuer Wert ausgerechnet wird.

Ich muss dazu sagen das ich in letzter Zeit sehr viel in SPS programmiert habe.
Meinst du nemored das die Reihenfolge falsch ist??
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



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

BeitragVerfasst am: 02.01.2013, 23:27    Titel: Antworten mit Zitat

du darfst den eingegebenen wert halt nicht sofort wieder mit dem aus den restlichen (noch nicht eingegebenen) werten berechneten wert überschreiben, dann funktioniert das auch.
_________________
"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
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 03.01.2013, 21:51    Titel: Antworten mit Zitat

ok habs verändert
funktioniert aber noch nicht
ich denke es liegt an denn Variabelntypen
habs aber auch schon versucht
was denkt ihr?

Code:


Dim As Single  I, R, U, P
Dim As String auswahl

Do
   Do   
      auswahl = ""
      Cls
      Print "U = Spannung"
      Print "I = Strom"
      Print "R = Widerstand"
      Print "P = Leistung"
      Print
      Print "X = Eingabe beenden"   
      Print
      Input "Geben Sie ihre Werte an: "; auswahl
      Print
      Select Case UCase(auswahl)
         Case "U"
            Input "Spannung in Volt = ", U
         Case "I"
            Input "Strom in Ampere = ", I
         Case "R"
            Input "Widerstand in Ohm = ", R
         Case "P"
            Input "Leistung in Watt = ", P
         Case Else
            Print "Ungueltige Angabe!"
      End Select   
   Loop Until UCase(auswahl) = "X"
   
   Do
      Cls
      If U > 0 And I > 0 Then R = U/I And P = U*I
      If I > 0 And R > 0 Then U = R*I
      If R > 0 And U > 0 Then I = U/R And P = (U^2)/R
      If P > 0 And I > 0 Then U = P/I
      If U > 0 And P > 0 Then I = P/U And R = (U^2)/P
   Loop Until U > 0 And I > 0   And R > 0 And P > 0
      
   Print "U = "; U
   Print "I = "; I
   Print "R = "; R
   Print "P = "; P
   Sleep   
Loop

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 03.01.2013, 22:01    Titel: Antworten mit Zitat

Verstehst du überhaupt, was du für einen Mist da programmiert hast? Du bist schon seit über vier Jahren im Forum dabei und hast schon über 80 Posts. Irgendwie kann ich nicht verstehen, wie du mit diesem "Vorwissen" ein so offensichtlich falsches Programm schreiben kannst.
Was soll denn z.B. deiner Meinung nach der DO...LOOP-Block tun?
_________________
» 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
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 03.01.2013, 22:07    Titel: Antworten mit Zitat

wow jojo,
es tut mir leid wenn ich dir kopfschmerzen bereite damit aber ich glaube es zwingt dich niemand mir zu antworten.
oder überhaupt mein thema zu lesen zwinkern

ja ich bin seit 4 jahren hier aber habe mich, leider, niemals ernsthaft mit dem programmieren beschäftigt und meistens lagen monate zwischen meinen projekten. Deswegen bin ich immernoch ein Amateur.

Aber trotzdem vielen vielen dank jojo zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 03.01.2013, 22:14    Titel: Antworten mit Zitat

Lernen wirst du trotzdem hauptsächlich aus eigenen Fehlern. Also versuch mal deinen eigenen Code zu verstehen, vor allem die DO...LOOP-Schleife, die macht gar keinen Sinn. Schreibt dir hin (in Deutsch), was dein Programm Schritt für Schritt tun soll, und dann überlege, wie du diesen Ablauf in FB formulieren würdest. Das ist wesentlich hilfreicher, als einfach nur eine fertige Antwort abzuwarten.
_________________
» 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
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 03.01.2013, 22:26    Titel: Antworten mit Zitat

Mit der antwort lässt sich doch sehr gut was anfangen zwinkern

es stimmt, ich bin gedanklich noch in der SPS-Programmierung
da wird das Programm nich Zeile für Zeile sondern insgesammt abgearbeitet
aber ich werde deinen Rat befolgen
mal schauen was raus kommt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 03.01.2013, 22:48    Titel: Antworten mit Zitat

MisterD hat Folgendes geschrieben:
du darfst den eingegebenen wert halt nicht sofort wieder mit dem aus den restlichen (noch nicht eingegebenen) werten berechneten wert überschreiben, dann funktioniert das auch.

Eigentlich war es das schon

Erweitere deine Variablen...
Code:

Dim As Single  Ieingabe, Reingabe, Ueingabe, Peingabe
Dim As Single  Iausgabe, Rausgabe, Uausgabe, Pausgabe
Dim As String auswahl

Eventuell sogar noch eine für 'Temp' zum 'zwischenspeichern
Im select case block noch anpassen...


Dannach berechnest du nicht die Variablen der eingabe, sondern anhänging von der eingabe die ausgabevariablen mit der summe der eingabe...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 03.01.2013, 23:20    Titel: Antworten mit Zitat

Hi qbay,

ich habe mal ein kleines Beispielprogramm zum Thema geschrieben:
http://www.freebasic-portal.de/porticula/formelrechner-elektrotechnik-1568.html

Funktioniert das ungefähr so, wie du es dir vorgestellt hast? Wenn ja, viel Spaß beim Nachvollziehen! zwinkern

Viele Grüße!
Sebastian
_________________

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
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 04.01.2013, 01:52    Titel: Antworten mit Zitat

@ qbay

du schreibst:
Code:
If U > 0 And I > 0 Then R = U/I And P = U*I


hier ist wichtig das du die komponenten einklammerst!

Code:
If (U > 0) And (I > 0) Then R = U/I And P = U*I


Andernfalls hast du das Problem, das der vergleich der Variablen nicht wie gewünscht:

Code:

If U > 0 Then
   If I > 0 Then


ausgeführt wird, sondern eher

Code:

If U > (0 and I) > 0 Then


And ist als logischer operator vorrangig und verknüpft die prüfungskomponenten
Daher wird erst eine verknüpfung ausgeführt was bei z.B.

U = 1 (Binär wäre dies &B00000001)
I = 2 (Binär wäre dies &B00000010)

mit AND vernküpft zu
U AND I = 0 (Binär &B00000000) Führen wird

Das bedeutet in deinem Fall, das bei ungnüstigen Variablenwerten die If Funktion übersprungen wird, da 0 herauskommt.

Nutzt du jedoch die Klamerung, und die damit erzwungene vorrangige abarbeitung der in den klammern stehende prüfung, ändert sich die sichtweise für die IF abfrage.

Hierbei wird aus
(U > 0) = 1
(I > 0) = 1
Was mit AND zu 1 wird.

Gleiches ist übrigens auch für das "Do Loop Until" nötig!


[EDIT:] Siehe auch Sebastians Funktion "VervollstaendigenWennMoeglich" in seinem Beispielcode. Dort wird ebenfalls dieses verfahren genutzt um den "ungünstigen Fall" zu umgehen.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 04.01.2013, 02:00    Titel: Antworten mit Zitat

Du hast den wichtigsten Fehler an der Zeile vergessen: Nacheinander auszuführende Statements in derselben Zeile werden mit einem Doppelpunkt getrennt, nicht mit einem logischen AND. Wobei das korrekt geklammert sogar funktionieren könnte (wobei ich keine Ahnung habe, ob FB das kompilieren würde, in C sollte es gehen).
_________________
» 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
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 04.01.2013, 02:05    Titel: Antworten mit Zitat

@Jojo .. garnicht gesehen... thx

@qbay

wie @jojo schon angemerkt hat, gibt es noch das problem von:
Code:
Then R = U/I And P = U*I

in
Code:
If U > 0 And I > 0 Then R = U/I And P = U*I


Hier willst du offenbar 2 "eigentlich" einzelne Arbeitsabläufe zusammen ausführen.

Einmal
R = U/I
und
P = U*I

Diese schreibt man entweder
Code:

If bla = blub Then
    R = U/I
    P = U*I
End If


oder alternativ durch ein Doppelpunkt getrennt in einer Zeile
Code:

If bla = blub Then
    R = U/I : P = U*I
End If

alternativ auch ohne end if
Code:

If bla = blub Then R = U/I : P = U*I


Hier muss aber darauf geachtet werden, das man nicht zuviel verschachtelt.

Also, keine If's nach einem Then in der selben Zeile, wenn auch Else Komponenten darin enthalten sind. Das kann schnell zu verwirrung führen, und dadurch zu fehler.

z.B
Code:
If bla = blub Then If blub = foo Then a = b Else D = E



MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht 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
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