C++ erreur d'exécution

Fermé
emnaisecs - 16 mars 2012 à 12:59
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 16 mars 2012 à 14:21
Bonjour,


#include "stdafx.h"
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <math.h>

int myRandom();
int isPremier(int);

/**
main()
*/
int main(void) {
int _p, _q, _n, _indEuler;
int _e = 0;
int _d = 0;
int _flag = 0;

do {
_p = myRandom();
_q = myRandom();
} while((isPremier(_p) == 0) || (isPremier(_q) == 0) );

_n = _p * _q;
_indEuler = (_p - 1) * (_q - 1);

while( !_flag ) {
if( isPremier(_e) ) {
if( (_n % _e == 0) && (_e < _n) ) {
_e++;
} else {
// on a trouve l'exposant publique
// on sort du while
_flag = 1;
}
} else {
_e++;
}
}

_flag = 0;
// on cherche l'exposant prive
while( !_flag ) {
if( ( _e * _d - 1) % _n == 0 ) {
// on a trouve
_flag = 1;
} else
_d++;
}

printf("p = %d\n", _p);
printf("q = %d\n", _q);
printf("n = %d\n", _n);
//printf("Indice Euler = %d\n", _indEuler);
printf("e = %d\n", _e);
printf("d = %d\n", _d);

return (0);
}

/**
myRandom()
*/
int myRandom(void)
{
static int first = 0;

if (first == 0) {
srand (time (NULL));
first = 1;
}
return ( rand () % 10 );
}

/**
isPremier(int)
*/
int isPremier(int _entier) {
static int _premiers[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,
43,47,53,59,61,67,71,73,79,83,89,97};
int i, n;
double d;


/* 1 n'est pas premier */
if (_entier == 1)
{
return 0;
}

n = sizeof (_premiers) / sizeof (*_premiers);

/* D'abord on regarde si n est divisible par les nombres premiers dans le tableau */
for (i = 0; i < n; i++) {
if (_entier == _premiers[i]) {
return 1;
}
if (_entier % _premiers[i] == 0) {
return 0;
}
}

/* Ensuite, on doit regarder a partir du dernier element du tableau+2 jusqu'a sqrt(_entier)... */
d = sqrt (_entier) + 0.5; /* Le 0.5 permet de tester si c'est un carre parfait... */
i = _premiers[i-1] + 2;

while (i < d) {
if (_entier % i == 0) {
return 0;
}
i += 2;
}

return 1;
}

/**

*/
int pgcd(long _a, long _b)
{
long _dividende = labs(_a); /* le _dividende contient la valeur absolue de a */
long _diviseur = labs(_b); /* le _diviseur contient la valeur absolue de b */
long _quotient;
long _reste;

int _fin = 0;

/*
* on ne calcule le pgcd de deux nombres que s'ils sont diffZrents de zZro
*/
if(_a != 0 && _b != 0) {
while(!_fin) {
/* On applique la division euclidienne */
_reste = _dividende % _diviseur;
_quotient = (_dividende - _reste) / _diviseur;

/* Si le _reste est diffZrent de 0, on continue l'algorithme */
if(_reste != 0) {
_dividende = _diviseur;
_diviseur = _reste;
}
else {
_fin = 1;
}
}
}
else {
/* Erreur ... */
_diviseur = 0;
}


return _diviseur;
}

3 réponses

voilà les ereeurs
cuments\visual studio 2008\projects\analyse\analyse\analyse.cpp(73) : warning C4244: 'argument' : conversion de 'time_t' en 'unsigned int', perte possible de données
1>c:\documents and settings\emna\mes documents\visual studio 2008\projects\analyse\analyse\analyse.cpp(108) : error C2668: 'sqrt' : appel ambigu à une fonction surchargée
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(581): peut être 'long double sqrt(long double)'
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(533): ou 'float sqrt(float)'
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(128): ou 'double sqrt(double)'
1> lors de la tentative de mise en correspondance de la liste des arguments '(int)'
1>Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\emna\Mes documents\Visual Studio 2008\Projects\analyse\analyse\Debug\BuildLog.htm"
1>analyse - 1 erreur(s), 1 avertissement(s)
========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
16 mars 2012 à 13:59
transforme _entier en double.
0
expliquez moi svp
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
16 mars 2012 à 14:21
je ferai des efforts pour expliquer lorsque tu fera des efforts pour poser des questions et expliquer le problème. Fait ce que je dit tu lèveras l'indétermination.
0