[QUIZ#8] Loomes (Ruby)


Loomis

Mitglied Bunt
#1
Und hier meine Ruby Lösungen. Das ganze ist erstmal Prozedual, denn ins OO muss ich mich erst noch richtig einlesen.

Als Quelle dienten mir hierbei:
Programmierung in Ruby, Ruby in 20 Minuten und Google ;)

Ruby ist eine echt schöne Sprache. Gefällt mir auf jeden Fall besser als Java und ich werde das wohl weiter lernen, macht einfach Spaß zu Programmieren damit. ;)

Begrüsser:
Ruby:
puts "Geben Sie bitte Ihren Namen ein:"
printf("Hallo %s!",gets.chomp)
Das war leicht. Nur bis ich das chomp gefunden habe, hat etwas gedauert ;)


Quadratzahlen:
Ruby:
puts "Obergrenze:"
n = gets.to_i
printf("Quadratzahlen bis: %s\n",n.to_s)

i = 0;

n.times do
	i += 1
	val = i * i
	
	break if val > n
	
	printf("%s\n",val)
end
Da meine Kenntnisse noch bescheiden sind, muss ich erst noch herausfinden ob das alles nicht noch schöner geht.


Fakultät & Fibonacci:
Ruby:
def fak(n)
	if n == 0 or n == 1
		return 1
	else
		return n * fak(n - 1)
	end
end

def fib(n)
	if n == 1 or n == 2
		return 1
	else
		return fib(n - 1) + fib(n - 2)
	end
end

puts "Zahl:\n"
n = gets.chomp
printf("%s! = \t%s\nf(%s) = \t%s\n",n,fak(n.to_i),n,fib(n.to_i))

Zahlenraten:
Ruby:
puts "Erraten Sie eine Zahl zwischen 1 und 100!"

done = false
zufall = rand(100)

while done == false
	puts "Ihr Tipp:"
	
	zahl = gets.chomp
	
	if zahl.to_i < zufall
		puts "Zu klein."
	end
	if zahl.to_i > zufall
		puts "Zu gross."
	end
	if zahl.to_i == zufall
		done = true
		puts "Richtig!"
	end
end
Die Kontrollstrukturen hier werde ich noch etwas überarbeiten. Das sieht noch etwas hässlich aus ;)


Mittelwert:
Ruby:
done = false

zahlen = Array.new

while done == false
	puts "Zahl (q zum Beenden):"
	
	n = gets.chomp
	
	if n.to_s != "q"
		zahlen.push(n)
	end
	
	if n.to_s == "q"
		sum = 0
		
		zahlen.each do |var|
			sum += var.to_f
		end
		
		average = sum / zahlen.length
		
		puts "Mittelwert:" + average.to_s
		
		done = true
	end
end
 

Anhänge

Zuletzt bearbeitet:
#2
Hallo Loomes,

Ruby ist eine echt schöne Sprache. Gefällt mir auf jeden Fall besser als Java und ich werde das wohl weiter lernen, macht einfach Spaß zu Programmieren damit. ;)
Schön, dass du auf den rechten Weg gefunden hast ;-) Java und Ruby sind wirklich zwei ziemlich verschiedene Welten. Es haben aber beide ihre Stärken.

Begrüsser:
Ruby:
puts "Geben Sie bitte Ihren Namen ein:"
printf("Hallo %s!",gets.chomp)
Das war leicht. Nur bis ich das chomp gefunden habe, hat etwas gedauert ;)
printf würde ich hier nicht verwenden, sondern entweder
Ruby:
name = get.chomp
puts "Hallo " + name + "!"
oder
Ruby:
name = gets.chomp
puts "Hallo #{name}!"
Quadratzahlen:
Ruby:
puts "Obergrenze:"
n = gets.to_i
printf("Quadratzahlen bis: %s\n",n.to_s)
Hier fände ich wieder
Ruby:
puts "Quadratzahlen bis: #{n}"
schöner. Wenn es unbedingt printf sein muss, dann bitte mit dem richtigen Platzhalter (%d für Ganzzahl):
Ruby:
printf("Quadratzahlen bis: %d\n", n)
Ruby:
i = 0;

n.times do
	i += 1
	val = i * i
	
	break if val > n
	
	printf("%s\n",val)
end
Den Laufindex kannst du dir auch einfach über den Blockparameter holen:
Ruby:
n.times do |i|
  # ...
end
Allerdings ist i beim ersten Durchlauf dann 0. Darum wäre es hier praktischer, upto zu verwenden:
Ruby:
1.upto(n) do |i|
  # ...
end
Fakultät & Fibonacci:
Ruby:
def fak(n)
	if n == 0 or n == 1
		return 1
	else
		return n * fak(n - 1)
	end
end

def fib(n)
	if n == 1 or n == 2
		return 1
	else
		return fib(n - 1) + fib(n - 2)
	end
end

puts "Zahl:\n"
n = gets.chomp
printf("%s! = \t%s\nf(%s) = \t%s\n",n,fak(n.to_i),n,fib(n.to_i))
Sieht gut aus, aber das printf schon wieder... ;) Du kannst dir ja selber überlegen, wie man das umschreibt.

Zahlenraten:
Ruby:
puts "Erraten Sie eine Zahl zwischen 1 und 100!"

done = false
zufall = rand(100)

while done == false
	puts "Ihr Tipp:"
	
	zahl = gets.chomp
	
	if zahl.to_i < zufall
		puts "Zu klein."
	end
	if zahl.to_i > zufall
		puts "Zu gross."
	end
	if zahl.to_i == zufall
		done = true
		puts "Richtig!"
	end
end
Die Kontrollstrukturen hier werde ich noch etwas überarbeiten. Das sieht noch etwas hässlich aus ;)
Z.B. so:
Ruby:
loop do
  puts "Ihr Tipp:"
  zahl = gets.to_i
  if zahl < zufall
    puts "Zu klein."
  elsif zahl > zufall
    puts "Zu gross."
  else
    puts "Richtig!"
    break
  end
end
Mittelwert:
Ruby:
done = false

zahlen = Array.new

while done == false
	puts "Zahl (q zum Beenden):"
	
	n = gets.chomp
	
	if n.to_s != "q"
		zahlen.push(n)
	end
	
	if n.to_s == "q"
		sum = 0
		
		zahlen.each do |var|
			sum += var.to_f
		end
		
		average = sum / zahlen.length
		
		puts "Mittelwert:" + average.to_s
		
		done = true
	end
end
Wozu n.to_s? n ist doch schon ein String. Aus rein stilistischen Gründen würde ich die Schleife so umschreiben:
Ruby:
loop do
  puts "Zahl (q zum Beenden):"
  n = gets.chomp
  break if n == "q"
  zahlen.push(n)
end
# Hier die Ausgabe
Du hast außerdem vergessen, die Liste der Zahlen rückwärts auszugeben :)

Grüße, Matthias
 

Loomis

Mitglied Bunt
#3
printf würde ich hier nicht verwenden, sondern entweder
Ruby:
name = get.chomp
puts "Hallo " + name + "!"
oder
Ruby:
name = gets.chomp
puts "Hallo #{name}!"
Ich hatte erst puts verwendet, fand dann aber dass printf schöner ist.
Jetzt weis ich das ja besser. Ich würde wenn dann die erste Variante verwenden,
in PHP schreibe ich das auch so.


Hier fände ich wieder
Ruby:
puts "Quadratzahlen bis: #{n}"
schöner. Wenn es unbedingt printf sein muss, dann bitte mit dem richtigen Platzhalter (%d für Ganzzahl):
Ruby:
printf("Quadratzahlen bis: %d\n", n)
Wie schon gesagt, hatte ich vorher puts verwendet und da musste ich (muss man das eigendlcih wirklich?) n
für die Ausgabe zum String machen.


Den Laufindex kannst du dir auch einfach über den Blockparameter holen:
Ruby:
n.times do |i|
  # ...
end
Allerdings ist i beim ersten Durchlauf dann 0. Darum wäre es hier praktischer, upto zu verwenden:
Ruby:
1.upto(n) do |i|
  # ...
end
Ja, für den Anfang hatte ich mich mehr an einem mir bekannten Konstrukt versucht. Also mit Zählvariable.
Solche Feinheiten kommen dann mit der Zeit :)


Sieht gut aus, aber das printf schon wieder... ;) Du kannst dir ja selber überlegen, wie man das umschreibt.
Ja mit puts dann :)


Z.B. so:
Ruby:
loop do
  puts "Ihr Tipp:"
  zahl = gets.to_i
  if zahl < zufall
    puts "Zu klein."
  elsif zahl > zufall
    puts "Zu gross."
  else
    puts "Richtig!"
    break
  end
end
Ok das loop do sieht echt gut aus. Danke, das hatte ich so gar nicht gefunden auf anhieb.


Wozu n.to_s? n ist doch schon ein String. Aus rein stilistischen Gründen würde ich die Schleife so umschreiben:
Ruby:
loop do
  puts "Zahl (q zum Beenden):"
  n = gets.chomp
  break if n == "q"
  zahlen.push(n)
end
# Hier die Ausgabe
Beim testen von diesem Programm kamen immer Fehlermeldungen wegen falschen Typen, so gings dann.


Du hast außerdem vergessen, die Liste der Zahlen rückwärts auszugeben :)
Ups, da habe ich die Aufgabe nicht richtig gelesen ;)


Danke dir fürs Feedback, ich hätte mit wesentlich mehr Kritik gerechnet :)


Und:

Da der Anteil an Ruby Themen im Forum recht gering ist, werde ich diesen Bereich wohl demnächst mit meinen Anfängerfragen etwas beleben :p
 
Zuletzt bearbeitet:

Neue Beiträge