Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: leicht Usereingaben in Array schreiben
BeitragVerfasst: 28 Jul 2010, 17:05 
Offline
Geselle

Registriert: 10 Mär 2009, 13:22
Beiträge: 107
Hallo Leute

ich möchte dass die Eingaben des Users sollange in ein Array geschrieben werden bis dieser "E" oder "e" Für Ende eingibt.
Wie könnte man soetwas mit wenig Aufwand realisieren?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: leicht Usereingaben in Array schreiben
BeitragVerfasst: 28 Jul 2010, 17:24 
Offline
Geselle

Registriert: 10 Mär 2009, 13:22
Beiträge: 107
hab einen passenden Code gefunden:


1
2
3
4
5
6
7
8
9
10
def gets_as_a(a=[])
if (i=gets.chomp).downcase!="e"
gets_as_a(a<<i)
else
puts a.sort!
end
end


gets_as_a(a=[])


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: leicht Usereingaben in Array schreiben
BeitragVerfasst: 28 Jul 2010, 17:58 
Offline
Interpreter

Registriert: 10 Dez 2007, 17:37
Beiträge: 1341
Eine Rekursion bei einer unbekannten Anzahl von Eingaben ist nicht so glücklich.
Wenn es zu viele sind, dann platzt dir der Stack. Ein While-Schleife ist da vielleicht
besser:



1
2
3
4
a=[]
while ((i=gets.chomp).downcase!="e")
a<<i
end

_________________
Grüße
Jack


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: leicht Usereingaben in Array schreiben
BeitragVerfasst: 28 Jul 2010, 19:24 
Offline
Nuby
Benutzeravatar

Registriert: 28 Jul 2010, 13:40
Beiträge: 6
slowjack2k hat geschrieben:
Eine Rekursion bei einer unbekannten Anzahl von Eingaben ist nicht so glücklich.


Wollte auch das gleiche Anmerken, du warst aber schneller ;)


1
2
3
4

a=[]
while (a<<gets.chomp).last.downcase!='e';end
puts a.sort

_________________
Bild
Mein Blog auf PC.DE
http://pc.de/downtown/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: leicht Usereingaben in Array schreiben
BeitragVerfasst: 28 Jul 2010, 21:08 
Offline
Geselle

Registriert: 10 Mär 2009, 13:22
Beiträge: 107
Danke Leute für die schnelle Hilfe,
ich habe dies auch dann sofort umgesetzt.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/local/bin/ruby -w
#Array´s
pf=[]
im_freq=[]
#Methoden
def intermodulation_1(f1,f2)
im_freq << f1+f2
im_freq << f2+f1
im_freq << f2-f1
end


puts "Frequenzen eingeben"

while ((i=gets.chomp).downcase!="e")
pf<<i.to_f
pf.sort!
end

puts "Sie haben folgende Frequenzen eingegeben:"
puts pf.class
pf.each do |f|
puts "#{f} MHz"
end


unless pf.empty?
puts "PF-Array ist noch nicht leer"
f1 = pf[0]
f2 = pf[1]
unless f2.nil?
im_freq = intermodulation_1(f1,f2)
pf.shift
end
end


Gibt es noch einen Trick mit dem das Array "im_freq" in meiner Methode global setzen?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: leicht Usereingaben in Array schreiben
BeitragVerfasst: 28 Jul 2010, 21:14 
Offline
Nuby
Benutzeravatar

Registriert: 28 Jul 2010, 13:40
Beiträge: 6
Christian85 hat geschrieben:
Gibt es noch einen Trick mit dem das Array "im_freq" in meiner Methode global setzen?


Klar, indem du im_freq GROSS schreibst, also IM_FREQ (überall im Code)

_________________
Bild
Mein Blog auf PC.DE
http://pc.de/downtown/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: leicht Usereingaben in Array schreiben
BeitragVerfasst: 28 Jul 2010, 21:19 
Offline
Geselle

Registriert: 10 Mär 2009, 13:22
Beiträge: 107
wow man geht das hier schnell.
Danke für den tipp


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: leicht Usereingaben in Array schreiben
BeitragVerfasst: 28 Jul 2010, 21:30 
Offline
ri

Registriert: 23 Feb 2004, 14:59
Beiträge: 743
Wohnort: Esslingen
downtown hat geschrieben:
Christian85 hat geschrieben:
Gibt es noch einen Trick mit dem das Array "im_freq" in meiner Methode global setzen?


Klar, indem du im_freq GROSS schreibst, also IM_FREQ (überall im Code)

Wobei das Großschreiben eine Konstante definiert. (was jetzt im Falle eines Arrays nicht heißt, das der Array-Inhalt konstant ist, sondern der Array an sich. Und Konstanten in Ruby auch überschrieben werden könnten.

Globale Variablen definiert man eher mit $, also hier $im_freq.

Es gilt aber auch: Globale Variablen sind pfui. Bei kleinen Skripten evtl. noch tolerierbar, aber sonst nicht so ideal.


Nachtrag:
Ich habe deinen Code mal schnell in eine Klasse integriert.
Vorteil: Keine globalen Variablen.
Nebenvorteil:
Durch den Austausch von eingabe mit testeingabe kannst du auf die Schnelle einen Test machen.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/local/bin/ruby -w

class Sitzung
def initialize()
#Array´s
@pf=[]
@im_freq=[]
end
#Methoden
def intermodulation_1(f1,f2)
@im_freq << f1+f2
@im_freq << f2+f1
@im_freq << f2-f1
end
def eingabe()

puts "Frequenzen eingeben"

while ((i=gets.chomp).downcase!="e")
@pf<<i.to_f
@pf.sort!
end
end

def testeingabe(*args)
args.each{|f| @pf << f.to_f }
end

def ausgabe()
puts "Sie haben folgende Frequenzen eingegeben:"
puts @pf.class
@pf.each do |f|
puts "#{f} MHz"
end

unless @pf.empty?
puts "PF-Array ist noch nicht leer"
f1 = @pf[0]
f2 = @pf[1]
unless f2.nil?
im_freq = intermodulation_1(f1,f2)
@pf.shift
end
end
end
end #Sitzung

sitzung = Sitzung.new
#~ sitzung.eingabe
sitzung.testeingabe(1,3,5,7,8,4,2,9)
sitzung.ausgabe

Beim unless @pf.empty? vermute ich einen Denkfehler. Bin jetzt aber auf die Schnelle auch nicht dahinter gekommen was du genau willst.

_________________
http://ruby.lickert.net/
http://gems.rubypla.net/


Zuletzt geändert von knut am 28 Jul 2010, 21:42, insgesamt 1-mal geändert.
Nachtrag eingefügt


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: leicht Usereingaben in Array schreiben
BeitragVerfasst: 28 Jul 2010, 22:52 
Offline
Geselle

Registriert: 10 Mär 2009, 13:22
Beiträge: 107
ja und wieder habt ihr recht ich hatte meinen Fehler eben bemerkt.
Ich versuche mir ein Script zu schreiben mit dem ich Frequenintermodulationen finden kann.(Funktechnik)
Daher habe ich ein Array mit Zahlen PF=["11","22","33","44","55","66" PF steht hier für Prüffrequenzen]
Diese Zahlen muss ich miteinander verrechnen.

Allerdings gibt es noch ein Problem dass ich lösen muss. Und zwar die Schleifenberechnung
und zwar soll von dem Array PF das Element [0] mit [1] verrechnet werden dann [0] mit [2] bist das Prgramm bei [0] mit [n] angekommen ist. Dann muss es wieder bei dem nächsten Element anfangen also [1] mit [2] und [1] mit [3] bis hinzu [1] mit [n]

Momentan Rechnet mein Programm nur immer die [0] mit [1] , [1] mit [2] , [2] mit [3], bis zu [n-1] mit [n]

Hier ist mein Aktueller Code:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/local/bin/ruby -w
#Array´s
PF=[]
IM_FREQ=[]
#Methoden
def intermodulation_1(f1,f2)
IM_FREQ << (f1+f2).abs
IM_FREQ << (f2+f1).abs
IM_FREQ << (f2-f1).abs
IM_FREQ << (f1-f2).abs
end

def intermodulation_2(f1,f2)
IM_FREQ << (2*f1+f1).abs
IM_FREQ << (2*f1-f2).abs
IM_FREQ << (2*f2+f1).abs
IM_FREQ << (2*f2-f2).abs
end


puts "Frequenzen eingeben"

while ((i=gets.chomp).downcase!="e")
PF<<i.to_f
PF.sort!
end

puts "Sie haben folgende Frequenzen eingegeben:"
puts PF.class
PF.each do |f|
puts "#{f} MHz"
end
puts

while not PF.empty?
#puts "PF-Array ist noch nicht leer"
f1 = PF[0]
f2 = PF[1]
unless f2.nil?
puts "Rechenvorgang gestartet"
intermodulation_1(f1,f2)
intermodulation_2(f1,f2)
end
PF.shift
end
IM_FREQ.uniq!.sort!
puts
puts "Anzahl der berechneten Frequenzen: #{IM_FREQ.length}"

puts "Dies sind die stoerenden Frequenzen: "
IM_FREQ.each do |a|
puts "#{a} MHz"
end


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: leicht Usereingaben in Array schreiben
BeitragVerfasst: 29 Jul 2010, 00:07 
Offline
ri
Benutzeravatar

Registriert: 21 Mai 2007, 11:30
Beiträge: 795
Wohnort: Thüringen
Dafür gibt es die Methode Enumerable#combination (allerdings erst ab 1.87).


1
2
3
4
PF.combination(2) do |f1, f2|
intermodulation_1(f1,f2)
intermodulation_2(f1,f2)
end


Edit: Sry, Schreibfehler. Muss combination, statt combinations heißen.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: leicht Usereingaben in Array schreiben
BeitragVerfasst: 29 Jul 2010, 00:15 
Offline
ri

Registriert: 23 Feb 2004, 14:59
Beiträge: 743
Wohnort: Esslingen
Hier ein kurzes Snipplet, das die Schleifen so macht wie du es möchtest (glaube ich zumindest ;) ):


1
2
3
4
5
6
7
8
9
10
x = [ 1,2,3,4,5,6,7,8,9]

#Schleife über alle, ausser letzte
x[0..-2].each_with_index{| y, i |
#Schleife ab i, bis Ende
x[i+1..-1].each{| z |
puts "#{y} - #{z}"
}
puts '----'
}

Viel Spass beim analysieren des Codes :) Ich geh jetzt schlafen 8)

_________________
http://ruby.lickert.net/
http://gems.rubypla.net/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: leicht Usereingaben in Array schreiben
BeitragVerfasst: 29 Jul 2010, 00:19 
Offline
Geselle

Registriert: 10 Mär 2009, 13:22
Beiträge: 107
ich habe noch die version 1.8.6 kann man die irgendwie mit gem update auf 1.8.7 bringen?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: leicht Usereingaben in Array schreiben
BeitragVerfasst: 29 Jul 2010, 00:22 
Offline
Geselle

Registriert: 10 Mär 2009, 13:22
Beiträge: 107
cool danke das mit de snippel versuche ich gleich mal


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: leicht Usereingaben in Array schreiben
BeitragVerfasst: 29 Jul 2010, 15:47 
Offline
ri
Benutzeravatar

Registriert: 21 Mai 2007, 11:30
Beiträge: 795
Wohnort: Thüringen
Schau dir mal http://rubyinstaller.org/ an. Dort kannst du die jeweiligen Rubyversionen runterladen. 1.86 ist mittlerweile schon etwas in die Jahre gekommen. Ich würde dir daher schon empfehlen auf 1.87 oder gar auf 1.91 umzusteigen. Gegen letzteres spricht allerhöchstens, dass noch nicht alle Gems auf 1.91 laufen.

Wenn du unter Linux oder Mac bist, sollte eh 1.86 veraltet sein und 1.87 als aktuelle Rubyversion vom Paketmanager angeboten werden.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: leicht Usereingaben in Array schreiben
BeitragVerfasst: 29 Jul 2010, 15:53 
Offline
Geselle

Registriert: 10 Mär 2009, 13:22
Beiträge: 107
danke für die Hilfe mein kleines Programm läuft jetzt, denn ich habe mir 1.91 geladen


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: