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 :

Problème avec une boucle avec condition


Sujet :

C

  1. #1
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 464
    Points : 203
    Points
    203
    Par défaut Problème avec une boucle avec condition
    salut les développeurs j'ai un grand souci la :/
    j'implémente l'algorithme de Montgomery power lader pour la multiplication scalaire je l'ai implémenté et testé en java et ça marche bien,
    le but est de calculer la valeur kG ,G etant un point k un entier, voici la portion du code java;

    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
    static Point  multiScalairee(Point G, BigInteger a, BigInteger k, BigInteger o, BigInteger R,BigInteger RR) {
     
        Point R0, R1;
        R0=G;
        R1=doublement(G, a, o, R, RR);
     
        String s;
        BigInteger f=new BigInteger(""+k);
        s=f.toString(2);
        System.out.println("sss "+s);
        int h=0;
        for(int i=1;i<=s.length()-1;i++) {
            if(s.charAt(i)=='0') {
     
            // addition méthode pour additionner deux point
            //doublement méthode pour doubler un point
            R1=addition(R0, R1, o, a, R, RR);
            R0=doublement(R0, a, o, R, RR);
     
            } else {
                if(s.charAt(i)=='1') {
                  R0=addition(R0, R1, o, a, R, RR);
                  R1=doublement(R1, a, o, R, RR);
                }
            }   
        }     
     
        return R0;
     
    }
    je l'ai aussi implémenter de la meme façon en C mais la catastrophe ça me donne des résultat faux , le résultat est corecte sauf dans le cas ou la valeur des bits de k testé sont à 0 ,
    ps en c le k est envoyé en plusieurs paquets de 8 bits chacun.
    voici le code C:

    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
    void MulScal(unsigned long X[9],unsigned long Y[9],unsigned long a[9],unsigned long k[9],unsigned long E[9],unsigned long M[9],unsigned long R[9],unsigned long m,int nbrPaquet,unsigned long x[9],unsigned long y[9]){
    unsigned long x0[9],y0[9],x1[9],y1[9],x0i[9],y0i[9],x1i[9],y1i[9];int np,i,j,ii=0;// np nombre de paquet utilisé pour le k
    //nbrPaquet=3;
     
    int init=30;
    //R0=G
    for(i=0;i<9;i++)
    {
    x0[i]=X[i];
    y0[i]=Y[i];
    }
    //R1=doublemen G
    doublement(X,Y,a,E,M,R,m,nbrPaquet,x1,y1);
    for(i=np-1;i>=0;i--)
     
    {
    	for(j=init;j>=0;j--)
    	{
     
    //cette condition marche trés bien,et donne des resultat correcte dans le cas ou tous les bits de k sont a 0
    		if(getBitIndex1(k[i],j)==0){
     
                addition(x0,y0,x1,y1,a,E,M,R,m,nbrPaquet,x1,y1);
                doublement(x0,y0,a,E,M,R,m,nbrPaquet,x0,y0);
     
    		}
    		//par contre celle la donne des résultat incorecte meme quand tous les bit sont à 1
    		  if(getBitIndex1(k[i],j)==1){
        addition(x1,y1,x0,y0,a,E,M,R,m,nbrPaquet,x0,y0);
    doublement(x1,y1,a,E,M,R,m,nbrPaquet,x1,y1);
     
    	}
     
    	}
    init=31;
     
    }
    si quelqu'un aurait une idée sur le probléme qu'il m'aide s'il vous plait

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Horreur et indentation

    J'ai remis ton code Java en forme mais je n'ai pas réussi avec ton code C, j'ai l'impression qu'il manque des accolades. Voici ce que j'obtiens :
    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
    void MulScal(unsigned long X[9], unsigned long Y[9], unsigned long a[9], unsigned long k[9], unsigned long E[9], unsigned long M[9], unsigned long R[9], unsigned long m, int nbrPaquet, unsigned long x[9], unsigned long y[9])
    {
        unsigned long x0[9], y0[9], x1[9], y1[9], x0i[9], y0i[9], x1i[9], y1i[9];
        int np,i,j,ii=0;// np nombre de paquet utilisé pour le k
        //nbrPaquet=3;
     
        int init=30;
        //R0=G
        for(i=0;i<9;i++)
        {
            x0[i]=X[i];
            y0[i]=Y[i];
        }
        //R1=doublemen G
        doublement(X,Y,a,E,M,R,m,nbrPaquet,x1,y1);
     
        for(i=np-1;i>=0;i--)
        {
            for(j=init;j>=0;j--)
            {
                //cette condition marche trés bien,et donne des resultat correcte dans le cas ou tous les bits de k sont a 0
                if(getBitIndex1(k[i],j)==0)
                {
                    addition(x0,y0,x1,y1,a,E,M,R,m,nbrPaquet,x1,y1);
                    doublement(x0,y0,a,E,M,R,m,nbrPaquet,x0,y0);
                }
     
                //par contre celle la donne des résultat incorecte meme quand tous les bit sont à 1
                if(getBitIndex1(k[i],j)==1)
                {
                    addition(x1,y1,x0,y0,a,E,M,R,m,nbrPaquet,x0,y0);
                    doublement(x1,y1,a,E,M,R,m,nbrPaquet,x1,y1);
     
                }
     
            }
        init=31;
     
        }
    Ne manque t-il que l'accolade final ?

    Tu ne montres pas ta méthode getBitIndex1() et c'est visiblement elle qui ne renvoie pas le bon résultat, non ?

    Les prototypes de tes fonctions sont atroces : il y a beaucoup trop de paramètres. Il faut que tu crées un nouveau type structuré pour augmenter la lisibilité de tout ça.

  3. #3
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 464
    Points : 203
    Points
    203
    Par défaut
    effectivement j'ai oublié de copier l'accolade finale
    oui meme moi je doute avec getBigIndexe et aussi je doute que j'initialise mal mes boucle :'(

    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    unsigned long getBitIndex1(unsigned long num,int index){
    unsigned long bit=(num>>index)&1;
    return bit;
    }
    je sais que c'est trop chargé ,c'est mon premier projet avec C je commence juste à le manipuler,donc j'essaye de faire marcher celui la puis on va voir pour régler l’élégance

    merci pour votre attention

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Sais-tu que ce code n'initialise que la variable ii (qui ne semble pas utilisée d'ailleurs) à 0 et que les autres ont une valeur indéterminée ?

    Au hasard, ligne 17 dans mon code, tu initialises i à np - 1 mais tu ne sais pas ce que vaut np.

  5. #5
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 464
    Points : 203
    Points
    203
    Par défaut
    j'avais un grand probléme avec les initialisation et aussi avec la déclaration il fallait tous déclarer en globale et moi j'ai déclaré en locale, je n'ai pas compris pourquoi mais ça a marché, au fait c'est compliqué j’exécute mon programme sur un circuit FPGA peut être que c'était pour cette raison, merci de m'avoir donné du temps,je passe en résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une boucle avec une condition
    Par kaboche dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/10/2011, 10h55
  2. [VBA-E] Parcourir les checkbox d'une feuille avec une boucle
    Par tonton fred dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/05/2007, 14h47
  3. lire dans une listBox avec une boucle
    Par wolfazer dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 08/05/2007, 20h33
  4. [MySQL] affichage d'une liste avec une boucle while
    Par Invité dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/01/2007, 21h19

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