PDA

Visualizza la versione completa : [C] 'La codifica di Cesare'


ZioDema2
20-11-2008, 21:40
Buonsera, ho un problemino con il seguente programma (solito prog di allenamento per l'uni)




La codifica crittografica di Cesare consiste nel sostituire ogni carattere con quello che si trova nella k-esima posizione successiva dell’alfabeto. Il numero k rappresenta la chiave (0 < k < 26). Per esempio, con k = 2 : ‘a’ diventa ‘c’, ‘e’ diventa ‘g’, ‘z’ diventa ‘b’. Scrivere un programma che: - Accetti in ingresso una stringa (composta da soli caratteri minuscoli e priva di spazi) e una chiave k (numero intero) - Scriva la versione crittografata della stringa Esempio. Inserire k: 2 Inserire una stringa: ciao Stringa crittografata con k=2: ekcq Inserire k: 4 Inserire una stringa: ciao Stringa crittografata con k=4: gmes

Bene, il programma cosi come è l'ho fatta e sembra funzionare correttamente, però mi voglio complicare poco poco la vita facendo in modo che se venga inserita una 'Z' si ritorni ad 'A' e non passi a simboli con codifica ascii incrementati di K rispetto a Z.
Quindi io voglio che se inserisco una parola e si arrivi a Z con gli incrementi di K, la lettera della parola faccia il "giro" e non vada avanti per simboli ASCII

Avevo provato a fare ciò ma sembri che il programma non entri nel ciclo While...



#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()

{
char parola[30];
int k,d;
int i=0;


//Putting char by char into an array
printf("Inserire parola: ");
scanf("%s",parola);

printf("\n");

//Choosing of K
printf("Inserire il valore K: ");
scanf("%d",&k);

//Codified word
for(d=0; parola[d]!='\0'; d++)
{
while(i<k);
{
if(parola[d]=='z')

parola[d]='a';
else
parola[d]=parola[d]+1;

i++;
}
}

//Showing trasformed word
printf("%s\n",parola);

system("pause");
}


Sono graditi suggerimenti e non soluzioni dirette :) :)

Grazie a tutti per l'attenzione :D

oregon
20-11-2008, 21:45
A 'naso', credo che i debba essere azzerata sempre all'interno del for ... che ne dici?

ZioDema2
20-11-2008, 21:48
Mm sicuramente ciò che mi dici tu è qualcosa che va fatto di sicuro, pero continua a non fungere

oregon
20-11-2008, 21:52
Originariamente inviato da ZioDema2
Mm sicuramente ciò che mi dici tu è qualcosa che va fatto di sicuro, pero continua a non fungere

Quando scrivi in un forum che qualcosa "non funge", non hai detto molto ...

Devi sempre dire, se hai errori, quali errori (codice e descrizione) o, se il programma non fa quello che ti aspetti, descrivere il malfunzionamento ...

ZioDema2
20-11-2008, 21:54
Perdomani hai ragione,
in pratica dopo la richiesta di K, il prog non va piu avanti, non accade assolutamente niente e quindi non mi stampa nemmeno la parola teoricamente modificata.
E come se appunto non entrasse nel 2° ciclo, non riesco proprio a capire perchè non vada :rollo:

oregon
20-11-2008, 21:55
Devi eliminare il ; segnato in rosso in questa riga

while(i<k);

:madai!?:

ZioDema2
20-11-2008, 22:01
Ops, voglio sprofondare :cry:

E' nemmeno 1 mese che ho iniziatp

Grazie per la pazienza oregon

oregon
20-11-2008, 22:09
No problem ... capita ...

menphisx
21-11-2008, 08:15
stringa[i] = 'a' + (stringa[i] + k) % ('z' - 'a')


:)

Loading