Algorithme

lecedway Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   -  
lecedway Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
s'il vous plaît j'ai un exercice a faire sur DEV-C++ ou on me demande de convertir un entier en base 2(suite de 0 à 1 stockées dans un tableau d'entier ou de caractères).comment faire?

13 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
0
lecedway Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
Merci,mais je connais deja tout ca,j'aimerais savoir comment ecrire cet algorithme en C?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Et bien de la même manière que tu le ferais sur papier, tu fais tes divisions par 2, en stockant ton reste dans le tableau, et en recommençant sur le quotient...
0
lecedway Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai essayé de faire le programme suivant est-il bon?sinon que doit je changer ?merci

int base2 ( int a,int T[TAILLE])
{ int i;
for(i=0;i<TAILLE;i++)
{ while (a>2)
{ if (a%2=0 or a%2=!0)
{T[i]=a%2;
}
}
}
return a;

}
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Ta condition (a%2=0 or a%2=!0) n'est pas du C...
En C on écrirait (a%2==0 || a%2!=0) cependant ça n'a aucun sens car ce sera toujours vrai !

De plus une boucle while à l'intérieur d'une boucle for... ça ne peut être que faux !

Plus inquiétant encore : tu ne divises jamais a par 2 !

Je te donne pas la solution, essaye de le refaire avec mes remarques...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lecedway Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
ok,en fait je dois stocker le resultat dans un tableau d'entier c'est pour ca que j'ai mis le while.Vous dites que je ne divise jamais par 2 pourtant je croyais que a%2 signifiait (a modulo 2) soit en quelque sorte le reste de la division de a par 2?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
D'accord tu as besoin d'un tableau, donc d'une boucle... pas deux !
Garde ton for tel quel et enlève le while, il est inutile et faux...

Effectivement a%2 donne le reste, mais après il faut que tu travailles avec le quotient a/2 que tu ne calcules jamais
0
lecedway Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
Merci,mais pourquoi j'aurais besoin d'une seule boucle sachant que lorsque je vais calculer le quotient,je devrais renouveler l'operation jusqu'à ce qu'il soit inferieur a 2 nn?et dans ce cas quel boucle utilisée?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Regarde "sur papier" avec par exemple 13 en binaire
13%2=1 ; 13/2=6
 6%2=0 ; 6/2=3
 3%2=1 ; 3/2=1
 1%2=1 ; 1/2=0
 0%2=0 ; 0/2=0
 ...
 0%2=0 ; 0/2=0
Ton résultat est donc 0...01101 (avec ... qui remplace plein de 0)

Tu as donc juste besoin d'une boucle pour remplir ton tableau et tes cases T[i]
Lorsque tu auras calculer ton quotient tu renouvelleras l'opération jusqu'à ce que i>=TAILLE et c'est pour ça qu'il faut utiliser uniquement ta boucle for
0
lecedway Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
ok,voici ce que j'ai fait:
int base2 ( int a,int T[TAILLE])
{ int i;
int q;
q=a/2;
do
{q/2;}
while(q>2)
for(i=1;i<TAILLE;i++)
{ if (q%2=0 || q%2!=0)
{ T[0]=a%2;
T[i]=q%2;
}
}

return a;

}
au depart je calcule le quotient jusqu'a ce qu'il soit inferieur a 2 et par la suite je fai une boucle remplissant les cases du tableau avec les reste obtenues.
Exuse moi si je me trompe tout le temp,c'est la premièe fois que je fais de l'informatique et je suis vaiment pas doué dans cette matière au contraire des autres matières ou j'ai aucun probleme.je fais une formation en Math aplliqué et l'algorithme est une option faisant partie de ma filière et en vue des exams on nous donne des exo a rendre.ca fait plus de 2 jours que je suis sur cette exercice
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
if (q%2=0 || q%2!=0) ne sert à rien, tu dis : "q est pair ou q est impair", c'est forcément vrai !
De plus il faut que tu divises par 2 à CHAQUE tour de boucle !

Voici la réponse, si tu ne la comprends pas demande...
int base2(int a, int T[TAILLE])
{
    int i;
    for (int i=TAILLE-1; i>=0; i--) // on va de droite à gauche
    {
        T[i]=a%2;
        a=a/2;
    }
}
0
lecedway Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
ah ok ok,mince je comprend merci beaucoup KX,au fait vu que c'est une fonction,l'on doit pas retourner une valeur?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Je ne rentre pas dans les détails si tu débutes...

exemple on écrit : base2(n,t);

Ni "n", ni "t" n'est modifié, par contre à l'intérieur de base2, on modifie t[0], t[1]...
Donc on a pas besoin de retourner de valeurs, juste à lire "t"...
0
lecedway Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
merci pour ton aide.j'ai bien compris.
0