esercizio sulle stringhe - sostituzione caratteri
-
- Prode Principiante
- Messaggi: 44
- Iscrizione: sabato 26 marzo 2016, 16:17
- Desktop: 14.4
- Distribuzione: 14.4
- Sesso: Maschile
esercizio sulle stringhe - sostituzione caratteri
Buongiorno,
Ho un problema con questo esercizio, in pratica, l'esercizio dice che:
Visto che la chiave è un int;
int chiave;
String frase = "abcd"
Ogni lettera sia sostituita del valore contenuto in chiave.
Esempio:
Se chiave = 3;
la lettera a sarà sostituita da d, la lettera b sara sostituita da e, ecc....
Come faccio a ragionare, non riesco, sono giorni che mi spremo...
Mi potete aiutare, non so come posso ragionare???
Ho un problema con questo esercizio, in pratica, l'esercizio dice che:
Visto che la chiave è un int;
int chiave;
String frase = "abcd"
Ogni lettera sia sostituita del valore contenuto in chiave.
Esempio:
Se chiave = 3;
la lettera a sarà sostituita da d, la lettera b sara sostituita da e, ecc....
Come faccio a ragionare, non riesco, sono giorni che mi spremo...
Mi potete aiutare, non so come posso ragionare???
- Claudio_F
- Entusiasta Emergente
- Messaggi: 1463
- Iscrizione: lunedì 28 maggio 2012, 18:49
- Desktop: Mate/Gnome
- Distribuzione: Ubu22.04
Re: esercizio sulle stringhe - sostituzione caratteri
Una stringa è una sequenza di caratteri.
Quindi si può indicizzare un singolo carattere alla volta per conoscerne il valore ordinale (il codice che lo rappresenta).
Si somma la chiave a quel valore.
Si ottiene così un nuovo codice che corrisponderà al nuovo carattere.
Si sostituisce il vecchio carattere col nuovo (o si crea una nuova stringa un carattere alla volta a seconda del linguaggio).
Finito.
Il come farlo dipende dagli strumenti base messi a disposizione dal linguaggio utilizzato, in Python ad esempio basta una sola riga:
In assembly Z80 qualcuna in più ma neanche tante:
In C più o meno così:
GWBASIC
Java non lo conosco...
NOTA IMPORTANTE: la traccia dell'esercizio dovrebbe anche specificare bene cosa fare se carattere+chiave supera 'z', cioè la "rotazione" dei codici dovrebbe avvenire per un insieme circolare ben preciso in cui il primo carattere utilizzabile si considera affiancato a sinistra dall'ultimo.
Quindi si può indicizzare un singolo carattere alla volta per conoscerne il valore ordinale (il codice che lo rappresenta).
Si somma la chiave a quel valore.
Si ottiene così un nuovo codice che corrisponderà al nuovo carattere.
Si sostituisce il vecchio carattere col nuovo (o si crea una nuova stringa un carattere alla volta a seconda del linguaggio).
Finito.
Il come farlo dipende dagli strumenti base messi a disposizione dal linguaggio utilizzato, in Python ad esempio basta una sola riga:
Codice: Seleziona tutto
frase = ''.join(chr(ord(c) + chiave) for c in frase)
Codice: Seleziona tutto
RUOTA LD A,(CHIAVE)
LD D,A
LD HL,FRASE
LOOP LD A,(HL)
AND A
RET Z
ADD A,D
LD (HL),A
INC HL
JP LOOP
Codice: Seleziona tutto
void ruota(char* frase, int chiave)
{
while(*frase) *frase++ += chiave;
}
Codice: Seleziona tutto
500 FOR I=1 TO LEN(FRASE$)
510 MID$(FRASE$, I, 1) = CHR$(ASC(MID$(FRASE$, I, 1)) + CHIAVE)
520 NEXT I
NOTA IMPORTANTE: la traccia dell'esercizio dovrebbe anche specificare bene cosa fare se carattere+chiave supera 'z', cioè la "rotazione" dei codici dovrebbe avvenire per un insieme circolare ben preciso in cui il primo carattere utilizzabile si considera affiancato a sinistra dall'ultimo.
Ultima modifica di Claudio_F il domenica 20 agosto 2017, 11:57, modificato 1 volta in totale.
-
- Prode Principiante
- Messaggi: 44
- Iscrizione: sabato 26 marzo 2016, 16:17
- Desktop: 14.4
- Distribuzione: 14.4
- Sesso: Maschile
Re: esercizio sulle stringhe - sostituzione caratteri
Grazie, adesso provo.
Io utlizzo il linguaggio Java.
Vorrei capire in C, alcune cose:
Lei, ha scritto:
void ruota(char* frase, int chiave)
{
while(*frase) *frase++ += chiave;
}
In pratica se ho capito bene, questa funzione.
Hai dichiarato due parametri, char frase e int chiave.
hai fatto un ciclo while, ma nella codizione hai passato solo Frase, senza specificare una condizione.
dopo incrementi frase++
e dopo fai la somma con frase = frase + chiave.
Per piacere mi puoi correggere se ho sbagliato ad interpretare??? che lo devo tradurre in Java
Io utlizzo il linguaggio Java.
Vorrei capire in C, alcune cose:
Lei, ha scritto:
void ruota(char* frase, int chiave)
{
while(*frase) *frase++ += chiave;
}
In pratica se ho capito bene, questa funzione.
Hai dichiarato due parametri, char frase e int chiave.
hai fatto un ciclo while, ma nella codizione hai passato solo Frase, senza specificare una condizione.
dopo incrementi frase++
e dopo fai la somma con frase = frase + chiave.
Per piacere mi puoi correggere se ho sbagliato ad interpretare??? che lo devo tradurre in Java
- Claudio_F
- Entusiasta Emergente
- Messaggi: 1463
- Iscrizione: lunedì 28 maggio 2012, 18:49
- Desktop: Mate/Gnome
- Distribuzione: Ubu22.04
Re: esercizio sulle stringhe - sostituzione caratteri
Tradurre letteralmente in un altro linguaggio potrebbe non essere la scelta migliore, nel senso che ogni linguaggio ha strumenti specifici per implementare un certo algoritmo, e in Java potrebbe esserci un modo diverso da tutti gli esempi presentati (che comunque applicano lo stesso principio descritto a voce all'inizio).
Tornando al C, i parametri della funzione sono un puntatore a char e un intero.
Si poteva anche scrivere:perché una stringa C (array di char) viene sempre passata per riferimento.
Il while testa la "booleanità" di quanto specificato tra parentesi, in particolare continua a ciclare finché i caratteri puntati da 'frase' sono diversi dal valore binario zero (le stringhe C sono null terminated). Un valore zero è considerato falso e il ciclo termina. È come scrivere:
Poi sommo al carattere puntato il valore di chiave, ed infine incremento il puntatore.
Il ++ finale viene applicato dopo l'utilizzo del puntatore stesso, è un post incremento, come scrivere:
Tornando al C, i parametri della funzione sono un puntatore a char e un intero.
Si poteva anche scrivere:
Codice: Seleziona tutto
char frase[]
Il while testa la "booleanità" di quanto specificato tra parentesi, in particolare continua a ciclare finché i caratteri puntati da 'frase' sono diversi dal valore binario zero (le stringhe C sono null terminated). Un valore zero è considerato falso e il ciclo termina. È come scrivere:
Codice: Seleziona tutto
while(*frase != 0)
Il ++ finale viene applicato dopo l'utilizzo del puntatore stesso, è un post incremento, come scrivere:
Codice: Seleziona tutto
{ *frase += chiave; frase++; }
-
- Prode Principiante
- Messaggi: 44
- Iscrizione: sabato 26 marzo 2016, 16:17
- Desktop: 14.4
- Distribuzione: 14.4
- Sesso: Maschile
Re: esercizio sulle stringhe - sostituzione caratteri
ok, grazie.
Adesso provo a convertire da C a java
Adesso provo a convertire da C a java
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 10 ospiti