IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Sos mon programme ne marche pas


Sujet :

C

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Par défaut
    justement c'est pas moi qui a conçu le programme (lire suite )

  2. #22
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par monalisa_dulouvre
    justement c'est pas moi qui a conçu le programme (lire suite )
    C'est pas moi non plus... Tu travailles sans doc ? Ce n'est pas sérieux...

  3. #23
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par monalisa_dulouvre
    justement c'est pas moi qui a conçu le programme (lire suite )
    Ta capture d'écran indique que les paramètres de ton appli sont incorrects.
    Il faut lui passer un nom de fichier, et une clé.

  4. #24
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Par défaut
    je programme mais en java, en C je ne connait pas grand chose, si ce n'ai qu'il ressemble a java ,
    mais pour repondre a ta question ce programme aetais codé par mon binom qui est partie en vaccance et moi je doit compiler ce programme pour le soumettre au prof,
    l'algorithme c'est moi qu'il la conçu

  5. #25
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 123
    Par défaut
    et ben ce qui arrive quand on commence à programmer en java et qu'on passe enuite en C, on fait du kaka...(désolé j'attrape des boutons dès qu'on me parle du java... ) rien de tel que le C pour apprendre...enfin bref!

    Chez moi, sous Windows et avec Dev-C++, ça compile, il y a pas d'erreur et quand je l'execute, ça marche pour l'encodage mais par contre il y a une merde au niveau du décodage....

    il me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERROR remaning temporary file <tempfile.õnc
    Data is safely processed and stored is that file

  6. #26
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par jeremy13
    et ben ce qui arrive quand on commence à programmer en java et qu'on passe enuite en C, on fait du kaka...(désolé j'attrape des boutons dès qu'on me parle du java... ) rien de tel que le C pour apprendre...enfin bref!
    [/CODE]
    Je t'assure, c'est possible d'écrire du code propre, qui compile, et qui résoud un problème avec élégance, même lorsqu'on apprend avec Java ou Python. C est un langage pointu, car plein de subtilités. Mais je ne sais pas s'il y a une réelle relation de cause à effet entre la qualité du code et le premier langage utilisé lors de l'apprentissage... Je crois que cela dépend plutôt du temps que l'on passe et du soin que l'on apporte aux phases de spécification et de conception préliminaires au codage.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  7. #27
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Par défaut
    ok je suis entierement ok mais ce programme ce n'est pas moi qu'il la fait, c'est mon binome qui est partie en vaccance
    mais comme je doit avancer alors je suis entraine de refaire tous le programme a ma façon voici ce que je suis entraine de faire tu comprendra mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
     
    /* le debut du programme de cruptage*/
    int main (void)	{
        do  {
        	initialisation();
            ouverture_des_fichiers();
            choix_crypt();
            fermeture_des_fichiers();
            recommencer();
            }while (choix == 'o');
        }
     
     
    /* mettre tous les paramettre a zero pour s'assurer que le programme point 
    les fichiers qu'on veut crypter avec la cle qu'on va introduire*/
    void initialisation(void)
        {
        char curl;
    	for (curl=0;curl<MAX_CARAC;curl++)
            {
        	nom_fichier_a_lire[curl] = 0;
            nom_fichier_a_ecrire[curl] = 0;
            password[curl] = 0;
            }
        lettre = 0;
        probleme_ouverture = 0;
        system ("CLS");
    	}
    /* ouverture de fichire et verification du contenu du fichier a crypter puis on rajoute l'extention .txt*/
    void ouverture_des_fichiers (void)
        {
    	printf("Saisissez le nom du fichier %c lire : ",133);
    	scanf ("%40s",nom_fichier_a_lire);
    	printf("\n\nSaisissez le nom du fichier o%c il faut %ccrire : ",151,130);
    	scanf ("%40s",nom_fichier_a_ecrire);
     
        rajout_extension(nom_fichier_a_lire);
        rajout_extension(nom_fichier_a_ecrire);
     
    	fichier_a_lire = fopen (nom_fichier_a_lire,"rt");
        if (fichier_a_lire == NULL)
            {
            printf ("\n\nProbl%cme d'ouverture du fichier a lire",138);
            probleme_ouverture = 1;
            }
        else
            {
        	fichier_a_ecrire = fopen (nom_fichier_a_ecrire,"wt");
            if (fichier_a_ecrire == NULL)
                {
                printf ("\n\nProbl%cme d'ouverture du fichier o%c il faut %ccrire",151,130);
                probleme_ouverture = 1;
                }
            }
    	}
    /* permet de rajouter l'extention .txt du nom de fichier introduit en paramettre (entrée, sortie)*/
    void rajout_extension (unsigned char nom_fichier[MAX_CARAC])
        {
        char curl,extension = 0;
    	for (curl=0;curl<MAX_CARAC;curl++)
            {
    		if (nom_fichier[curl] == 0 && extension == 0)
                {
    			extension = 1;
                nom_fichier[curl]  = '.';       nom_fichier[curl+1] = 't';
                nom_fichier[curl+2]= 'x';       nom_fichier[curl+3] = 't';
    			}
            }
        }
     
    /* permet de faire le chois de crypter ou decrypter*/
    void choix_crypt (void)
        {
        if (probleme_ouverture == 0)
            {
            printf ("\n\nVoulez vous effectuer un cryptage ou un d%ccryptage (c/d) : ",130);
     
            do  {
                choix = getch();
                rewind (stdin);
                }while(choix != 'c' && choix != 'd');
            printf ("%c",choix);
     
            saisie_de_cle();
     
            if (choix == 'c')
                cryptage();
            if (choix == 'd')
                decryptage();
            }
        }
     
    /* saisire la cle de cryptage*/
    void saisie_de_cle (void)
        {
        char curl;
        printf ("\n\n\nsaisissez la cle de cryptage : ");
        fgets(cle, sizeof cle, stdin);
    	size_cle = strlen(cle);
        for (curl=0;curl<size_cle;curl++)
            cle[curl] = 255 - cle[curl];
        }
     
    /*saisie des caracteres dans le tableau XX (16 bits dans chaque case)*/
    void saisie_du_caractere(void)
    	{
    		int x;
    		unsigned XX[4],TMP[8];
    		for(x=1;x<=8;x++) tmp[x]=fgetc(fichier_a_lire);
    	XX[1]=tmp[1]&tmp[2];XX[2]=tmp[3]&tmp[4];XX[3]=tmp[5]&tmp[6];XX[4]=tmp[7]&tmp[8];
    	fin_fichier = tmp[8];
        }
     
    /*ecriture du code sur le fichier de sortie*/
    void ecriture_du_code (void)
        {
        char curl;
        for (curl=0;curl<TRAME;curl++)
        	fprintf(fichier_a_ecrire,"%d",OUT[curl]);
        }
     
    /* permet de crypter les données qui se trouve dans le fichier txt inseret dans les parametres*/
    void cryptage (void)
        {
        do  {
            saisie_du_caractere();
    		if (fin_fichier != 255)/* indique la fin de fichier*/
                {
                codage(XX[5],YY[5],Z[7][10]);
                ecriture_du_code();
                }
            }while(fin_fichier != 255);
        }
     
    /* générer les sous-cles */
    void cle(short unsigned uscle[9], unsigned Z[7][10]) 
    {
    	short unsigned S[54];
    	int i,j,r;
    	for(i=1;i<9;i++) S[i-1]=uscle[i];
     
    	for(i=8;i<54;i++)
    		{
    			if((i+2)%8 == 0)			/* pour S[14],S[22],... */
    				S[i] = ((S[i-7]<<9) ^ (S[i-14]>>7)) & one;
    			else if((i+1)%8==0)			/* pour S[15],S[23],... */
    				S[i] = ((S[i-15]<<9) ^ (S[i-14]>>7)) & one;
    			else
    				S[i] = ((S[i-7]<<9) ^ (S[i-6]>>7)) & one;
    		}
     
    	/* enregister les sous-cles dans Z[][]*/
     
    	for(r=1;r<=etape+1;r++) 
    	 for(j=1;j<7;j++)
    		Z[j][r]=S[6*(r-1)+j-1];
    }
     
    /* fonction de cryptage sur un bloc de 64 bits avec une cle de 128 bits*/
    void codage(unsigned IN[5],unsigned OUT[5],unsigned Z[7][10]) 
    {
    	unsigned r,x1,x2,x3,x4,kk,t1,t2,a;
    	x1=IN[1]; x2=IN[2]; x3=IN[3]; x4=IN[4];
    	for(r=1;r<=8;r++) 			/* les etapes */
    	{
    			/* le groupe d'operation effectuer sur le bloc de 64bits */
    	x1 = mul(x1,Z[1][r]);		x4 = mul(x4,Z[4][r]);
    	x2 = (x2 + Z[2][r]) & one;	x3 = (x3 + Z[3][r]) & one;
     
    	kk = mul(Z[5][r],(x1^x3));
    	t1 = mul(Z[6][r],(kk+(x2^x4)) & one);
    	t2 = (kk+t1) & one;
    			/* la permutation */
    	x1 = x1^t1;		x4=x4^t2;
    	a  = x2^t2;		x2=x3^t1;	x3=a;
     
    /* le tableau de sortie du bloc de 64bits crypter */
    	OUT[1] = mul(x1,Z[1][etape+1]);
    	OUT[4] = mul(x4,Z[4][etape+1]);
    	OUT[2] = (x3+Z[2][etape+1]) & one;
    	OUT[3] = (x2+Z[3][etape+1]) & one;
    }
    /* la fonction de multiplication modulo 2^16+1*/
    unsigned mul(unsigned a,unsigned b) 
    {
    	long int p;
    	long unsigned q;
    		if(a==0) p=maxim-b;
    		else
    		if(b==0) p=maxim-a;
    		else {
    		q=(unsigned long)a*(unsigned long)b;
    		p=(q & one) - (q>>16); 
    		if(p<=0) p=p+maxim;
    		}
    	return (unsigned)(p&one);
    }

  8. #28
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 123
    Par défaut
    Citation Envoyé par mujigka
    Je t'assure, c'est possible d'écrire du code propre, qui compile, et qui résoud un problème avec élégance, même lorsqu'on apprend avec Java ou Python. C est un langage pointu, car plein de subtilités. Mais je ne sais pas s'il y a une réelle relation de cause à effet entre la qualité du code et le premier langage utilisé lors de l'apprentissage... Je crois que cela dépend plutôt du temps que l'on passe et du soin que l'on apporte aux phases de spécification et de conception préliminaires au codage.

    Thierry

    Je suis d'accord sur le fair qu'on peut faire du code propre avec n'importe quel language mais en utilisant le C comme langage d'apprentissage, on ne prend pas de mauvaises habitudes et on fait plus attention à certaines choses (allocation de la mémoire, passage du bon type de paramètre à une fonction....).....

  9. #29
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 123
    Par défaut
    c'est dommage d'avoir abandonner l'idée des passages d'arguments, c'était une bonne idée, propre et rapide à executer....

    Sinon tu as choisi la bonne solution de tout refaire, je te souhaite bon courage et une bonne nuit.... ....désolé si j'me moque mais hier j'ai fait ça jusque 1h du mat' donc chacun son tour....

    ++

  10. #30
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Par défaut
    bonjour a tous ,
    pour l'ecriture ça change rien qu'il soit enregistrer en chiffre ou caractéres (puisque la fonction de lecture récupére le fichier et peut faire la lecture des chiffres)mais j'ai changer les trois arguments, et j'ai mis 2 arguments
    aprés les modifs ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    #include "idea.h"
     
    /*debut du programme IDEA*/
    int main (void)
    	{
        do  {
        	initialisation();
            ouverture_des_fichiers();
            choix_crypt();
            fermeture_des_fichiers();
            recommencer();
            }
    	while (choix == 'o');
        }
     
     
    /* mettre tous les paramettre a zero pour s'assurer que le programme point 
    les fichiers qu'on veut crypter avec la cle qu'on va introduire*/
    void initialisation(void)
        {
        char curl;
    	for (curl=0;curl<MAX_CARAC;curl++)
            {
        	nom_fichier_a_lire[curl] = 0;
            nom_fichier_a_ecrire[curl] = 0;
            cle[curl] = 0;
            }
        lettre = 0;
        probleme_ouverture = 0;
        system ("CLS");
    	}
     
    /* ouverture de fichire et verification du contenu du fichier a crypter puis on rajoute l'extention .txt*/
    void ouverture_des_fichiers (void)
        {
    	printf("/**************************************************************************/");
    	printf("****************************************************************************");
     
    	printf("Saisissez le nom du fichier %c lire : ",133);
    	scanf ("%40s",nom_fichier_a_lire);
    	printf("\n\nSaisissez le nom du fichier o%c il faut %ccrire : ",151,130);
    	scanf ("%40s",nom_fichier_a_ecrire);
     
        rajout_extension(nom_fichier_a_lire);
        rajout_extension(nom_fichier_a_ecrire);
     
    	fichier_a_lire = fopen (nom_fichier_a_lire,"rt");
        if (fichier_a_lire == NULL)
            {
            printf ("\n\nProbl%cme d'ouverture du fichier a lire",138);
            probleme_ouverture = 1;
            }
        else
            {
        	fichier_a_ecrire = fopen (nom_fichier_a_ecrire,"wt");
            if (fichier_a_ecrire == NULL)
                {
                printf ("\n\nProbl%cme d'ouverture du fichier o%c il faut %ccrire",151,130);
                probleme_ouverture = 1;
                }
            }
    	}
     
    /* permet de rajouter l'extention .txt du nom de fichier introduit en paramettre (entrée, sortie)*/
    void rajout_extension (unsigned char nom_fichier[MAX_CARAC])
        {
        char curl,extension = 0;
    	for (curl=0;curl<MAX_CARAC;curl++)
            {
    		if (nom_fichier[curl] == 0 && extension == 0)
                {
    			extension = 1;
                nom_fichier[curl]  = '.';       nom_fichier[curl+1] = 't';
                nom_fichier[curl+2]= 'x';       nom_fichier[curl+3] = 't';
    			}
            }
        }
     
    /* permet de faire le chois de crypter ou decrypter*/
    void choix_crypt (void)
        {
        if (probleme_ouverture == 0)
            {
            printf ("\n\nVoulez vous effectuer un cryptage ou un d%ccryptage (c/d) : ",130);
     
            do  {
                choix = getch();
                rewind (stdin);
                }while(choix != 'c' && choix != 'd');
            printf ("%c",choix);
     
            saisie_de_cle();
     
            if (choix == 'c')
                cryptage();
            if (choix == 'd')
                decryptage();
            }
        }
     
    /*saisie des caracteres depuis le fichier source, dans le tableau XX (16 bits dans chaque case)*/
    void saisie_du_caractere(void)
    {
        int i; 
        unsigned XX[4];
        unsigned tmp[8];
        for(i = 0; i < 8; ++i)  /* ecriture sur un tableau temporaire */
        {
            tmp[i]=fgetc(fichier_a_lire);
        }
     
        for (i = 0; i < 4; ++i)
        {
            XX[i] = tmp[2*i] & tmp[2*i+1];
        }
    }
     
    /*ecriture du code sur le fichier de sortie*/
    void ecriture_du_code (unsigned OUT[4])
        {
        char curl;
        for (curl=0;curl<4;curl++)
        	fputc(fichier_a_ecrire,OUT[curl]);
        }
     
    /* permet de crypter les données qui se trouve dans le fichier txt inseret dans les parametres*/
    void cryptage (void)
        {
        do  {
            saisie_du_caractere();
    		if (fin_fichier != 255)/* indique la fin de fichier*/
                {
                codage(XX[4],YY[4],Z[7][10]);
                ecriture_du_code(YY[4]);
                }
            }while(fin_fichier != 255);
        }
     
    /* saisire la cle de cryptage*/
    void saisie_de_cle (void)
        {
        char curl;
        printf ("\n\n\nsaisissez la cle de cryptage : (ne depasse pas 16 caractere)");
        fgets(cle, sizeof cle, stdin);
    	size_cle = strlen(cle);
        for (curl=0;curl<size_cle;curl++)
            cle[curl] = 255 - cle[curl];
        }
     
    /* générer les sous-cles depuis une cle de 128 bits*/
    void cle(unsigned Z[7][10]) 
    	{
    	short unsigned S[54];
    	int i,j,r;
    	for(i=1;i<9;i++) S[i-1]=cle[i];
     
    	for(i=8;i<54;i++)
    		{
    			if((i+2)%8 == 0)			/* pour S[14],S[22],... */
    				S[i] = ((S[i-7]<<9) ^ (S[i-14]>>7)) & one;
    			else if((i+1)%8==0)			/* pour S[15],S[23],... */
    				S[i] = ((S[i-15]<<9) ^ (S[i-14]>>7)) & one;
    			else
    				S[i] = ((S[i-7]<<9) ^ (S[i-6]>>7)) & one;
    		}
     
    	/* enregister les sous-cles */
     
    	for(r=1;r<=etape+1;r++) 
    	 for(j=1;j<7;j++)
    		Z[j][r]=S[6*(r-1)+j-1];
    	}
     
    /* fonction de cryptage sur un bloc de 64 bits avec les sous-cles Z generer*/
    void codage(unsigned IN[4],unsigned OUT[5],unsigned Z[6][10]) 
    	{
    	unsigned r,x1,x2,x3,x4,kk,t1,t2,a;
    	x1=IN[0]; x2=IN[1]; x3=IN[2]; x4=IN[3];
    	for(r=0;r<8;r++) 			/* les etapes */
    	{
    			/* le groupe d'operation effectuer sur le bloc de 64bits */
    	x1 = mul(x1,Z[0][r]);		x4 = mul(x4,Z[3][r]);
    	x2 = (x2 + Z[1][r]) & one;	x3 = (x3 + Z[2][r]) & one;
     
    	kk = mul(Z[4][r],(x1^x3));
    	t1 = mul(Z[5][r],(kk+(x2^x4)) & one);
    	t2 = (kk+t1) & one;
    			/* la permutation */
    	x1 = x1^t1;		x4=x4^t2;
    	a  = x2^t2;		x2=x3^t1;	x3=a;
    	}
     
    /* le tableau de sortie du bloc de 64bits crypter */
    	OUT[0] = mul(x1,Z[1][etape+1]);
    	OUT[3] = mul(x4,Z[4][etape+1]);
    	OUT[1] = (x3+Z[1][etape+1]) & one;
    	OUT[2] = (x2+Z[2][etape+1]) & one;
    	}
     
    /* la fonction de multiplication modulo 2^16+1*/
    unsigned mul(unsigned a,unsigned b) 
    	{
    	long int p;
    	long unsigned q;
    	if(a==0) p=maxim-b;
    		else
    			if(b==0) p=maxim-a;
    			else 
    			{
    				q=(unsigned long)a*(unsigned long)b;
    				p=(q & one) - (q>>16); 
    				if(p<=0) p=p+maxim;
    			}	
    	return (unsigned)(p&one);
    	}
     
    /* 	Cette fonction calcule l'inverse avec l'algorithme de Euclide le plus grand commun diviseur PGCD*/
    unsigned inv(unsigned xin)
    	{
    	long n1,n2,q,r,b1,b2,t;
    	if(xin==0) b2=0;
    	else
    	{ 
    		n1=maxim; n2=xin; b2=1; b1=0;
    		do 
    		{ 
    			r = (n1 % n2); q = (n1-r)/n2;
    			if(r==0) 
    			{ 
    				if(b2<0) b2=maxim+b2; 
    			}
    			else 
    			{ 
    				n1=n2; n2=r; t=b2; b2=b1-q*b2; b1=t; 
    			}
    		} 
    		while (r!=0);
    	}
    	return (unsigned)b2;
    }
     
    /*permet de fermer le fichier*/
    void fermeture_des_fichiers (void)
        {
        if (probleme_ouverture == 0)
            {
            fclose (fichier_a_lire);
            fclose (fichier_a_ecrire);
            }
        }
     
    /*fonction qui permet le decryptage*/
    void decryptage (void)
        {
        do  {
            saisie_de_cle();
            if (fin_fichier != 255)
                {
                codage(YY,TT,DK);
                }
            }while(fin_fichier != 255);
        }
    void de_cle(unsigned Z[7][10],unsigned DK[7][10])
    {
    	int j;
    	for(j=1;j<=etape+1;j++)
    	{
    		DK[1][etape-j+2] = inv(Z[1][j]);
    		DK[4][etape-j+2] = inv(Z[4][j]);
     
    		if (j==1 || j==etape+1) {
    			DK[2][etape-j+2] = (fuyi-Z[2][j]) & one;
    			DK[3][etape-j+2] = (fuyi-Z[3][j]) & one;
    		} else {
    			DK[2][etape-j+2] = (fuyi-Z[3][j]) & one;
    			DK[3][etape-j+2] = (fuyi-Z[2][j]) & one;
    		}
    	}
     
    	for(j=1;j<=etape+1;j++)
    	{ DK[5][etape+1-j]=Z[5][j];
    	  DK[6][etape+1-j]=Z[6][j];
    	}
    }
    /*recommencer le programme*/
    void recommencer (void)
        {
        printf ("\n\nVoulez vous r%ceffectuer un cryptage ou un d%ccryptage (o/n) : ",130,130);
        do  {
            choix = getch();
            }while(choix != 'o' && choix != 'n');
        }
    mais les erreurs de compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    .\idea.cpp(34) : error C2109: un indice requiert un type tableau ou pointeur
    .\idea.cpp(38) : error C3861: 'system' : identificateur introuvable
    .\idea.cpp(61) : error C2664: 'fopen' : impossible de convertir le paramètre 1 de 'unsigned char [40]' en 'const char *'
            Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    .\idea.cpp(69) : error C2664: 'fopen' : impossible de convertir le paramètre 1 de 'unsigned char [40]' en 'const char *'
            Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    .\idea.cpp(101) : error C3861: 'getch' : identificateur introuvable
    .\idea.cpp(137) : error C2664: 'fputc' : impossible de convertir le paramètre 1 de 'FILE *' en 'int'
            Aucun contexte dans lequel cette conversion est possible
    .\idea.cpp(147) : error C2664: 'codage' : impossible de convertir le paramètre 1 de 'unsigned int' en 'unsigned int []'
            La conversion d'un type intégral en type pointeur nécessite reinterpret_cast, un cast de style C ou un cast de style fonction
    .\idea.cpp(148) : error C2664: 'ecriture_du_code' : impossible de convertir le paramètre 1 de 'unsigned int' en 'unsigned int []'
            La conversion d'un type intégral en type pointeur nécessite reinterpret_cast, un cast de style C ou un cast de style fonction
    .\idea.cpp(158) : error C2070: 'overloaded-function' : opérande sizeof non conforme
    .\idea.cpp(158) : error C2664: 'fgets' : impossible de convertir le paramètre 1 de 'void (__cdecl *)(unsigned int [][10])' en 'char *'
            Aucun contexte dans lequel cette conversion est possible
    .\idea.cpp(159) : error C3861: 'strlen' : identificateur introuvable
    .\idea.cpp(161) : error C2109: un indice requiert un type tableau ou pointeur
    .\idea.cpp(161) : error C2109: un indice requiert un type tableau ou pointeur
    .\idea.cpp(169) : error C2109: un indice requiert un type tableau ou pointeur
    .\idea.cpp(304) : error C3861: 'getch' : identificateur introuvable
    je l'ai compiler avec microsoft visuel C++

  11. #31
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 123
    Par défaut
    ça c'est du code qui a été écrit sous dev-C++ et que tu essaye de compiler sous Visual C++ : plusieurs indice te trahit.... c'est pas bieeennn!!

  12. #32
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par jeremy13
    ça c'est du code qui a été écrit sous dev-C++ et que tu essaye de compiler sous Visual C++ : plusieurs indice te trahit.... c'est pas bieeennn!!
    En principe, il ne doit pas avoir de problèmes à faire cela du moment que c'est du C standard. Il peut éventuellement y avoir quelques soucis au moment de l'édition des liens si certains fichiers ont été compilés avec minGW, le compilateur utilisé par défaut par dev-C++ ou codeblocks, et d'autres avec le compilateur de microsoft.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  13. #33
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Par défaut
    c'est pas une surprise que j'ai utiliser un code pour faire ce programme mais je suis obliger
    bref j'ai installer DEV-C++
    et voila ce qu'il donne comme erreur après compilation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Compilateur: Default compiler
    Exécution de  gcc.exe...
    gcc.exe 
    "\idea.c" -o "\idea.exe"    -I"C:\Dev-Cpp\include"   -L"C:\Dev-Cpp\lib" 
    \idea.c: In function `initialisation':
    \idea.c:34: error: subscripted value is neither array nor pointer
     
    \idea.c: In function `ecriture_du_code':
    \idea.c:137: warning: passing arg 1 of `fputc' makes integer from pointer without a cast
    \idea.c:137: warning: passing arg 2 of `fputc' makes pointer from integer without a cast
    \idea.c: In function `cryptage':
    \idea.c:147: warning: passing arg 1 of `codage' makes pointer from integer without a cast
    \idea.c:147: warning: passing arg 2 of `codage' makes pointer from integer without a cast
    \idea.c:147: warning: passing arg 3 of `codage' makes pointer from integer without a cast
    \idea.c:148: warning: passing arg 1 of `ecriture_du_code' makes pointer from integer without a cast
     
    \idea.c: In function `saisie_de_cle':
    \idea.c:158: warning: passing arg 1 of `fgets' from incompatible pointer type
    \idea.c:159: warning: passing arg 1 of `strlen' from incompatible pointer type
    \idea.c:161: error: subscripted value is neither array nor pointer
    \idea.c:161: error: subscripted value is neither array nor pointer
    \idea.c: In function `cle':
    \idea.c:169: error: subscripted value is neither array nor pointer
    Exécution terminée

  14. #34
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Ce n'est pas humain de demander à un compilateur de compiler ce code .
    Il est infernal avec ses variables globales (et il y en a un paquet) dont on n'a même pas la déclaration (sont-elles cachées dans le .h pour faire bonne mesure ?)
    Le compilateur (méritant et dévoué) fournit au moins des messages clairs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \idea.c:34: error: subscripted value is neither array nor pointer
    il s'agit apparemment de cle qui n'est pas un tableau ou un pointeur. C'est quoi ? l'identificateur d'une fonction semble t-il !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    \idea.c:137: warning: passing arg 1 of `fputc' makes integer from pointer without a cast
    \idea.c:137: warning: passing arg 2 of `fputc' makes pointer from integer without a cast
    indique que les paramètres de fputc sont faux. Un simple coup d'oeil à la documentation de fputc montre que l'ordre des paramètres est probablement inversé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        char curl;
        for (curl=0;curl<4;curl++)
        	fputc(fichier_a_ecrire,OUT[curl]);
    ....
    De toute façon, corriger les erreurs de compilation ne fera pas de ce programme quelque chose de valable : il faut le réécrire de façon plus stricte et plus sérieuse.
    1- supprimer les variables globales
    2- utiliser des fonctions qui ne sont pas des void f(void) : leur fournir les paramètres dont elles ont besoin pour travailler
    3-...
    et ça ira mieux

  15. #35
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Par défaut
    ok j'ai suivi vos conseils j'ai supprimer les variable globale inutile et je suis entraine de de le refaire mais j'ai eu un probleme avec cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    char saisie_de_cle (void)
    {
        int i;
        char *c;
        int max_cle=17;
        printf ("\n\n\nsaisissez la cle de cryptage (ne depasse pas 16caractere):");
        fgets(c,max_cle,stdin);
        return c;
    }
    aprés avoir compiler j'ai eu droit a cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    \idea.c: In function `saisie_de_cle':
    \idea.c:125: error: syntax error before ';' token
    qq1 peut m'expliquer ce que veux dire cette erreur?

  16. #36
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Bonjour,

    Je n'obtiens pas cette erreur avec ton code par contre j'obtiens ceci :

    test.c: In function ‘saisie_de_cle’:
    test.c:10: warning: return makes integer from pointer without a cast
    test.c:5: warning: unused variable ‘i’
    test.c:9: warning: ‘c’ is used uninitialized in this function
    La première et la dernière sont graves :
    - Tu retournes un pointeur mais le prototype dit que c'est un caractére normal
    - Tu n'alloues pas d'espace pour l'appel de fgets

    Jc

  17. #37
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Par défaut
    ok j'ai compris,
    mais comment je doit faire pour regler ce probleme?

  18. #38
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par monalisa_dulouvre
    ok j'ai compris,
    mais comment je doit faire pour regler ce probleme?
    Il faut définir un tableau de char d'une taille suffisante, ou allouer celui-ci et stocker son adresse dans le pointeur.

  19. #39
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Par défaut
    j'ai regler le probleme mais j'ai eu un autre au quelle je comprend pas comment faire voila le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    /* permet de crypter les données qui se trouve dans le fichier txt inseret dans les parametres*/
    void cryptage (void)
    {
         unsigned TT[4];
        do  {
            TT[4]= saisie_du_caractere(fichier_a_ecrire);
    		if (fin_fichier != 255)/* indique la fin de fichier*/
                {
                ecriture_du_code(codage(TT[4],Z[7][10]));
                }
            }
            while(fin_fichier != 255);
    }
    /*saisie des caracteres depuis le fichier source, dans le tableau XX (16 bits dans chaque case)*/
    unsigned saisie_du_caractere(FILE *fds)
        {
        unsigned XX[4];
        int i; 
        unsigned tmp[8];
        for(i = 0; i < 8; ++i)  /* ecriture sur un tableau temporaire */
        {
            tmp[i]=fgetc(fds);
        }
        for (i = 0; i < 4; ++i)
        {
            XX[i] = tmp[2*i] & tmp[2*i+1];
        }
        return XX[4];
    }
     
    /*ecriture du code sur le fichier de sortie*/
    void ecriture_du_code (unsigned OUT[4])
    {
        int i;
        for (i=0;i<4;i++)
        	fputc(OUT[i],fichier_a_ecrire);
    }
    /* fonction de cryptage sur un bloc de 64 bits avec les sous-cles Z generer*/
    unsigned codage(unsigned IN[4],unsigned Z[7][10]) 
    {
        unsigned OUT[4];     
    	unsigned r,x1,x2,x3,x4,kk,t1,t2,a;
    	x1=IN[0]; x2=IN[1]; x3=IN[2]; x4=IN[3];
    	for(r=0;r<8;r++) 			/* les etapes */
    	{
    /* le groupe d'operation effectuer sur le bloc de 64bits */
    	x1 = mul(x1,Z[0][r]);		x4 = mul(x4,Z[3][r]);
    	x2 = (x2 + Z[1][r]) & one;	x3 = (x3 + Z[2][r]) & one;
     
    	kk = mul(Z[4][r],(x1^x3));
    	t1 = mul(Z[5][r],(kk+(x2^x4)) & one);
    	t2 = (kk+t1) & one;
    			/* la permutation */
    	x1 = x1^t1;		x4=x4^t2;
    	a  = x2^t2;		x2=x3^t1;	x3=a;
    	}
    /* le tableau de sortie du bloc de 64bits crypter */
    	OUT[0] = mul(x1,Z[1][etape+1]);
    	OUT[3] = mul(x4,Z[4][etape+1]);
    	OUT[1] = (x3+Z[1][etape+1]) & one;
    	OUT[2] = (x2+Z[2][etape+1]) & one;
    	return OUT[4];
    }
    et voila l'erreur qu'il m'affiche je crois que le probleme c'est le type des variables mais ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    \idea.c: In function `cryptage':
    \idea.c:303: warning: passing arg 1 of `codage' makes pointer from integer without a cast
    \idea.c:303: warning: passing arg 2 of `codage' makes pointer from integer without a cast
    \idea.c:303: warning: passing arg 1 of `ecriture_du_code' makes pointer from integer without a cast

  20. #40
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Déjà, évite d'appeler ton type uniquement unsigned, c'est vraiment sale (c'est implicitement un unsigned int).

    Ton erreur signifie que tu as une fonction qui prend en paramètre des pointeurs et que tu lui donnes à manger des int.


    Par exemple ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ecriture_du_code(codage(TT[4],Z[7][10]));
    codage retourne un unsigned int, mais écriture_du_code prend en entrée un pointeur sur un unsigned int.... Donc ça ne va pas.

    En plus, la fonction codage retourne un unsigned int, et toi, tu fais quoi :

    Ce qui n'est pas le bon type.

    Regardes à toutes les lignes où tu as les erreurs, c'est du même tonneau.


    Pour ta première erreur, une manière de faire serait de faire comme ça (mais c'est vraiment pas bien) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    int* mafonction(void)
    {
     static int i[4];
     
     return i;
    }
     
    void lautrefonction(int i[4])
    {
      i[0] = 2;
    }
     
    int main(void)
    {
       lautrefonction(mafonction());
    	return 0;
    }
    Toi, tu veux retourner un pointeur, alors soit créer une variable static (mais faut vraiment savoir ce que tu veux faire) ou soit retourner un pointeur qui pointe vers un espace alloué.

    Si tu veux faire plus propre et ne pas s'embeter sur le fait que la variable soit allouée dynbamiquement ou non, passe en paramètre ton pointeur également dans la première fonction :

    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    void mafonction(int out[4])
    { 
     /*tu fais tes trucs sur out*/
    }
     
    void lautrefonction(int i[4])
    {
      i[0] = 2;
    }
     
    int main(void)
    {
       int machin[4];
       mafonction(machin);
       lautrefonction(machin);
     
      return EXIT_SUCCESS;
    }

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Mon programme ne marche pas !
    Par Robmilou dans le forum Débuter
    Réponses: 3
    Dernier message: 23/10/2007, 19h39
  2. Réponses: 3
    Dernier message: 16/04/2007, 18h01
  3. Mon programme ne marche pas aprés le if:?
    Par mitherkiller dans le forum C
    Réponses: 28
    Dernier message: 28/03/2007, 20h47
  4. Tcsh - Mon script ne marche pas
    Par Aramis dans le forum Linux
    Réponses: 5
    Dernier message: 13/05/2004, 19h26
  5. [IB71] mon Blob ne marche pas correctement
    Par BoeufBrocoli dans le forum InterBase
    Réponses: 2
    Dernier message: 17/09/2003, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo