Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
strudi
Anmeldungsdatum: 05.03.2005 Beiträge: 4
|
Verfasst am: 05.03.2005, 04:11 Titel: Durchschnittswerte errechnen?! |
|
|
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 |
|
 |
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 05.03.2005, 15:21 Titel: |
|
|
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 05.03.2005, 15:24 Titel: |
|
|
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.
//edit: Da war ICC wohl schneller. Nimm lieber seinen Code. Der ist noch einfacher.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
strudi
Anmeldungsdatum: 05.03.2005 Beiträge: 4
|
Verfasst am: 05.03.2005, 21:18 Titel: |
|
|
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
mfg
strudi |
|
Nach oben |
|
 |
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 05.03.2005, 21:34 Titel: |
|
|
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
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 |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 05.03.2005, 21:45 Titel: |
|
|
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 |
|
 |
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 05.03.2005, 22:06 Titel: |
|
|
Ups das hab ich wohl aus Versehen 2 Mal hingeschrieben
Sollte
Code: |
PRINT "Tag"; Tag; ": ";
INPUT "", Temperatur$
|
heißen _________________
 |
|
Nach oben |
|
 |
stef
Anmeldungsdatum: 13.01.2005 Beiträge: 102
|
Verfasst am: 06.03.2005, 00:01 Titel: |
|
|
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 |
|
 |
strudi
Anmeldungsdatum: 05.03.2005 Beiträge: 4
|
Verfasst am: 06.03.2005, 21:33 Titel: |
|
|
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 |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 06.03.2005, 22:06 Titel: |
|
|
Versuch mal, Variablen vom Typ Double zu nehmen,
--> größere Genauigkeit.
jb |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 06.03.2005, 22:59 Titel: |
|
|
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 |
|
 |
strudi
Anmeldungsdatum: 05.03.2005 Beiträge: 4
|
Verfasst am: 07.03.2005, 23:04 Titel: |
|
|
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 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 |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 08.03.2005, 00:43 Titel: |
|
|
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 |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 08.03.2005, 19:00 Titel: |
|
|
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
jb |
|
Nach oben |
|
 |
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 08.03.2005, 19:15 Titel: |
|
|
Wieso so umständlich ?
Code: |
INPUT "Blabla", Blabla$
|
Dann kommt kein Fragezeichen  _________________
 |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 08.03.2005, 20:51 Titel: |
|
|
Ach so, ich hab nach INPUT " " immer ";" anstatt "," verwendet....
jb |
|
Nach oben |
|
 |
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 08.03.2005, 21:00 Titel: |
|
|
 _________________
 |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 08.03.2005, 21:14 Titel: |
|
|
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 |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 09.03.2005, 16:37 Titel: |
|
|
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 |
|
 |
|