non, c'est l'opca de ma boite qui paye ( :roll: )
du coup je fait le même processus sauf que je choisise le diviseur ?
Version imprimable
Oui, vu qu'il s'agit de "généraliser".
En fait, c'est pour ca que tu va faire une fonction.
Voire même deux.
Code:
1
2
3
4 ... as_base_of(int n, int base) { ... } ... binary_of(int n) {return as_base_of(n, 2);}
Et quant à la question sur la taille du tableau:
Réfléchis, quelle est le nombre de bits maximal d'un nombre entier en C sur la plupart des plate-formes d'aujourd'hui?
ha ok
64
super tout avance très bien,
je n'ai plus qu'à me lancer sur la dernière partie
elle consiste dans la continuité de ces exemple mais de partir sur une base 16, donc avec les lettres de A à F pour les nombres de 10 à 15
ça devrais aller
le truc bête de l’énoncé, est que je dois faire un tableau pour les reste de 0 à 9
et un tableau pour les reste en letttre de A à F
ce qui me complique l'affichage final car je ne devrait prendre pour chaque position que la valeur contenue dans un des tableau en fonction s'il est nul ou pas
je fais ça de suite et je poste si je but sur un soucis
Commence par te faire une fonction qui prend en entrée une valeur de "chiffre" et te retourne un caractère chiffre ou lettre, ça rendra les choses plus simples.
petit soucis de pratique
je dois afficher les résultat du tableau à l'envers
le code à l'endroit fonctionne
alors que le code inverser si dessous n'affiche rienCode:
1
2
3
4
5 for(i=0;i<compteur_tableau;i++) { printf("la valeur %d du tableau est %d\n",i,tableau [i]); }
qui vois pourquoi ? merciCode:
1
2
3
4
5
6 for(i=compteur_tableau;i=0;i--) { printf("la valeur %d du tableau est %d\n",i,tableau [i]); }
Personnellement, mon truc c'est de remplir le buffer en partant de la fin: D'abord insérer le caractère nul à la fin, puis mettre les "chiffres" un par un devant.
Vue que je suis aveugle, ben je vois rien contrairement à vous,
par contre vous voyez pas la même chose,
du coup je vois pas mieux
enfin, si vous voyez ce que je veux dire
Et si tu te concentrais attentivement sur les 3 instructions d'une boucle for (celles qui sont dans les parenthèses) ? Que signifie la première, la seconde (surtout dans ton cas) et bon la 3° on s'en fout mais peut-être que ça ne te fera pas de mal de te la remémorer aussi. A la limite, tu peux faire un comparatif, instruction par instruction, avec ton premier for (celui qui fonctionne).
Et surtout ne reviens pas nous dire "non je ne vois pas" sans rien écrire de plus. Si tu reviens ce sera soit en nous disant que t'as compris et en nous montrant ton code corrigé ; soit (dans le pire des cas) en nous écrivant textuellement ce que tu sais de ces 3 instructions for (instructionA; instrutionB; instructionC)...
C'est vrai. Le bug relevé par archMqx. est plus subtil (il m'est passé à coté). J'ai eu +3 mais lui il mériterait +4
Disons que celui que j'ai relevé est le principal qui bloque tout. Si tu le corriges, ça débloquera ton code et ça fonctionnera suffisemment pour que tu puisses voir plus de trucs se passer. Et dès lors ça devrait t'indiquer qu'il y a un second problème, problème relevé par archMqx...
pour ce que je comprend pour for
for (compteur; condition; modification du compteur)
compteur; pour moi le compteur est "i", qui démarre à la valeur du compteur du tableau
condition; la condition est que lorsque i=0, la boucle s’arrête
modification du compteur; réduire de 1, la valeur de i à chaque tour de boucle
quand j'ai tester en mettant i=1 à la place de i=0, j’obtiens une boucle infini
suite à des recherches j'ai trouvé la solution mais sans comprendre pourquoi
Code:
1
2 for(i=compteur_tableau-1;i>=0;i--)
compteur_tableau-1, j'ai compris, mais pourquoi "i>=0" et pas "i=0" ?
Première incompréhension.
s'explique ainsi:Code:for (expre 1; expr2; expr3) instruction
Si instruction se trouve être un bloc d'instruction, c'est pareil.expre1; tant que expr2 faire instruction expr3 fin tant que
Par ailleurs, tu confonds autre chose: = n'est pas ==.
je t'invite à relire ces explications.
Parce que i=0 est une affectation, pas une condition. Et la condition littérale serait "tant que" (donc "autant de fois que la condition est vraie") et non "jusqu'à ce qu'elle soit vraie".
Donc "tant que i >= 0, faire". En faisant un comparatif littéral avec la première boucle (où c'était écrit "tant que i < compteur_tableau") tu aurais pu t'en rendre compte tout seul...
je peine bêtement sur ce problème d'affectation,
j'oublie qu'en mettant "=" au lieu de "==" je crée une obligation et non une condition
j'attaque sur la dernière partie
qui consiste à passer en hexadécimal un nombre entier
et dans un seul tableau gérer des entier (1 à 9) et des lettres (A à E), dans un tableau char
le temps d'avancer sur ce problème je bloquerais surement dans l'affichage ou le stockage des informations dans le tableau
Oui mais même avec "==" ça n'aurait pas fonctionné non plus. Parce que i n'étant pas égal à 0, ta boucle n'aurait pas tourné une seule itération.
Sois pas négatif. Pense attentivement à ce qu'il faut faire, étape par étape, et traduis-le en instructions simples...
Tout est ok
j'ai fini cette dernière étape
merci à vous tous pour vos précieux conseil
je progresse
step by step
grâce à vous
Ouais mais tu nous mettrais ton code final ça serait un plus...
oui, pardon
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #include <stdio.h> char tableau[65]; int main(){ /*declaration des variables*/ int nombre, compteur_tableau=0,diviseur=16, reste; printf("veuiller saisir un nombre entier :\n"); scanf("%d",&nombre); while (nombre>0) { reste = nombre%diviseur; if(reste<9) tableau[compteur_tableau]='0'+reste; else tableau[compteur_tableau]='A' +(reste-10); nombre/=diviseur; compteur_tableau++; } /*affichage du resultat*/ for (nombre=compteur_tableau -1;nombre+1;nombre--){ printf ("%c", tableau[nombre]); } printf("\n"); return 0; }
Ne fais pas de globale, voyons.
Déclare le tableau dans main.
Pour le reste, ton code est raisonnable.
On pourrait ajouter une vérification sur la saisie (scanf n'est pas très adapté à la lecture)
Il y a une occasion pour utiliser l'opérateur ternaire.
ceci peut aussi s'écrire:Code:
1
2 if(reste<9) tableau[compteur_tableau]='0'+reste; else tableau[compteur_tableau]='A' +(reste-10);
Et éventuellement, je ferai bien une fonction pour cela.Code:tableau[compteur_tableau]= (reste<9) ? '0'+reste : 'A' +(reste-10);
Code:
1
2 //suppose que n est dans [0..15] char hex_digit_of(int n) { return (n<9) ? '0'+n : 'A' +(n-10);}