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:

Durchschnittswerte errechnen?!
Gehe zu Seite 1, 2  Weiter
 
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
strudi



Anmeldungsdatum: 05.03.2005
Beiträge: 4

BeitragVerfasst am: 05.03.2005, 04:11    Titel: Durchschnittswerte errechnen?! Antworten mit Zitat

Hallo,
wir haben in der Schule aufbekommen, ein Programm zu schreiben, mit dem man die Durchschnittstemperatur eines Monats errechnen kann. Also ich hab schon angefangen damit aber ich bin jetzt auf ein Problem gestossen. Also wir müssen die Temperaturen von jedem Tag eines Monats per INPUT Befehl ins Programm eintragen können und diese Daten sollen in einer sequentiellen Datei gespeichert werden. Das habe ich auch geschafft. Also ich gebe das Datum ein und die Temperatur die es an jenem Tag gehabt hat. Also, nehmen wir den Februar her. Ich gebe zB bis zum 28. Februar Datum und Temperatur ein! Und nach dem 28. einfach ENTER drücken damit das Programm beendet wird. Das hab ich mit einer DO LOOP Schleife gelöst. Funktioniert auch wunderbar und in der seq. Datei wird auch alles gespeichert. Doch ich möchte nach dieser Eingabe noch, dass das Programm alle Temperaturen zusammenrechnet und den Durchschnittswert errechne. Ansich nicht schwer, denke ich. Im Prinzip müsste es so lauten: Variable * Anzahl / 2 oder? so hab ich es zumindest versucht, aber ich weiß nicht genau wo bzw wie ich das in das Programm einbaue! Wäre nett wenn ihr mir helfen könntet! THX

mfg
strudi

Edit: das muss ich natürlich in QBASIC schreiben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 05.03.2005, 15:21    Titel: Antworten mit Zitat

Hi !
Da ich nicht weiß wie die erzeugte Datei aussieht, setzt dieses kleine Programm vorraus, dass jede Zeile für einen Tag steht, und dort die Temperatur drinsteht.
Ich hab mir mal folgendes ausgedacht:
Code:

OPEN "MONAT.TXT" FOR INPUT AS #1
AnzahlEintraege = 0
DO WHILE NOT EOF(1)
AnzahlEintraege = AnzahlEintraege + 1
LINE INPUT #1, Temperatur$
Temperatur = VAL(Temperatur$)
Durchschnitt = Durchschnitt + Temperatur
LOOP
Durchschnitt = Durchschnitt / AnzahlEintraege
PRINT "Im Februar herrschte eine Druchschnittstemperatur von"; Durchschnitt; "°C"
CLOSE #1


Am besten zeigst du uns dein Programm mal damit wir dir weiterhelfen können
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 05.03.2005, 15:24    Titel: Antworten mit Zitat

Hallo.

Code:
DIM Temperatur(28) AS INTEGER
'Nun die Temperaturen auslesen:
i%=0
OPEN "TEMPS.DAT" FOR INPUT AS #1
DO
 LINE INPUT #1, temp$
 Temperatur(i%) = VAL(temp$)
 i%=i%+1
LOOP UNTIL EOF(1)
CLOSE #1
FOR i%= 0 TO UBOUND(Temperatur)
 Summe% = Summe% + Temperatur(i%)
NEXT i%
Durchschnitt% = Summe% / (UBOUND(Temperatur)+1)
PRINT "Durchschnittstemperatur: "; LTRIM$(STR$(Durchschnitt%))


Das hab ich jetzt nur so in der Foreneingabemaske geschrieben, sollte aber klappen. Das Array Temperatur kannst du beliebig erweitern. zwinkern

//edit: Da war ICC wohl schneller. Nimm lieber seinen Code. Der ist noch einfacher. lächeln

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
strudi



Anmeldungsdatum: 05.03.2005
Beiträge: 4

BeitragVerfasst am: 05.03.2005, 21:18    Titel: Antworten mit Zitat

danke für eure antworten! ich poste jetzt mal meinen code den ich bis jetzt habe!

Code:

' Hauptprogramm
'--------------------

DECLARE SUB Durchschnitt (Temperatur AS STRING)

DIM Eingabe AS STRING
DIM Temperatur AS STRING

CLS

LOCATE 1,1
PRINT "1. Durchschnittliche Monatstemperatur"
LOCATE 2,1
PRINT "2. Höchste Monatstemperatur"
LOCATE 3,1
PRINT "3. Niedrigste Monatstemperatur"

INPUT Eingabe

IF Eingabe = "1" THEN
           CALL Durchschnitt(Temperatur)
END IF

' SUB Durchschnitt
'---------------------

SUB Durchschnitt (Temperatur AS STRING)
OPEN "c:\temper.txt" FOR OUTPUT AS #1
DO
INPUT "Geben Sie die Tagestemperaturen eines Monats ein: ";Temperatur
              PRINT #1, Temperatur
LOOP UNTIL Temperatur = ""
CLOSE #1
END SUB


Bin erst Anfänger in QBASIC also sorry für diesen recht bescheidenen Code zwinkern

mfg
strudi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 05.03.2005, 21:34    Titel: Antworten mit Zitat

So, mir ist langweilig, ich hab den Code mal so bearbeitet, wie ich die ganze Sache machen würde. Wenns dir nicht gefällt brauchst du ihn ja nicht nehmen grinsen

Code:

' Hauptprogramm
'--------------------

DECLARE SUB Durchschnitt ()
CLS

LOCATE 1,1
PRINT "1. Durchschnittliche Monatstemperatur"
PRINT "2. Höchste Monatstemperatur"
PRINT "3. Niedrigste Monatstemperatur"
INPUT "Ihre Auswahl: ", Eingabe

IF Eingabe = "1" THEN
 PRINT "Durchschnittstemperatur: "; Durchschnitt; "°C"
END IF

' SUB Durchschnitt
'---------------------

FUNCTION Durchschnitt ()
OPEN "c:\temper.txt" FOR OUTPUT AS #1
PRINT "Geben Sie die Tagestemperaturen (in °C) eines Monats ein,"
PRINT "geben sie nichts ein um die Temperatureingabe zu beenden."
Tag = 1
DO
 INPUT "Tag"; Tag; ": ", Temperatur$
 IF Temperatur$ = "" THEN EXIT DO
 DSchnitt = DSchnitt + VAL(Temperatur$)
 PRINT #1, Temperatur$
 Tag = Tag + 1
LOOP
CLOSE #1
Durchschnitt = DSchnitt / (Tag - 1)
END FUNCTION

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 05.03.2005, 21:45    Titel: Antworten mit Zitat

Hallo.
ICC hat Folgendes geschrieben:

Code:

INPUT "Tag"; Tag; ": ", Temperatur$


geht leider nicht.

Muss man schon
Code:

PRINT "Tag "; Tag: ": ";
LINE INPUT Temperatur$

nehmen...


EDIT:

strudi hat Folgendes geschrieben:

Hallo,
wir haben in der Schule aufbekommen, ein Programm zu schreiben, mit
dem man die Durchschnittstemperatur eines Monats errechnen kann.


Eigentlich machen wir hier keine Hausaufgaben, nur Lösungsansätze, schau mal in die Netiquette.

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 05.03.2005, 22:06    Titel: Antworten mit Zitat

Ups das hab ich wohl aus Versehen 2 Mal hingeschrieben durchgeknallt
Sollte
Code:

PRINT "Tag"; Tag; ": ";
INPUT "", Temperatur$

heißen
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
stef



Anmeldungsdatum: 13.01.2005
Beiträge: 102

BeitragVerfasst am: 06.03.2005, 00:01    Titel: Antworten mit Zitat

Er hat ja auch nicht nach dem fertigen Programm gefragt, sondern nur nur nach dem Problem der Durchschnittswertberechnung. Die Berechnung ist doch recht einfach:
Durchschnitt = (Summe aller Temeraturen) / Anzahl Werte

Also braucht man nur eine Variable Summe, der bei jedem Schleifendurchlauf die neue Temperaqtur aufaddiert wird
Summe = Summe + Temperatur
Und zum Schluß muß dann dieser Wert nurnoch durch die Anzahl der Schleifendurchläufe geteilt werden, im Februar also durch 28.


Zuletzt bearbeitet von stef am 06.03.2005, 23:16, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
strudi



Anmeldungsdatum: 05.03.2005
Beiträge: 4

BeitragVerfasst am: 06.03.2005, 21:33    Titel: Antworten mit Zitat

ich habe jetzt das problem, dass mir das programm nicht den korrekten durchschnittswert errechnet. ich habe nämlich mit taschenrechner nachgerechnet und da kam eine andere zahl heraus! mit einer stelle unterschied. also statt zB 8.6675 kam 9.3423 heraus. wie kann das sein?! wäre nett wenn ihr mir helfen könntet. THX

mfg
strudi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 06.03.2005, 22:06    Titel: Antworten mit Zitat

Versuch mal, Variablen vom Typ Double zu nehmen,
--> größere Genauigkeit.

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 06.03.2005, 22:50    Titel: Antworten mit Zitat

Hallo.

Na das ist ja eine riesige Abweichung. Man könnte auch vermuten, dass da ein Programmierfehler vorliegt. Eventuell wurde bei der Addition eine oder mehrere Zahlen ausgelassen o.ä.

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
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 06.03.2005, 22:59    Titel: Antworten mit Zitat

Hallo

Kann es sein, dass du mit dem Zählen der Tage durcheinander gekommen bist? In einem der Beispielprogramme steht mal sowas wie

tag = 1
DO
...
tag = tag + 1
LOOP
...
durchschnitt = dschnitt / (tag - 1)

Da kann man schnell mal irgendwo ein tag vergessen.

Eine Abweichung von ca. 5% würde ja zu einem Tag mehr oder weniger passen.

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
strudi



Anmeldungsdatum: 05.03.2005
Beiträge: 4

BeitragVerfasst am: 07.03.2005, 23:04    Titel: Antworten mit Zitat

danke für die antowrten! aberich hab schon wieder ein neues problem. also ich will folgendes machen! genau das gleiche wie vorher, also für ein monat die Temperaturen eines jeden Tages eingeben können. Nur soll mir das Programm am Ende die Höchste Tagestemperatur hinschreiben!

Das muss doch gehen, das ich in einer Variablen eine Zahl speichern kann und sobald eine Zahl größer ist als die vorherige größte Zahl das diese dann mit der jetzt höchsten Zahl ersetzt wird.

Hab mir das so ca vorgestellt:

Code:


DO UNTIL Temperatur = ""
INPUT ;Temperatur
IF Temperatur => "0" THEN
Temperatur = TemperaturAlt
ELSE
IF Temperatur > TemperaturAlt THEN
Temperatur = TemperaturAlt
LOOP

PRINT ;TemperaturAlt


Nur irgendwie funktioniert das nicht! Ich denke dass irgendetws falsch ist zwinkern Nur ich weiß nicht wie ich das sonst bewerkstelligen sollte. Bin noch ein ziemlicher Anfänger in Sachen QBASIC. Danke schon mal für Hilfe.

mfg
strudi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 08.03.2005, 00:43    Titel: Antworten mit Zitat

Hallo!

Zuersteinmal zu den Variablen. Da stimmt noch was nicht mit Text- und Zahlenvariablen. Eine Text- oder Stringvariable ist durch ein $ am Ende gekennzeichnet, z.B. temperatur$. Ohne diesen Zusatz am Ende wird eine Variable für Zahlen reserviert. Wenn du schreibst:

INPUT temperatur

dann wird das, was du eingibst als Zahl gedeutet. Bei

INPUT temperatur$

wird die Eingabe von Text erwartet. In beiden Fällen kannst du jetzt z.B. 20 eingeben. Allerdings wird im ersten Fall die Zahl 20 gespeichert, im zweiten der Text "20". Text wird auch immer in Anführungszeichen gesetzt, wenn er direkt im Programm benutzt wird. Willst du also beispielsweise temperatur auf null setzen, kannst du das entweder so:

temperatur = 0

oder so

temperatur$ = "0"

machen. Allerdings nicht gemischt wie in dieser Zeile deines Programms:

IF Temperatur => "0" THEN

Da dur nur mit Temperaturwerten, also Zahlen arbeiten willst, kannst du für dieses Problem $ und "" getrost vergessen. Aber auch sonst sind ein paar Macken drin. Am besten versetzt du dich in die Lage deines PCs und versucht im Geiste mal alles Zeile für Zeile durchzugehen. Dann wirst du merken, dass z.B. TemperaturAlt nirgendwo ein Wert zugewiesen wird, nur umgekehrt. Dann noch eine Kleinigkeit.

INPUT ; Temperatur

Das Semikolon brauchst du nur, wenn du INPUT mit einer Textausgabe verbindest, sonst kannst du es dir sparen. Also entweder

INPUT Temperatur

oder

INPUT "Geben sie was ein" ; Temperatur

Ich würde es vielleicht so machen:

Code:
INPUT "Wieviele Werte willst du eingeben "; anzahl

maximum = -50

FOR tag = 1 TO anzahl
 PRINT USING "##"; tag; : PRINT ; ".) ";
 INPUT temperatur
 IF temperatur > maximum THEN maximum = temperatur
NEXT

PRINT "Die hoechste Temperatur war"; maximum


Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 08.03.2005, 19:00    Titel: Antworten mit Zitat

Mich nervt bei INPUT immer das Fragezeichen, deshalb mach ich das so:
Code:

LINE INPUT Temperatur$
Temperatur = VAL(Temperatur$)

Ist zwar ne Zeile mehr, sieht aber schöner aus durchgeknallt durchgeknallt

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 08.03.2005, 19:15    Titel: Antworten mit Zitat

Wieso so umständlich ?

Code:

INPUT "Blabla", Blabla$


Dann kommt kein Fragezeichen peinlich
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 08.03.2005, 20:51    Titel: Antworten mit Zitat

Ach so, ich hab nach INPUT " " immer ";" anstatt "," verwendet....

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 08.03.2005, 21:00    Titel: Antworten mit Zitat

grinsen
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MisterD



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

BeitragVerfasst am: 08.03.2005, 21:14    Titel: Antworten mit Zitat

Ich übersetze mal:

INPUT "blabla"; var$
führt zu:
blabla? _

INPUT "blabla", var$
führt zu:
blabla _
_________________
"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
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 09.03.2005, 16:37    Titel: Antworten mit Zitat

Ich war nur etwas irritiert, denn wenn man bei
PRINT das "," verwendet, steht in der Ausgabe mit z.B.
Code:

PRINT "Name: ", YourName$

die Variable YourName$ oft nicht direkt hinter dem Text,
sondern etwas danach.

jb
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 QBasic. 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