Programma alieno !

di il
2 risposte

Programma alieno !

Ciao !!!
Il programma che devo fare, deve leggere una cifra e come output deve dare la stessa cifra solo cifrata. Cioè nel programma io dovrei inserire questa specie di codice (ad esempio 0=y,1=a, 2=#, ... 8=%, 9=?), che mi è dato e con l'uso di tabelle risolvere il problema. Mi spiego meglio. In pratica l'utente una volta aperto il programma, deve inserire una cifra a suo piacimento (ad esempio 181) e il programma deve dare come output ad esempio a%a. Cerco delucidazioni sopratutto sul come dichiarare le tabelle e cercare i sudetti numeri e il corrispondente codice in esse.

2 Risposte

  • Re: Programma alieno !

    Ciao,
    in pratica devi implementare un cifrario a sostituzione monoalfabetica. Ti basta mettere in un vettore i caratteri relativi la codifica e mapparli in base al codice di ogni lettera della tua stringa. Dato che le lettere dell'alfabeto hanno valori ASCII numerici e continui, ti basta ricavare quel valore e mapparlo nell'array per ricavare la corrispondente lettera codificata.
    Ad es. se la codifica della 'a' è '1' devi fare così:

    1) il vettore dei caratteri codificati conterrà alla posizione 0 il carattere '1'
    2) il valore ASCII della 'a' se ricordo bene è 42
    3) il mapping è semplicemente valore ASCII del carattere - 42 (42 - 42 = 0) che corrisponde alla posizione del carattere cifrato.

  • Re: Programma alieno !

    Il problema può essere risolto in diverse maniere.
    La strada che propongo è di utilizzare un array char statico contenente le codifiche dei tuoi numeri (0..9).
    L'indice dell'array corrisponderà al valore numerico.
    Costruire una funzione di encode nella quale il valore numerico viene scandito dall'operatore modulo e
    memorizzato nel buffer statico di uscita.
    
    ...
    static char table[]={'y','a','#','?','^','$','A','!','r','q'};
    char *encode (int n)
    {
      static char buf[10+1];  // Max 4byte integer
    
      int m,j;
      for (j=10;n;n/=10,j--)
      {
        m=n%10;
        *(buf+j)=table[m];
      }
      return buf+j+1;
    }
    ...
    
    Saluti,
    Max
Devi accedere o registrarti per scrivere nel forum
2 risposte