Non sapevo come rendere l'idea nel titolo, comunque ho realizzato un algoritmo che "traduce" una frase in farfallese, una stupida pseudolingua con cui si giocava alle elementari e che consisteva semplicemente nel raddoppiare le vocali delle parole con la "f". Esempi:
a --> afa
e--->efe
ecc. quindi alcune parole sarebbero:
marmellata --> m AFA rm EFE ll AFA t AFA --> mafarmefellafatafa
casa --> c AFA s AFA --> cafasafa
Una stupidata, ma era per impratichirmi un po'.
Ho scritto l'algoritmo, ma andrebbe decisamente migliorato, poichè si che funziona, ma funziona di merda..... intanto copio il codice.
#include <stdio.h>
#include <string.h>
int main (int argc, const char * argv[]) {
char s1[100];
char s2[100];
int v_inserite =0;
int slittamento;
int i, lenght;
printf("Questo algoritmo codifica nella segreta lingua del Farfallino."
"Per semplicità scrivi tutto in minuscolo.\n"
"Inserisci la frase da criptare\n");
gets(s1); // Per ora non conosco funzioni migliori di gets che prendano anche gli spazi. Lo so che è una merda.
lenght = strlen(s1);
printf("\nHai inserito: %s\n", s1);
printf("Lunghezza: %d\n", lenght);
// Sostituisce le varie vocali tenedo conto dello slittamento di indice nel rapporto trai due vettori dato le "f" inserite in più
for (i=0; i<lenght; i++){
switch (s1[i]) {
case 'a':
slittamento = v_inserite * 2;
s2[i+slittamento] = 'a';
s2[1+i+slittamento] = 'f';
s2[2+i+slittamento] = 'a';
v_inserite ++;
break;
case 'e':
slittamento = v_inserite * 2;
s2[i+slittamento] = 'e';
s2[1+i+slittamento] = 'f';
s2[2+i+slittamento] = 'e';
v_inserite ++;
break;
case 'i':
slittamento = v_inserite * 2;
s2[i+slittamento] = 'i';
s2[1+i+slittamento] = 'f';
s2[2+i+slittamento] = 'i';
v_inserite ++;
break;
case 'o':
slittamento = v_inserite * 2;
s2[i+slittamento] = 'o';
s2[1+i+slittamento] = 'f';
s2[2+i+slittamento] = 'o';
v_inserite ++;
break;
case 'u':
slittamento = v_inserite * 2;
s2[i+slittamento] = 'u';
s2[1+i+slittamento] = 'f';
s2[2+i+slittamento] = 'u';
v_inserite ++;
break;
default:
slittamento = v_inserite * 2;
s2[i+slittamento] = s1[i];
break;
}
}
printf("In Farfallese si pronuncia:\n"
"%s", s2);
// Stampo i valori delle variabili per tenere d'occhio il processo
printf("\nSlittamento: %d", slittamento);
printf("\nVocali: %d", v_inserite);
return 0;
}
Ora prescindendo l'ottimizzazione del codice, che sicuramente può essere scritto meglio per risparmiare memoria ( i 100 caratteri massimi dei vettori ad esempio) e anche codice (tipo quel mega switch forse si riesce a ottimizzare), vorrei che prima funzionasse correttamente.
Se inserisco alcune parole va, altre volte invece avanzano nella stringa delle celle che stampa ma che non sono state regolate, non so perchè avanzino ma risultato stampa un paio di numeri a caso.
Esempio:
ceramica --> ceferafamificafa8\367\377\277r\340\217
però su altre funziona tipo:
finestra -->fifinefestrafa.
Se non erro è perchè stampa troppe celle right?
Qualcuno può darmi una mano a venirne a capo?