Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
27/10/11 14:40
anomalo
Salve a tutti,
con questo codice voglio semplicemente andare a sostituire le lettere di un testo dato con il numero che corrisponde alla loro posizione nell'alfabeto.
Il codice è scritto in Ruby ma la sua sintassi semplice rende la comprensione immediata anche a chi non lo conosce.
array0=["a", "b", "c", "d", "e", "f", "g", "h", "i", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "Z"]
puts "inserisci il testo"
codice=gets.chomp!
ncodice = []
i=0
while
  ncodice.length < codice.length
 
  if codice[i] == array0[0]
    ncodice << 1
  elsif codice[i] == array0[1]
      ncodice << 2
  elsif codice[i] == array0[2]
    ncodice << 3
  else
    ncodice << 4
    i=i+1
end
end
puts ncodice

ho pensato di usare i primi tre elementi solo per vedere se il confronto funzionava e solo dopo volevo andare a rendere variabile anche il numero da inserire in modo da non dover fare un if per ogni lettera, comunque il codice non funziona, se inserisco a b c d invece di 1 2 3 4 mi ridà 4 4 4 4 4 4 4.
Grazie in anticipo.
Ultima modifica effettuata da Il Totem 28/10/11 9:50
aaa
27/10/11 19:59
Poggi Marco
Ciao!
Il programma non funziona perché ogni carattere di codice, va controllato separatamente.
Ti consiglio di far riferimento al codice ASCII.
aaa
28/10/11 9:49
Il Totem
Non so cosa tu abbia inserito, ma l'output per "a b c d" è "1 1 1 1 1 1 1" e non "4 4 4 4 4 4 4". Infatti, quando entri nel while, il primo if è verificato, poiché il primo carattere di codice è "a" e così anche il primo elemento di array0. Quindi esegui l'istruzione ncodice << 1 e passi all'iterazione successiva. Nota bene che NON hai incrementato la variabile contatore i. Perciò, se non esistesse il controllo sulla lunghezza delle stringhe, il tuo codice andrebbe in loop.
Altra cosa: anche se il corpo del while fosse corretto, il programma non funzionerebbe comunque, poiché le lunghezze di ncodice e codice non sono a priori uguali (infatti l viene tradotta in 10, che occupa due caratteri e non uno solo).

Dovresti comunque seguire il consiglio di Marco e usare la codifica ascii:
puts "inserisci il testo"
codice = gets.chomp!
codice.each_char { |c|
    if (c >= "a" and c <= "z")
        print c.ord
    else
        print c
    end
}
aaa