begin process at 2010 02 10 02:19:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Algorithme addition de nombres de bases kelconk


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Algorithme addition de nombres de bases kelconk

mercredi 16 juin 2004 à 10:43:21 | Algorithme addition de nombres de bases kelconk

AlexMAN

Membre Club
Bonjour,

Voila, j'ai un ptit souci avec un algo d'addition de nombre de bases kelconk : il marche apparement "parfaitement", mais jorai aimé savoir savoir kel optimisations joré pu lui apporter :

int Add(int nbr_prem, char *prem, int nbr_sec, char *sec, int nbr_base, char *base)
{
char *p = base;
char *result, *r = result;
int ret = 0;
int rang_prem, rang_sec;
int f = max(nbr_prem, nbr_sec);
int t;
int i;

if (nbr_prem < nbr_sec) {
t = nbr_sec - nbr_prem;
for (i = 0; i < t ; ++i) {
prem[t + i] = prem[i];
prem[i] = base[0];
}

} else if (nbr_sec < nbr_prem) {
t = nbr_prem - nbr_sec;
for (i = 0; i < t; ++i) {
sec[t + i] = sec[i];
sec[i] = base[0];
}
}

result = (char *)calloc(f + 1, 1);

for (i = f - 1; i >= 0; --i) {
while (*base) {
if (*base == prem[i]) rang_prem = base - p;
if (*base == sec[i]) rang_sec = base - p;
base++;
}
rang_prem += ret; ret = 0;
base = p;
rang_prem += rang_sec;
if (rang_prem > nbr_base - 1) {
ret++;
rang_prem -= nbr_base;
}
result[i + 1] = base[rang_prem];
}
if (!ret) {
for (i = 0; i < strlen(result) - 1; ++i) {
result[i] = result[i + 1];
}
result[i] = 0;
} else {
result[0] = ret;
result[f + 1] = 0;
}

printf("%s", result);

free(result);
return 0;

}


Si kelkun prefere voir le code indenté, j'enverrai le code par mail...

Merci d'avance ++

Alhexman
mercredi 16 juin 2004 à 12:40:19 | Re : Algorithme addition de nombres de bases kelconk

rogo

A quoi correspondent les arguments que tu passes à ta fonction ?

d.rogo
mercredi 16 juin 2004 à 12:46:22 | Re : Algorithme addition de nombres de bases kelconk

AlexMAN

Membre Club
taille du premier chiffre, premier chiffre, taille du 2eme chiffre, 2eme chiffre, taille de la base, base...
mercredi 16 juin 2004 à 13:00:13 | Re : Algorithme addition de nombres de bases kelconk

rogo

Si la différence de taille entre tes deux nombre n'est que de 1, est-ce que ton addition fonctionne correctement ?
d.rogo
mercredi 16 juin 2004 à 13:05:11 | Re : Algorithme addition de nombres de bases kelconk

AlexMAN

Membre Club
uè regarde le code :

if (nbr_prem < nbr_sec) {
t = nbr_sec - nbr_prem;
for (i = 0; i < t ; ++i) {
prem[t + i] = prem[i];
prem[i] = base[0];
}

} else if (nbr_sec < nbr_prem) {
t = nbr_prem - nbr_sec;
for (i = 0; i < t; ++i) {
sec[t + i] = sec[i];
sec[i] = base[0];
}
}

ca decale la chaine et comble le trou par les zero de la base pour ne pas changer la valeur de la chaine
jeudi 17 juin 2004 à 12:36:00 | Re : Algorithme addition de nombres de bases kelconk

rogo

Je n'utiliserais pas i en dehors de la boucle for :

if (!ret) {
for (i = 0; i < strlen(result) - 1; ++i) {
result[i] = result[i + 1];
}
result[i] = 0;

Pour ce qui est de l'optimisation, si tu as l'intention d'utiliser de nombreuses fois tes nombres(additions, multiplications successives) et s'il peuvent être grands tu auras peut-être intérêt à les enregistrer à l'envers (1234 sous la forme 4321).
Ainsi, tu le retournes une fois à l'acquisition et une fois à l'affichage ce qui t'évites de les décaler à chaque opération.

d.rogo
jeudi 17 juin 2004 à 12:37:13 | Re : Algorithme addition de nombres de bases kelconk

rogo

Si je ne me trompe, tu as un dépassement d'indice.

result[f + 1] = 0;

d.rogo


Cette discussion est classée dans : base, int, prem, rang, result


Répondre à ce message

Sujets en rapport avec ce message

dépassement capacité d'un float et int [ par golum ] result=scanf("%f",&coef); if (result !=0 && coef !=0)Voila si j'entre un nombre délirant style 9999999999999999999999999999999999999999999999999999999 Les pointeurs sont-ils si avantageux côté performance ? [ par ZackyBambou ] ZackrBambou Voici je débute en c++ puisque je cherchais un langange pouvant optimiser la rapidité de mes programme par la mémoire et les calcul au cpu calcul en précision étendue [ par JesusQuintana ] Bonjours, Je veux programmer en C un ensemble complet de fonctions pour additionner, multiplier des nombres en précision étendue. Les no débordement de la mémoire [ par imanedaoudi ] Hi,je ne sais plus pourquoi le programme ci contre ne marche plus pour dim trés grande 60 par exemple#includeusing namespace std;void main(int argc, c Problème avec TransparentBlt [ par NAVIE ] Bonjour, j'écris ce message au sujet d'une fonction appellée: TransparentBlt(). Celle ci est pratique pour dessiner un bitmap toutefois je n'arrive pa injecter des valeurs dans une base de donnée existante [ par Apache_31 ] Bonjour .Voila , je fais un programme qui permet de me connecter à une base de données ( MYSQL ) avec le logiciel c++ visual studio 2005 . Le problème Fonction Convert [ par nem02004 ] Voila mon code marche, mais comme je ne suis pas un super programmeur, je pense qu'il ya moyen de l'amélioré, c'est la que vous intervenez :DEn fait i Problème mon prem programe [ par AxeL364 ] bonjour, je début dans le c++ jessaye d'écrire un ptit programme pour progresser mais malheuresement un obstacle (qui parait très stupide et facile po Problème avec TransparentBlt( ) [ par NAVIE ] Bonjour, j'ai décidé de céer un programme avec mon compilateur DevCpp qui se charge de dessiner des bitmaps. Pour cela j'utilise une fonction appellé Multiplier un nombre a virgules [ par darkwhite ] Salut a tous, le principe de mon code est de multiplier par 3 un nombre decimal ecrit en notation française :xx,xx. j'ai donc ecrit ce code : #include


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales