Salve a tutti.
Mi trovo a combattere con una porzione di codice che devo adoperare per emulare una tipologia di crittografia.
Il codice è chiaramente incompleto a causa della sequenza random che ottengo una volta eseguito il tutto.Vi spiego:codice:#include <stdio.h> #include <time.h> #include <math.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #define MAX 26 #define DIM 300 int chiave[MAX]; FILE* f; char a[DIM]; int i,j,t; char alfabeto[] ={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; int main(int argc,char *argv[]){ chiave[0] = rand()%26+1; for(i=1;i<MAX;i++){ for(j=0;j<i;j++){ t = rand()%26+1; if(chiave[j]!=t && chiave[j]!=chiave[i-j]) chiave[i]=t; } } for(i=0;i<MAX;i++){ printf("Num %d della sequenza CHIAVE: %d\n",i+1,chiave[i]); } f=fopen(argv[1],"rw"); //controllo sull'apertura del file if(f==NULL){ perror("Impossibile aprire il file\n"); exit(1); } if(f){ printf("\n\nTesto in chiaro: "); while(!feof(f)){ fscanf(f,"%s\t",a); printf("%s \n",a); } fclose(f); } }
quello che devo fare è creare una chiave composta da 26 interi (tanti quanti sono i caratteri nell'alfabeto italiano + jkxwy)
il mio problema è che non capisco come poter gestire gli interi ottenuti ad ogni istanza del ciclo for dalla funzione random.perche in pratica io dovrei confrontarli con tutti i valori che ho già memorizzato in chiave[i] fino all'indice dell'istanza corrente.Al momento riesco ad evitare che numeri random vicini uguali non vengano memorizzati. A me servono però 26! permutazioni possibili ottenibili soltanto se il random riesce ad essere gestito affinchè non consenta di memorizzare nessuna "copia" di intero nella chiave[i].
![]()
![]()
![]()
![]()
Una piccola nota. se provate questo codice su riga di comando dovete aggiungere un path di file da aprire es /Desktop/prova.txt

Rispondi quotando