Seite 1 von 2

Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 09:24
von inamarina
schon erledigt, danke an alle

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 09:31
von Dauerbaustelle
Hausaufgaben sind dazu da, selbst gemacht zu werden :-) Fang' doch mal was an, und wenn du irgendwo nicht weiterkommst, stelle konkrete Fragen. Niemand wird dir hier deine Schularbeiten machen.

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 09:34
von BlackJack
@inamarina: Was hast Du denn schon an Quelltext? Fang doch erst einmal an Umrechnungsfunktionen für °C in die anderen Temperatureinheiten zu schreiben.

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 09:37
von inamarina
:D ich scheitere schon daran, dass ich nicht weiß, wie ich ein Eingabefeld programmieren kann, damit der Benutzer etwas eingeben kann

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 09:41
von EyDu
Hallo.

Dann solltest du einfach mit dem Tutorial anfangen.

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 09:43
von Dauerbaustelle
`raw_input` in Python 2.x und `input` in Python 3.x. Ich würde dann vielleicht erstmal mit einem Tutorial anfangen, für Python 3.x siehe http://tutorial.pocoo.org

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 09:53
von inamarina
ich hab mir schon viele Tutorials angeschaut und auch gelesen, aber da stand nie wirklich das drin, was mir für das Projekt nützt. Aber dankeschön troztdem

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 09:56
von Dauerbaustelle
Na ein gewisses Grundwissen brauchst du schon, sonst klappt das nicht :-)

Jetzt hast du ja den Ansatz mit `input` (Python 3).

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 10:03
von BlackJack
@inamarina: Du musst Tutorials nicht nur anschauen und lesen, sondern durcharbeiten. Also die Sachen die da beschrieben werden auch ausprobieren und damit ein wenig herumspielen bis Du sie verstanden hast. Und da stand *immer* etwas drin was Dir für das Projekt etwas nützt -- vorausgesetzt es waren Python-Tutorials. Du musst halt die Grundlagen von Python lernen, wenn Du damit etwas programmieren willst.

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 10:42
von hendrikS
Ich würde auch empfehlen mal anzugucken, was ihr im Unterricht dazu gelernt habt. Also ich glaube zumindest nicht, dass der Lehrer eine Hausaufgabe gibt ohne die Grundlagen vemittelt zu haben. In dem Fall wie man Nutzereingaben macht.

Und dann hast Du schon überlegt was Du anzeigst, wenn jemand -1000 eingibt?

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 18:53
von inamarina
mein problem ist, dass wir in der Schule nichts darüber gemacht haben und ich so zusagen bei 0 stehe. Wir müssen uns das selber beibringen und bei mir funktioniert gar nichts :(

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 19:10
von Dauerbaustelle
Dann arbeite doch einfach mal ein Tutorial durch.

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 19:15
von Hyperion
inamarina hat geschrieben:mein problem ist, dass wir in der Schule nichts darüber gemacht haben
Kann ich nicht glauben! Sollte ich da unrecht haben, so entschuldige bitte, aber die am meisten genutzte Ausrede von Schülern ist seit jeher "haben wir nicht besprochen"... ;-)
inamarina hat geschrieben: und ich so zusagen bei 0 stehe.
Das wiederum glaube ich Dir :mrgreen: SCNR
inamarina hat geschrieben: Wir müssen uns das selber beibringen und bei mir funktioniert gar nichts :(
Welche Schulform und Klasse ist denn das? In welchem Rahmen erfolgt denn die Aufgabe? Eigenes Erarbeiten einer Programmiersprache würde ich jetzt mal ins Informatikstudium ab dem 3. Semester einordnen ;-)
Daher muss doch im Unterricht etwas besprochen worden sein!

So, nun mal wieder konstruktiv: Poste doch mal Deine Ansätze!

Ich würde mir als erstes eine Funktion schreiben, die mir Grad Celsius in Kelvin umwandelt. Diese nimmt als Parameter einen float-Wert in °C entegegen und gibt einen float-Wert mit dem Ergebnis der Berechnung zurück. Die kannst Du z.B. "celsius_to_kelvin()" nennen.

Da Kelvin die physikalische Grundeinheit ist, kannst Du dann im Anschluss eine Funktion "kelvin_to_fahrenheit" schreiben (Theoretisch könntest Du auch von "celsius" ausgehen) . Diese funktioniert letztlich genauso, nur dass die mathematische Berechnung eine andere ist.

Diese Funktionen kannst Du noch in einer Shell entwickeln / testen. Probiere das eben mal mit einigen Zahlen ausprobieren, so wie ich hier in der ipython-Shell:

Code: Alles auswählen

In [2]: celsius_to_kelvin(0)
Out[2]: 273.14999999999998

In [3]: celsius_to_kelvin(10)
Out[3]: 283.14999999999998

In [4]: for value in range(0, 30, 5):
   ...:     print "{0} °C -> {1} °K".format(value, celsius_to_kelvin(value))
   ...:     
   ...:     
0 °C -> 273.15 °K
5 °C -> 278.15 °K
10 °C -> 283.15 °K
15 °C -> 288.15 °K
20 °C -> 293.15 °K
25 °C -> 298.15 °K
(Gemein wie ich bin, fehlt die Funktionsdefinition ;-) )
In [4] siehst Du, wie ich mittels einer Schleife verschiedene Werte ausrechne. Die range()-Funktion generiert mir die Werte. Wie Du siehst, gibt man Start- und Endwert sowie die Schrittweite an. Genau das suchst Du doch auch!

Letztlich fehlt jetzt noch die Abfrage der Start- und Endwerte, sowie die spezielle Formulierung der Umrechnungsfunktionen. Aber raw_input() bzw. input() wurden Dir ja schon genannt.

Also, auf geht's :-)

Edit: Wir hatten dazu übrigens schon mal was hier im Forum - allerdings wird Dir das nicht so viel nutzen, da dort einige eher fortgeschrittene Konzepte zum Tragen kommen.

@all: Der Thread läd fast dazu ein, das ganze mal wieder in anderen Sprachen umzusetzen, gel ;-)

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 19:27
von Darii
Hyperion hat geschrieben:

Code: Alles auswählen

In [4]: for value in range(0, 30, 5):
   ...:     print "{0} °C -> {1} °K".format(value, celsius_to_kelvin(value))
   ...:     
   ...:     
0 °C -> 273.15 °K
5 °C -> 278.15 °K
10 °C -> 283.15 °K
15 °C -> 288.15 °K
20 °C -> 293.15 °K
25 °C -> 298.15 °K
Es gibt kein Grad Kelvin. *duck* ;)

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 19:31
von Hyperion
Darii hat geschrieben:Es gibt kein Grad Kelvin. *duck* ;)
Laut wikipedia hast Du recht:
wikipedia hat geschrieben: Bis 1967 lautete der Einheitenname Grad Kelvin, das Einheitenzeichen war °K.
Ok, hab ich falsch im Kopf gehabt ;-)

Damit wäre das Hauptproblem des Threads gelöst :mrgreen:

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 19:53
von peddy
Bei Wikipedia stimmt doch die Formel nicht bei Celsius zu Fahrenheit oder bin ich plem plem???

http://de.wikipedia.org/wiki/Grad_Celsius

Fahrenheit = TC · 1,8 + 32 liefert falsche Werte. Richtig wäre Fahrenheit = ((celsius * 9) / 5) + 32

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 19:56
von Hyperion
peddy hat geschrieben: Fahrenheit = TC · 1,8 + 32 liefert falsche Werte. Richtig wäre Fahrenheit = ((celsius * 9) / 5) + 32
Das könnte evtl. an der Fließkommaungenauigkeit liegen? In der Shell sieht es zunächst gut aus:

Code: Alles auswählen

In [3]: from __future__ import division

In [4]: 9 / 5
Out[4]: 1.8
Je nach Genauigkeit muss man dann eben das decimal-Modul in diesem Kontext nutzen. Aber so dramatisch sollten die Unterschiede hier nicht ausfallen ;-)

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 20:57
von BlackJack
@peddy: Die Abweichungen sind doch aber wohl ein Witz:

Code: Alles auswählen

In [100]: ['%.40f' % ((c*1.8+32) - (c*9./5+32)) for c in xrange(3,300,10)]
Out[100]: 
['0.0000000000000000000000000000000000000000',
 '0.0000000000000071054273576010018587112427',
 '0.0000000000000000000000000000000000000000',
 '0.0000000000000000000000000000000000000000',
 '0.0000000000000000000000000000000000000000',
 '0.0000000000000000000000000000000000000000',
 '0.0000000000000000000000000000000000000000',
 '0.0000000000000000000000000000000000000000',
 '0.0000000000000000000000000000000000000000',
 '0.0000000000000000000000000000000000000000',
 '0.0000000000000000000000000000000000000000',
 '0.0000000000000000000000000000000000000000',
 '0.0000000000000000000000000000000000000000',
 '0.0000000000000000000000000000000000000000',
 '0.0000000000000568434188608080148696899414',
 '0.0000000000000568434188608080148696899414',
 '0.0000000000000568434188608080148696899414',
 '0.0000000000000568434188608080148696899414',
 '0.0000000000000568434188608080148696899414',
 '0.0000000000000568434188608080148696899414',
 '0.0000000000000568434188608080148696899414',
 '0.0000000000000568434188608080148696899414',
 '0.0000000000000568434188608080148696899414',
 '0.0000000000000568434188608080148696899414',
 '0.0000000000000568434188608080148696899414',
 '0.0000000000000568434188608080148696899414',
 '0.0000000000000568434188608080148696899414',
 '0.0000000000001136868377216160297393798828',
 '0.0000000000001136868377216160297393798828',
 '0.0000000000000000000000000000000000000000']
Da beides mit Fliesskommaungenauigkeiten behaftet ist, ist am Ende wahrscheinlich auch beides streng genommen falsch.

Die Formel bei Wikipedia stimmt aber, denn 9/5 ist nun einmal *genau* 1,8. Das der Rechner 1.8 intern nicht exakt repräsentiert, dafür kann Wikipedia ja nix. ;-)

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 21:07
von BlackJack
Da die Hausaufgaben die gestern abend bis heute morgen noch gemacht werden mussten, wahrscheinlich heute morgen noch schnell abgeschrieben wurden, können wir ja jetzt die Sprachvielfalt wieder aufleben lassen. So hätte ich das wohl zu meiner Schulzeit geschrieben:

Code: Alles auswählen

10 INPUT"VON";A:INPUT"BIS";B:PRINT"CELSIUS","KELVIN","FAHRENHEIT"
20 FOR C=A TO B STEP 10:PRINT C,C+273.15,C*9/5+32:NEXT
Testlauf:

Code: Alles auswählen

RUN
VON? 3
BIS? 30
CELSIUS   KELVIN    FAHRENHEIT
 3         276.15    37.4
 13        286.15    55.4
 23        296.15    73.4

READY.

Re: Projekt für die Schule

Verfasst: Mittwoch 30. März 2011, 22:04
von Dauerbaustelle
Hier mal in Scheme:

Code: Alles auswählen

(define stdin
  (transcoded-port (standard-input-port)
                   (make-transcoder (utf-8-codec))))

(define (get-number-from-stdin msg)
  (display msg)
  (string->number (get-line stdin)))

(define (celsius->kelvin c)
  (+ c 273.15))

(define (celsius->fahrenheit c)
  (+ 32 (* c 1.8)))

(define (main)
  (let loop [(from (get-number-from-stdin "from: "))
             (to (get-number-from-stdin "to: "))]
    (unless (= from to)
      (printf "C: ~a | K: ~a | F: ~a\n"
              from
              (celsius->kelvin from)
              (celsius->fahrenheit from))
      (loop (+ from 1) to))))

(main)
Leider ist die Eingabereihenfolge beliebig, da die Reihenfolge der "assignments" in `let` beliebig ist. `let*`, das geordnete `let`, gibt's aber nicht in der "named" Form (der Name ist hier "loop"). Ich war zu faul, mir das jetzt zu bauen. Außerdem war ich zu faul, mir ein Tabellenformatierungsdings in Scheme zu basteln, und soweit ich weiß, hat die Standard Library da kein `str.xjust`-Äquivalent :-(

Code: Alles auswählen

to: 30
from: 3
C: 3 | K: 276.15 | F: 37.4
C: 4 | K: 277.15 | F: 39.2
C: 5 | K: 278.15 | F: 41.0
...
C: 28 | K: 301.15 | F: 82.4
C: 29 | K: 302.15 | F: 84.2