CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : demande d'aide programme debutant en C++

DébutPage précedente
1
Page suivantePage suivante
plisken4 plisken4
MP
Niveau 5
01 mai 2015 à 17:57:40

Bonjour,
J'essaye de faire un simple programme de conversion d'un entier vers du binaire mais j'ai du mal a traduire l'algo sur certaines parties, notamment je ne sais pas par quoi remplacer la fonction str et je ne sais pas comment concatener ddes variables.

voici mon programme :
https://www.noelshack.com/2015-18-1430495849-sans-titre.jpg

merci :)

Tikim Tikim
MP
Niveau 21
01 mai 2015 à 19:46:46

Déjà y'a un problème avec la variable 'binaire'. Tu veux que ce soit une chaîne de caractère non ? Là si c'est un char, c'est UN SEUL caractère. Il faut en faire un tableau de char, que je te conseille de mettre sous la forme de char*.

Ensuite quand tu fais 'binaire = str(nb%2) + binaire' tu oublies justement que tu travailles avec une variable de type 'char'. Un char c'est rien d'autre qu'un nombre entier en fait qui représente le code ASCII d'un caractère. Quand tu additionnes deux char, tu additionnes deux codes ASCII. Le code ASCII de '0' vaut 48, donc si tu additionnes (en char, donc) '0' + '0' tu obtiens 48+48 = 96, soit le code ASCII du caractère ' ` '.

Je réfléchis un peu et je te donne une structure de code qui devrait fonctionner mieux.

Tikim Tikim
MP
Niveau 21
01 mai 2015 à 20:02:26

Voici mon code :

#include <iostream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int main()
{


    int nb = 0;
    char* binaire;
    int taille = 0;
    int index = 0;

    cout << "Entrer un nombre : " << endl;
    cin >> nb;

    if(nb < 0)
    {
        return -1;
    }

    //Déterminer la taille du tableau
    while(pow(2,taille) < nb)
    {
        taille++;
    }

    //Allocation mémoire
    binaire = (char*) malloc((taille+1)*sizeof(char));
    if(binaire == NULL)
    {
        return -1;
    }

    //Initialisation du tableau
    for(int i = 0; i < taille; i++)
    {
        *(binaire+i) = ' ';
    }

    //On remplit avec les caractères
    while(nb!=0)
    {
        if(nb%2==0)
        {
            *(binaire + taille - index) = '0';
        }
        else
        {
            *(binaire + taille - index) = '1';
        }
        nb = nb/2;
        index++;
    }
    *(binaire + taille + 1) = '\0';

    //On affiche
    cout << endl << nb << " en binaire s'écrit : " << binaire << endl;

    free(binaire);
    return 0;
}

Sur pastebin : http://pastebin.com/WnNbWi9z

J'espère que ça reste propre, j'ai pas fait de C++ depuis des plombes, je code principalement en C embarqué.

[Nolimitee] [Nolimitee]
MP
Niveau 7
01 mai 2015 à 20:25:39

int		main(void)
{
 // str qui va contenir notre résultat en binaire
	std::string bin;
 // une valeur décimale à convertir en binaire
	int res = 10;
	
// tant que res est supérieur à 0
	while (res > 0)
	{
 // on rajoute le LSB (bit de poids faible) au début de la chaine
// puis on fait un +48 pour obtenir sa valeur en ascii (c.f table ascii)
		bin.insert(bin.begin(), (res & 1) + 48);
 // on décalle notre resultat de 1 vers la droite pour obtenir le LSB suivant
		res = res >> 1;
	}

	std::cout << bin << std::endl;
	return (0);
}
Message édité le 01 mai 2015 à 20:30:05 par [Nolimitee]
plisken4 plisken4
MP
Niveau 5
03 mai 2015 à 16:19:09

merci a vous ça va bien m'aider !

plisken4 plisken4
MP
Niveau 5
03 mai 2015 à 17:41:27

Bon du coup je vais essayer de faire un petit programme complet avec un petit menu qui permet de convertir un décimal vers hexadécimal et inversement.

Déjà voici l'algo que je viens de faire, il n'est pas complet il manque la partie hexa vers décimal, je préfère déjà valider la première partie.
Par contre la j'ai comme résultat une chaine de chiffres, je fais comment pour que 10 = A par exemple?

Programme conversion
choix : caractère
hexa : chaine
nb, k : entier

debut
    //boucle sur le menu
    Choix ← ‘’Z’’
    Tantque choix <> ‘’Q’’ et choix <> ‘’q’’
        
        //menu
        Afficher ‘’ conversion decimal vers hexadecimal…………1’’
        Afficher ‘’conversion hexadecimal vers decimal………….2’’
        Afficher ‘’quitter………………………………………………………….Q’’
        Saisir choix

        //conversion entier vers hexadecimal
        Si choix = ‘’1’’ alors
            Hexa ← ‘’ ‘’
            Afficher ‘’entrer un entier = ‘’
            Saisir nb
            Tantque nb <> 0
                hexa ←str(nb mod 2) + hexa
                nb ←nb div 16
            fin tantque
            afficher ‘’conversion en hexadecimal = ‘’ + hexa
        sinon

          //conversion hexadecimal vers decimal
Tikim Tikim
MP
Niveau 21
04 mai 2015 à 16:49:53

La méthode la plus simple c'est un switch avec les 16 cas (ou les chiffres + les 6). Après ya sûrement moyen d'être plus élégant et efficace mais ça c'est à toi de trouver l'optimisation :o))

plisken4 plisken4
MP
Niveau 5
09 mai 2015 à 20:11:51

un switch? j’insère ça comment dans mon algo?

plisken4 plisken4
MP
Niveau 5
14 mai 2015 à 12:03:20

:up:

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment