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
Bonjour,
s'il vous plait , je voulais faire un programme concernant algorithm de booth de la multiplication signé,je sais qu'il ya pas mal des programmes sur internet et je ne veux pas les voir , je veux le faire moi meme, en utilisant les fonctions!
je peux faire le décalage,la convertation,l'addition binair , la soustraction binair ,tout ca,mais le probléme que j'avais ici ,c"est que la premiére fonction qui est ( int convert(int){
... ) va me donner a la fin l"équivalent binair du nombre que l'utilisateur va choisir,en forme d'un tableau , par exemple s'il tape 2 : l résultat sera 0010 , B[i]=0010 .
aprés je voulais faire l'addition de ce tableau avec autre tableau qui est nouveau,on utilisant : addition(int j[],int k[],int n){ .... }
ici k[] c'est le nouveau tableau que je vais indiqué les valeurs de ces élements dans la fonction, et le deuxiéme j[] je voulais qu'il soit B[i] que j'avais déja calculé !!! ca veut dire qu'il remplace automatiquement les valeurs des elements de B[i] par j[i] pour pouvoir fair l'addition de ces deux tableaux !! donc comment le faire ??????
parceque vous savez trés bien que le compilateur ne va pas savoir que ce tableau (je parle de B[i]) concern l'équivalent en binair qui était déja calculé !!!
ici je suis bloquééééééé !!! et je l'ai trés besoin s'il vous plaaaaaaaaaaaaaaaaaait :/ !
A voir également:

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
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){......}
0
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
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,
0
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


#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 !

                
0
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
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!
0
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
Le code que tu mets doit être inséré entre les balises et non après. Sinon c'est illisible.

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,
0