Ruby für Idioten

Neue Frage »

Auf diesen Beitrag antworten »
RainerZufall Ruby für Idioten

Meine Frage:
Servus, ich habe ein Problem, bei dem ich dringend Hilfe brauche. Ich studiere zur Zeit Biologie, und eines der Pflichtfächer ist Informatik. Ich persönlich freue mich ja schon wenn ich den PC ankriege, ohne dass er mir um die Ohren fliegt, aber nun stellen die Dozenten ab letzten Freitag wöchentlich Aufgaben, welche es zu Lösen gilt. Doof ist nur, dass ich die letzte Vorlesung verpasst habe und keinen meiner Kommilitonen erreichen konnte. Ich habe erst gestern Abend von diesen Aufgaben erfahren und bin beim dem Versuch sie zu lösen an meine Schmerzgrenze gekommen. Der Abgabetermin ist morgen um 12 und ich habe noch nichts geschafft! Jede Hilfe die ich kriegen kann ist willkommen, und ich verspreche mehr bei Info aufzupassen und die zukünftigen Aufgaben alleine zu beantworten! Aber diesesmal brauche ich schnell Lösungen und Hilfe!!

Das sind die Aufgaben, welche mir Kopfschmerzen bereiten:

Aufgabe 01
In dieser Aufgabe wollen wir schrittweise ein Programm entwickeln, das gemessene Temperaturwerte von einem Server im Internet liest und sortiert nach Uhrzeiten den Temperaturverlauf ausgibt. Das Programm verhält sich also nach außen ganz anders als das in der Vorlesung entwickelte: Es sammelt die Temperaturwerte erst intern und gibt sie dann ganz zum Schluss (sortiert) aus.

Die Temperaturwerte werden zeilenweise in folgendem Format geliefert: 09:00 Uhr 14.1 °C.

1.
Vervollständigen Sie in einem ersten Schritt die Definition der Funktion get_temperatures() zum Erzeugen einer Liste aus einer entsprechenden Tastatureingabe:
# Liest Uhrzeiten (z. B. 09:15 Uhr) und Temperaturen
# (z.B. 16.0 °C bzw. 06.5 °C) zeilenweise von der Tastatur, bis eine Zeile "done\n"
# gelesen wird, und gibt die Daten als eine Liste von Listen mit jeweils zwei
# Elementen als Ergebnis zurück.
# Die Ergebnisse werden dabei nicht auf dem Bildschirm ausgegeben.
#
# Beispiel: Bei der Eingabe von
#
# 09:30 Uhr 09.0 °C
# 12:45 Uhr 18.5 °C
# 10:00 Uhr 13.0 °C
# done
#
# gibt die Funktion als Ergebnis die Liste [["09:30",9.0],["12:45",18.5],["10:00",13.0]] zurück.
def get_temperatures()
...
end

2.
Vervollständigen Sie die Definition der Funktion print_temperatures(list), die die Elemente einer Liste, wie sie get_temperatures() zurückgibt, zeilenweise auf dem Bildschirm ausgibt. Testen Sie print_temperatures(list) und get_temperatures() auch, indem Sie sie in einem Programm kombinieren.# Gibt den Inhalt von `list` zeilenweise auf dem Bildschirm aus.
#
# `list`: eine Liste von zweielementigen Listen, bei denen der erste Eintrag eine Uhrzeit
# in Form einer Zeichenkette und die zweite eine Fließkommazahl ist.
#
# Beispiel: print_temperatures([["09:30",9.0],["12:45",18.5],["10:00",13.0]]) führt zu
# der folgenden Bildschirmausgabe:
#
# 09:30 Uhr 09.0 °C
# 12:45 Uhr 18.5 °C
# 10:00 Uhr 13.0 °C
#
def print_temperatures(list)
...
end

3.
3.Das zu entwickelnde Programm, soll Werte in sortierter Reihenfolge (geordnet) ausgeben. Ein Ansatz, dies zu erreichen, ist: Jeder neue Wert wir in eine gegebene Liste so eingetragen, dass er an der richtigen Stelle steht. Wir realisieren dies zunächst in einer einfachen Form.

Vervollständigen Sie die Definition der Funktion insert_number(list, number):
# Gibt eine sortierte Liste zurück, die alle Elemente von `list` und zusätzlich `number` enthält.
#
# list: eine aufsteigend sortierte Liste von Gleitkommazahlen.
# number: eine Gleitkommazahl.
#
# Beispiele:
# - insert_number([2.0,3.5,4.8], 4.1) wird zu [2.0,3.5,4.1,4.8] ausgewertet.
# - insert_number([], 5.1) wird zu [5.1] ausgewertet.
def insert_number(list, number)
new_list = []
position = 0
number_has_been_inserted = false # Remember whether a new number
# has been inserted.
while position < list.length
...
end
...
new_list
end

4.
Nutzen Sie nun Ihre Überlegungen und den Quelltext aus der vorherigen Aufgabe, um die Definition der Funktion insert_record(list,record) zu vervollständigen, die nun eine zweielementige Liste mit einer Uhrzeit als ersten Wert in eine bereits nach der Uhrzeit sortierte Liste von zweielementigen Listen einfügt.
# Gibt eine sortierte Liste zurück, die alle Elemente von `list`und zusätzlich `number` enthält.
#
# list: eine aufsteigend sortierte Liste von zweielementigen Listen. Das erste Element der
# zweielementigen Listen ist eine Zeichenkette (Uhrzeit) und list ist nach diesen Zeichenketten
# sortiert, z.B., [["08:20", 3000.1], ["09:33", -500.0], ["23:59", 100000.0]].
# record: ein zweielementige Liste des obigen Formats, z.B. ["23:59", 100000.0]].
#
# Beispiele:
# - insert_record([["09:30",9.0],["12:45",18.5]], ["10:00",13.0])
# wird zu [["09:30",9.0],["10:00",13.0],["12:45",18.5]] ausgewertet.
# - insert_record([], ["10:00",13.0]) wird zu [["10:00",13.0]] ausgewertet.
def insert_record(list, record)
new_list = []
position = 0
record_has_been_inserted = false # variable to store if the new record has been inserted.
while position < list.length
...
end
...
new_list
end

5.
Vervollständigen Sie die Definition der Funktion get_temperatures_sorted(), indem Sie ihren Code aus der ersten Teilaufgabe nutzen und die Funktion insert_record(list,record) geschickt einbauen. Testen Sie die Funktion, indem Sie ihr Programm aus der zweiten Teilaufgabe anpassen.
# Liest Uhrzeiten (z. B. 09:15 Uhr) und Temperaturen (z.B. 16.0 °C bzw. 06.5 °C) zeilenweise von der Tastatur
# bis eine Zeile "done\n" gelesen wird und gibt die Daten als eine nach der Uhrzeit sortierte Liste von Listen mit jeweils
# zwei Elementen als Ergebnis zurück.
#
# Das Ergebnis wird dabei nicht auf dem Bildschirm ausgegeben.
#
# Beispiel: Bei der Eingabe von
#
# 09:30 Uhr 09.0 °C
# 12:45 Uhr 18.5 °C
# 10:00 Uhr 13.0 °C
# done
#
# liefert die Funktion als Ergebnis die Liste [["09:30",9.0],["10:00",13.0],["12:45",18.5]] (Vergleiche mit dem Beispiel oben)
# zurück.
def get_temperatures_sorted()
...
end

6.
Geben Sie nun ein vollständiges Programm an, das die Funktionen get_temperatures_sorted() und print_temperatures(list) nutzt, um zuerst die Uhrzeit und Temperaturdaten von der Tastatur einzulesen und nach done dann sortiert auf dem Bildschirm auszugeben.
7.
Erweitern Sie ihr Programm so, dass die Daten nicht von der Tastatur, sondern von einem Server eingelesen werden.
Hinweise
?Sie können Teilstrings "cde" aus einem größen String "abcdef" mit "abcdef"[2..4] extrahieren.
?Zum Vergleichen zweier Uhrzeiten in Form von Zeichenketten kann < verwendet werden, z.B. wird "10:15" < "12:45" zu true ausgewertet.

Aufgabe 02
Geben Sie in der grafischen Notation an, wie Ruby die drei folgenden Ausdrücke auswertet:

A) if x = 3 < 2 then 2 else x end

B) def dec(x)
if x >= 1 then
x -= 1
else
0
end
end
dec(4) + 2

C) x = 1.5
while x > 1
x = x/2
end


Meine Ideen:
Vielen, Vielen Dank an alle, welche sich die Zeit genommen haben, um zu Helfen!
 
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »