Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Ruby - comparazione array
Forum - Ruby - comparazione array

Avatar
anomalo (Normal User)
Newbie


Messaggi: 14
Iscritto: 05/06/2011

Segnala al moderatore
Postato alle 16:40
Giovedì, 27/10/2011
Questo topic è stato chiuso dal moderatore

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.
Codice sorgente - presumibilmente Ruby

  1. 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"]
  2. puts "inserisci il testo"
  3. codice=gets.chomp!
  4. ncodice = []
  5. i=0
  6. while
  7.   ncodice.length < codice.length
  8.  
  9.   if codice[i] == array0[0]
  10.     ncodice << 1
  11.   elsif codice[i] == array0[1]
  12.       ncodice << 2
  13.   elsif codice[i] == array0[2]
  14.     ncodice << 3
  15.   else
  16.     ncodice << 4
  17.     i=i+1
  18. end
  19. end
  20. 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 il 28/10/2011 alle 11:50
PM
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 21:59
Giovedì, 27/10/2011
Ciao!
Il programma non funziona perché ogni carattere di codice, va controllato separatamente.
Ti consiglio di far riferimento al codice ASCII.

Faccio presente che mi sono scordato di convertire codice in un array comunque non gira ugale ma usando il tuo suggerimento va, potresti dirmi il motivo? , e per far riferimento al ASCII intendi di convertire il codice in appunto ASCII? - anomalo - 28/10/11 11:55
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
1
Down
V
Segnala al moderatore
Postato alle 11:49
Venerdì, 28/10/2011
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:
Codice sorgente - presumibilmente Python

  1. puts "inserisci il testo"
  2. codice = gets.chomp!
  3. codice.each_char { |c|
  4.     if (c >= "a" and c <= "z")
  5.         print c.ord
  6.     else
  7.         print c
  8.     end
  9. }


Ok grazie mille per i vostri consigli ragazzi ho usato le modifiche che mi avete consigliato - anomalo - 28/10/11 18:15
PM