Ruby :: Aufgabe #3

2 Lösungen Lösungen öffentlich

Lotto - Simulation - 6 aus 49

Anfänger - Ruby von Gustl - 25.11.2012 um 16:16 Uhr
Schreiben Sie ein Programm, welches 6 Zahlen zwischen 1 und 49 abfrägt. Danach soll das Programm solange 6 Zufallszahlen berechnen bis alle 6 eingegebenen Zahlen übereinstimmen. Natürlich darf eine Zahl nicht zweimal vorkommen.
Dann soll ausgegeben werden nach wie vielen "Spielen" ein 6er erzielt wurde und wie hoch die Chance auf einen 3er, einen 4er und einen 5er war.

Lösungen:

1 Kommentar
vote_ok
von pianoplayer (1330 Punkte) - 29.11.2013 um 21:29 Uhr
Quellcode ausblenden Ruby-Code
puts "Lottosimulation 6 aus 49:"
puts "*************************"
puts "\nEs wird die Anzahl von 3/4/5 Richtigen ermittelt."
puts "\nDie Simulation stoppt, wenn 6 Richtige gezogen wurden."
print "\nWieviele Ziehungen sollen maximal durchgefuehrt werden? "
max_ziehungen = gets.to_i

puts "Geben Sie 6 Zahlen zwischen 1 und 49 ein!"
a= []							#Array der gewählten Zahlen
for i in 1..6 do
  flag = true
  while flag do            		#korrekte Zahlen sollen eingegeben werden
    print "Zahl #{i}: "
	zahl = gets.to_i
    if !(1..49).cover?(zahl) then
	  puts "Die Zahl muss zwischen 1 und 49 liegen"
	else
	  if !a.include?(zahl) then
	    flag = false 
      else
	    puts "Die Zahl ist schon gewaehlt worden"
	  end
	end  
  end
  a << zahl
end
print "Ihre Zahlen sind: "			#Ausgabe der gewählten Zahlen
p a
treff = [0,0,0,0,0,0,0]          	# Array der Treffer
									# Position 0 ist Anzahl von keiner Richtigen
									# Position 1 ist Anzahl von einer Richtigen ... 
count = 0							#Zähler für die Ziehungen
no_6er = true						#flag für keine 6 Richtige
while count <= max_ziehungen and no_6er do	#Schleife für die Ziehungen
  zufall = []						#Zufallsziehung
  for i in 0..5 do
    flag = true
    while flag do					#Prüfung, dass keine doppelten Zahlen vorkommen
      zahl = rand(49) + 1
      if !zufall.include?(zahl) then
        flag = false
	  end
    end
    zufall << zahl
  end  
  treffer = 0
  for i in 0..5 do
    if a.include?(zufall[i]) then
	  treffer +=1
	end  
  end
  if treffer >= 6 then
    no_6er = false
	p zufall					#Ausgabe, wenn 6 Richtige
  end	
  treff[treffer] += 1
  count += 1
end

#Schlussausgabe
puts "Anzahl Ziehungen : #{count-1}"	
puts "3 Richtige: \t#{treff[3]} mal"
puts "4 Richtige: \t#{treff[4]} mal"
puts "5 Richtige: \t#{treff[5]} mal"
puts "6 Richtige: \t#{treff[6]} mal"






vote_ok
von Idef1x (1320 Punkte) - 19.01.2018 um 10:19 Uhr
Quellcode ausblenden Ruby-Code
def getting6(array)

=begin

 In:
  - array


 Out:
  - filled array

=end



 #Section - CODE
 
  #Section - filling the array with six random numbers between 1 und 49
    array = []

    while array.size < 6 do
        random = rand(49) + 1
        
        if array.include?(random) == false then
            array.push(random)
            
        end
        
    end

  #Section - Output
	return array.sort!
	
end



def playLotto()

=begin

 In:
  - nothing

 Out:
  - tries for 3, 4, 5 and 6 right numbers

=end

 #Section - CODE

  #Section - Declaration
	try = 0

	player = []
	tries = {3 => 0, 4 => 0, 5 => 0, 6 => 0}



  #Section - Get player's numbers

	for i in 1..6

		loop do
			print "Please enter number #{i}:"

			num = gets.to_i
			
			if player.include?(num) == false && num >= 1 && num <= 49
				player.push(num)
				break
                
			else
				puts "You have entered a number that you have already before or it\'s not between 1 and 49!"
                
			end
		
		end
    
	end


 
 #Section - Try and try and try again
	loop do

		try += 1

		# Reseting round array
		round = []

		# Getting 6 random numbers for the round
		round = getting6(round)

		case (player - round).size
        when 0
            
			tries[6] = try
			
		when 1
            
			if tries[5] == 0
				tries[5] = try
				
			end
            
		when 2
            
			if tries[4] == 0
				tries[4] = try
                
			end
		
		when 3
            
			if tries[3] == 0
				tries[3] = try
				
			end
			
		end
        
		break if (player - round).size == 0
		
	end

 #Section - Output
	tries.each_pair do |key, value|
        
		puts "#{key} right numbers: #{value} tries."
	end

end

playLotto()