Probléme dans programme de multiplication de booth !! :/
Fermé
DevGl
Messages postés
136
Date d'inscription
samedi 23 novembre 2013
Statut
Membre
Dernière intervention
16 mai 2015
-
5 janv. 2014 à 04:11
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 5 janv. 2014 à 17:58
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 5 janv. 2014 à 17:58
A voir également:
- Écrire un programme qui calcule une multiplication par additions successives python
- Ecrire en gras sur whatsapp - Guide
- Calculer une moyenne sur excel - Guide
- Programme demarrage windows 10 - Guide
- Ecrire en miroir - Guide
- Citizen code python avis - Accueil - Outils
4 réponses
yvoyuuta
Messages postés
9
Date d'inscription
lundi 30 décembre 2013
Statut
Membre
Dernière intervention
7 mai 2014
5 janv. 2014 à 09:22
5 janv. 2014 à 09:22
Bonjour,
J'ai pas bien compris ce que tu cherche, mais je pense que tu dois faire entrer B[] en paramètre si tu veux faire l'addition de B[]et j[]. Et si tu veux remplacer les valeurs de j[] par B[] tu n'as qu'a faire a l'appel de la fonction :
addition(B,B,k,n); et le compilateur va remplacer j par B sachant que le prototype sera : addition(int j[],int B[],int k[],int n){......}
J'ai pas bien compris ce que tu cherche, mais je pense que tu dois faire entrer B[] en paramètre si tu veux faire l'addition de B[]et j[]. Et si tu veux remplacer les valeurs de j[] par B[] tu n'as qu'a faire a l'appel de la fonction :
addition(B,B,k,n); et le compilateur va remplacer j par B sachant que le prototype sera : addition(int j[],int B[],int k[],int n){......}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
5 janv. 2014 à 11:03
5 janv. 2014 à 11:03
Bonjour,
Ton post n'est pas très clair. Le plus simple serait de poster ton code et de le commenter. Pour cela, utilise la balise "code" (et sélectionne "C") situé à droite du bouton "souligné". Ce sera plus propre.
addition(int j[],int k[],int n){ .... }
Qu'est-ce n ?
Ne faudrait-il pas 3 tableaux ? addition(int *t1, int *t2, int *somme) {...} ?
t1, c'est le tableau 1, t2, le tableau 2 et somme, le tableau somme.
Cdlt,
Ton post n'est pas très clair. Le plus simple serait de poster ton code et de le commenter. Pour cela, utilise la balise "code" (et sélectionne "C") situé à droite du bouton "souligné". Ce sera plus propre.
addition(int j[],int k[],int n){ .... }
Qu'est-ce n ?
Ne faudrait-il pas 3 tableaux ? addition(int *t1, int *t2, int *somme) {...} ?
t1, c'est le tableau 1, t2, le tableau 2 et somme, le tableau somme.
Cdlt,
DevGl
Messages postés
136
Date d'inscription
samedi 23 novembre 2013
Statut
Membre
Dernière intervention
16 mai 2015
Modifié par DevGl le 5/01/2014 à 13:49
Modifié par DevGl le 5/01/2014 à 13:49
#include<stdio.h>
#include<stdlib.h>
int convert1(int);
int convert2(int);
int addition(int [],int [],int);
main(){
int p,n,i;
printf("entrer le premiere nombre \n");
convert1(p);
printf("entre le dexiéme nombre\n");
convert2(n);
system("pause");
}
int convert1(int L){
scanf("%d",&L);
int j[5],k[5],i,B1[5],k1[5];
if(L>=0){
j[0]=L/2;
k[0]=L%2;
for(i=0;i<=4;i++){
j[i+1]=j[i]/2;
k[i+1]=j[i]%2;}
for(i=0;i<4;i++){
B1[i]=k[3-i];
printf(" B2[%d]=%d ",i,B1[i]);}}
if(L<0){
L=L*(-1);
j[0]=L/2;
k1[0]=L%2;
for(i=0;i<=4;i++){
j[i+1]=j[i]/2;
k1[i+1]=j[i]%2;}
for(i=0;i<4;i++){
if(k1[i]==1){
for(i=i+1;i<4;i++){
if(k1[i]==1){
k1[i]=0;}
else{
k1[i]=1;}}
break;}
}
for(i=0;i<4;i++){
B1[i]=k1[3-i];
printf(" B1[%d]=%d ",i,B1[i]);}}
printf("\n");
}
int convert2(int L){
scanf("%d",&L);
int j[5],k[5],i,B2[5],k1[5];
if(L>=0){
j[0]=L/2;
k[0]=L%2;
for(i=0;i<=4;i++){
j[i+1]=j[i]/2;
k[i+1]=j[i]%2;}
for(i=0;i<4;i++){
B2[i]=k[3-i];
printf(" B2[%d]=%d ",i,B2[i]);}}
if(L<0){
L=L*(-1);
j[0]=L/2;
k1[0]=L%2;
for(i=0;i<=4;i++){
j[i+1]=j[i]/2;
k1[i+1]=j[i]%2;}
for(i=0;i<4;i++){
if(k1[i]==1){
for(i=i+1;i<4;i++){
if(k1[i]==1){
k1[i]=0;}
else{
k1[i]=1;}}
break;}
}
for(i=0;i<4;i++){
B2[i]=k1[3-i];
printf(" B1[%d]=%d ",i,B2[i]);}}
printf("\n");
}
voilaa le progarmme je l'avais pas encor terminé ,
je dois ajouter les fonctions de décalage et de soustraction . (j'ai laissé cela aprés que de trouver une solution pour mon probléme).
regardez,j'ai utilisé 2 fonction de convertation , la 1ére et 2éme , concernant le premiére nombre et le 2éme nombre que je voulais les faire la multiplication de booth ,c'est pour cela que j'ai séparer entrer eux au lieu d'utiliser qu'une seul fonction , donc dans l"éxecution je vais taper 2 NOMbre , si je tape 5 puis -1 j'aurai l résultat comme cela :
B1[0]=0 B1[1]=1 B1[2]=0 B1[3]=1
B2[0]=1 B2[1]=1 B2[2]=1 B2[3]=1
cela c'était pour avoir de 2 tableau qui n'ont pas le meme nom , pour que pendant l'addition le compilateur ne va pas tromper entre les 2 tableaux , puisque moi je veux utiliser que le 1ere...! "B1[i].
un certain moments j'aurai besoin de faire l'addition de B1[] et un autre tableau que je vais l'appellé A[4]={0,0,0,0}.
j'ai utilisé la fonction int addition(int[],int[],int).
ces deux tableaux ont la méme taille .
donc je vais écrire pendant le traitement :
int addition(int B1[],int A[],int n){ A[4]={0,0,0,0}.........}
le probléme ici , comment le compilateur va savoir que le tableau B1[] concerne le tableau que j'avais calculé pendant la convertation ?????
que ce que je dois faaaaire???? s'il vous plaaaaaaaaaaaaaaaaaais,j'aurai un examen cette semaaaaine , !
et dans le résulat je dois avoir la somme qui est A[].
par ce que je vais fair A[]=A[]+B1[].
chaque fois les élements du A[] vont changer , c'est pourcela que je n'ai pas utilisé trois tableau ! parce que il n'ya pas autre tableau qui va recevoir la résultat , c'est A[],qui va le recevoir !
DevGl
Messages postés
136
Date d'inscription
samedi 23 novembre 2013
Statut
Membre
Dernière intervention
16 mai 2015
5 janv. 2014 à 13:51
5 janv. 2014 à 13:51
j'ai fait code (C) plusieurs fois , mais ca pas bien marché , est ce que vous pouvez l'utilisez vous meme , peur comprendre le programme , parceque vrément comme ca , n'est pas clair ! et merci d'avaaaaaaance!
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
5 janv. 2014 à 17:58
5 janv. 2014 à 17:58
Le code que tu mets doit être inséré entre les balises et non après. Sinon c'est illisible.
main() =>
int convert1(int);
int convert2(int);
Tes fonctions renvoient un int. Il faut donc un return... Ou alors tu peux utiliser le prototype void convert1(). idem pour convert2().
scanf("%d",&L);
Cela modifiera la variable L, mais pas la variable p qui a été passée en paramètre de la fonction convert1(). Dans ce cas, il faut passer par un pointeur. Ou alors autant utiliser le prototype convert1(void)...
Même remarque pour scanf("%d",&L) dans convert2().
if(L<0)
C'est mieux de mettre else (le premier if teste si L>=0).
for(i=0;i<=4;i++){
Classiquement, on met : i<5; Sinon, ici il faut mettre i<=3 (ou i<4). Sinon débordement de tableau puisque tu as j[i+1];
for(i=0;i<4;i++){
B1[i]=k[3-i];
Pourquoi i<4. Plutôt i<5 (ou i<=4) non ? Tu es sûr de 3-i ? Moi je mettrai plutôt 4-i (4 est le dernier élément du tableau).
D'une manière générale, je te conseille de revoir les algorithmes. Il y a trop de "blocs communs" qui mériteraient d'être mis dans des fonctions.
On va déjà se concentrer sur ta fonction convert1(). Corrige en tenant compte de mes remarques. Et reposte le code <gras>entre> les balises "code". Et mets-nous aussi au passage les messages du compilateur.
Cdlt,
main() =>
int main(void){
int convert1(int);
int convert2(int);
Tes fonctions renvoient un int. Il faut donc un return... Ou alors tu peux utiliser le prototype void convert1(). idem pour convert2().
scanf("%d",&L);
Cela modifiera la variable L, mais pas la variable p qui a été passée en paramètre de la fonction convert1(). Dans ce cas, il faut passer par un pointeur. Ou alors autant utiliser le prototype convert1(void)...
Même remarque pour scanf("%d",&L) dans convert2().
if(L<0)
C'est mieux de mettre else (le premier if teste si L>=0).
for(i=0;i<=4;i++){
Classiquement, on met : i<5; Sinon, ici il faut mettre i<=3 (ou i<4). Sinon débordement de tableau puisque tu as j[i+1];
for(i=0;i<4;i++){
B1[i]=k[3-i];
Pourquoi i<4. Plutôt i<5 (ou i<=4) non ? Tu es sûr de 3-i ? Moi je mettrai plutôt 4-i (4 est le dernier élément du tableau).
D'une manière générale, je te conseille de revoir les algorithmes. Il y a trop de "blocs communs" qui mériteraient d'être mis dans des fonctions.
On va déjà se concentrer sur ta fonction convert1(). Corrige en tenant compte de mes remarques. Et reposte le code <gras>entre> les balises "code". Et mets-nous aussi au passage les messages du compilateur.
Cdlt,