begin process at 2012 05 28 05:17:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Compression, Split & Cryptage

 > 

additio de deux grand nombre


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

additio de deux grand nombre

dimanche 4 avril 2010 à 20:11:00 | additio de deux grand nombre

sarlissa

bonjour je voudrais que vous m'aidiez a développez un programme qui fait la somme de deux grand nombre que l'utilisateur les entre comme des chaines de caractère j'ai essayé de faire le programme m'ai je n'arrive pas à trouver l'emplacement de l'erreur je vous pris de m'aider le plus vite possible
voici mon code:


#include <stdio.h>
#include <stdlib.h>
#include<string.h>

int convertir(char *ch,int n);
main()
{char ch1[40],ch2[40];
int nb1,nb2,n,m,i=9,cos=0,max,t[10]={0};
printf("entrer le premier nombre:");
scanf("%s",ch1);n=strlen(ch1);
printf("entrer le deuxieme nombre:");
scanf("%s",ch2);m=strlen(ch2);
/*max=(n>m)?n:m;
d=max/4+3;
t=(int*)malloc(d*sizeof(int));*/
while(n>=0 || m>=0)
{nb1=convertir(ch1,n);
nb2=convertir(ch2,m);
t[i]=(nb1+nb2+cos)%10000;
cos=(nb1+nb2+cos)/10000;
n-=4;i--;
m-=4;
}
for(i=0;i<10;i++)
printf("%4d",&t[i]);
getch();
}


int convertir(char *ch,int n)
{int i,j=3,nb=0;
char temp[5];
if(n>0)
{
for(i=n-1;i<=n-5;i--)
{temp[j]=ch[i];
j--;
}
temp[4]='\0';nb=atoi(temp);
}
return(nb);
}

et merci d'avance
mardi 6 avril 2010 à 13:50:28 | Re : additio de deux grand nombre

pop70

Ce code est en C++, il faudra changer cout << et cin >> par printf() et scanf(), mais le principe reste le même, il prend un nombre dans un tableau de char et le convertit en int. J'espère que ça t'aidera.


Code C/C++ :
int main(int argc, char **argv)
{
    int tailleC = 200;
    char  chaine[tailleC]; // création d'un tableau de caractère

    for (int i = 0; i <tailleC; i++)
    {
        chaine[i] = '\0';  // initialise toutes les valeur à '\0'
    }


    cout << "Votre nombre en chaine : ";
    cin>>chaine; // demande un nombre à entrer dans le tableau de caractère


int tempInt = 0, nbChar = 1, varInt = 0;


    for (int i = 0; i < tailleC; i++)
    {
        if (chaine[i] != '\0')
        {
            tempInt = (int) (chaine[i] - '0');
            nbChar++; // compte le nombre de caractères entrés
        }
    }

    int exp = 1;

    for (int i = 0; i < (nbChar - 2) ; i++)
    {
        exp*=10;  // permet de creer un exposant de 10

    }

    for (int i = 0; i < tailleC; i++)
    {
        if (chaine[i] != '\0')
        {
            tempInt = (int) (chaine[i] - '0'); // reprend les valeurs du tableau
            varInt += tempInt*exp;             // multiplie chaque unité par un exposant de 10 (ex : 521 = 5*10² + 2*10 + 1)
            exp/=10;                           // diminue de 1 la valeur de l'exposant

        }
    }




cout << "En entier : " << varInt << endl << endl; // affiche la valeur de type integer

system ("PAUSE");
return 0;

}


Pop70
mardi 6 avril 2010 à 15:23:58 | Re : additio de deux grand nombre

tpoinsot

Bonjour,

convertir() :
- ne tient pas compte du nombre de caractères restant dans la chaine ch. Quand il en reste moins de 4, le résultat est incertain
- le for a une condition erronnée : un majorant avec i-- . Par chance (?) ton majorant est trop petit dès le départ, alors tu sors immédiatement au lieu de boucler indéfiniment.

Main() :

- printf : pas de & devant t[i], et met un espace après le %d et un \n après la boucle.
- compte le nombre de t, tu éviteras les zéros.

Après tu fais la multiplication ? et le reste ?
mercredi 7 avril 2010 à 22:39:30 | Re : additio de deux grand nombre

sarlissa

merci beaucoup pour vos réponses
*pour mr pop70 je n'ai pas compris beaucoup de ce que tu as écrit parce que je connais pas le c++.
*et pour tpoinsot le problème de for je l'ai réglé j'ai juste inverser le signe > mais le programme ne marche pas
_pour le nombre de caracteres contenus dans ch il'est envoyé a la fonction convertir par le programme principale et il est affectée au variable n.
-merci pour la remarque de printf vous m'avez sauvez
-je n'ai pas bien compris pour quoi je doit faire la multiplication et le reste

je vais vous ré-expliquer le principe
je doit lire les deux chiffres en tant que chaine de caractères puis convertir les quatre derniers chiffres de chaque nombre en entier a l'aide de la fonction atoi puis les additionner et maitre les quatre derniers chiffres du résultat dans un tableau d'entier et ajouter ce qui reste au résultat de l'addition du quatre chiffres suivants et refaire la même chose jusqu'à la fin et enfin afficher le tableau inversé
si vous pouvez m'aider parce que mon programme ne fonctionne toujours pas
le voici apres avoir couriger les faute que j'ai trouvé


#include <stdio.h>
#include <stdlib.h>
#include<string.h>

int convertir(char *ch,int n);
main()
{char ch1[40],ch2[40];
int nb1,nb2,n,m,i=9,cos=0,max,t[10]={0};
printf("entrer le premier nombre:");
scanf("%s",ch1);n=strlen(ch1);
printf("entrer le deuxieme nombre:");
scanf("%s",ch2);m=strlen(ch2);
max=(n>m)?n:m;
while(max>0)
{nb1=convertir(ch1,n);
nb2=convertir(ch2,m);
t[i]=(nb1+nb2+cos)%10000;//pour que la case ne contient que 4 chiffre
cos=(nb1+nb2+cos)/10000;/*c'est le reste qui doit être ajouter a la case suivante du tableau*/
n=n-4;i--;
m=m-4;
max=max-4;
}
for(i=0;i<10;i++)
printf("%4d",t[i]);
getch();
}


int convertir(char *ch,int n)
{int i,j=3,nb=0;
char temp[5]={0};
if(n>0)
{
for(i=n-1;i>=n-5;i--)
{temp[j]=ch[i];
j--;
}
temp[4]='\0';nb=atoi(temp);
}
return(nb);
}


et merci encore une fois
jeudi 8 avril 2010 à 10:10:07 | Re : additio de deux grand nombre

tpoinsot

Je te laisse ton algorithme, mais il y a mieux.

Tu dois faire l'addition par paquet de 4, sans oublier la retenue (ta variable cos), je l'ai compris, et c'est pour le fun que je te proposais de faire la multiplication de grands nombres, car c'est un peu plus "marrant".

D'abord, indente bien ton code et utilise la balise de présentation du code, dans la barre d'outils juste au dessus de la zone de réponse

Convertir :
- ta boucle passe 5 fois et bousille la pile. mets >n-5
- quand il reste moins de 4 caractères, c'est dangereux car tu lis n'importe où.

main:
plutôt que n=n-4; écris n -= 4; etc...
pour l'affichage :
printf("%d ", t[i]);
puis printf("\n") après la boucle.
jeudi 8 avril 2010 à 11:22:34 | Re : additio de deux grand nombre

tpoinsot

j'ai retapé ton code, compare avec le tien pour comprendre pourquoi il ne fonctionnait pas.
J'ai un peu simplifié.

Code C/C++ :
int convertir(char *ch, int n) 
{
	int j, nb = 0; 
	char temp[5] = {0}; 
	
	if ( n > 0 ) 
	{ 
		for (j = 3; j >= 0; j--)
		{
			temp[j] = n > 0 ? ch[n-1] : ' '; 
			n--;
		} 
		temp[4] = '\0';
		nb = atoi(temp); 
	}
	return(nb); 
} 
jeudi 8 avril 2010 à 23:45:49 | Re : additio de deux grand nombre

sarlissa

merci beaucoup tpoinsot
-c bien vu pour la boucle for
-pour les espaces je t'avoue que je n'ai pas y panser avant et je suis trop contente de l'apprendre
tu m'as sauver je te suis b1 reconnaissante je vais essayer de faire le programme de multiplication et si je rencontre de problème j'espère que tu me vient en secours
-et pour la balise de présentation du code je ne s'avais pas son existance
désolé pour le dérangement.


Cette discussion est classée dans : nombre, int, ch1, nb1, ch2


Répondre à ce message

Sujets en rapport avec ce message

vecteur avec int et char [ par Tyroflan ] int **boursemain(){...cin >> nombre;for (unsigned int i=0;i bourse[i] = new int [5];donc je crée autant de vecteurs bourse que l'indique la variable vecteur avec int et char [ par Tyroflan ] int **boursemain(){...cin >> nombre;for (unsigned int i=0;i bourse[i] = new int [5];donc je crée autant de vecteurs bourse que l'indique la variable Arbres binaires [ par His_Dudeness ] Bonjour, je suis en train de me taper un tp pour un cours sur les arbres. Dans le code qui suit, la racine redevient null a chaque fois qu'elle sort Probleme fonctions [niveau debutant] [ par zzzzzz ] en fait je voulais faire une applic qui nous demande un nombre de part et de fin si on met par exemple 2 et 7 sa ecrira 234567 grace a une boucle. le getch ou getchar() ? [niveau debutant] [ par zzzzzz ] :P //---------------------------------------------------------------------------#include #include // getch()#include // c Aide algorithmique TESTAGE !! [ par ZogStriP ] Bonjour tout le monde !!Je suis en train de faire le concours de PROLOGIN (www.prologin.org) et j'en suis au QCM 2004 n°4, mais là je bloque un peu!Je Tableau et char to int [ par Niníel ] Bonjour!J'ai un tableau: chTabStart[64] dans lequel je rentre un nombre dans le format suivant: d_25 pour un nombre décimale par exemple. Donc dans mo Nombre d'entier d'un fichier composé de chiffres [ par ValToutCourt ] Bonjour à tous, j'ai un probléme en programmation, je dois recupérer le nombre d'entier stoké dans un fichier, ca parait bidon, mais j'ai deja tout es convertir un int en char ??? [ par tintin72 ] Salut,Comment convertir un int en char pour que la valeur numérique du int devienne un nombre écrit ? par ex: pour que : int nombre = 18; donne une fo Concatener ch1 et ch2. ch1 doit aller après ch2 [ par iras ] Qqun pourrait me dire où est ce ce programme de concaténation bloque. La compilation n'indique aucune erreur mais l'exécution foire#include #include #


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,312 sec (4)

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