CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • 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 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Quel est le meilleur code ?

Komjsuiskick
Komjsuiskick
Niveau 10
27 avril 2013 à 15:17:31

Bonjour
Je suis débutant C, et j'ai fais un mini programme qui convertit un nombre inférieur a 255 en binaire (je pourrais aller plus loin que les 8bits, mais j'ai la flemme :hap: )

Ne vous moquez pas de moi :peur: je viens a peine de commencer

J'ai fais de code qui reviennent au même résultat, quel est le meilleur selon vous ?

les voici

code 1 :

  1. include <stdio.h>

//Ce programme convertit un nombre en binaire

int main()
{
int nombre = 0;
printf("Entrez un nombre inférieur a 255 (nombre 8 bits)\n"); //Un nombre supérieur a 255 n'est plus un nombre de 8 bit
scanf("%d", &nombre); //On demande a l'utilisateur d'entré un nombre
if (nombre <= 255)
{
int nombre8 = nombre % 2; // on fais les calculs
nombre = nombre / 2;
int nombre7 = nombre % 2;
nombre = nombre / 2;
int nombre6 = nombre % 2;
nombre = nombre / 2;
int nombre5 = nombre % 2;
nombre = nombre / 2;
int nombre4 = nombre % 2;
nombre = nombre / 2;
int nombre3 = nombre % 2;
nombre = nombre / 2;
int nombre2 = nombre % 2;
nombre = nombre / 2;
int nombre1 = nombre % 2;
printf("%d%d%d%d%d%d%d%d\n\n", nombre1, nombre2, nombre3, nombre4, nombre5, nombre6, nombre7, nombre8);
// On écrit la réponse en renvoyant la valeur de chaques variables dans le sens inverse des calculs
}

else
{
printf("merci d'enter un nombre inférieur ou égal a 255\n\n ");
return 0;
}

}

code 2 :

  1. include <stdio.h>

// Ce programme est un test, il fais la même chose que "binaire.cpp"

int main()
{
int nombre = 0;
printf("Entrez un nombre inférieur a 255 (nombre 8 bits)\n"); //Un nombre supérieur a 255 n'est plus un nombre de 8 bit
scanf("%d", &nombre); //On demande a l'utilisateur d'entré un nombre
if (nombre <= 255)
{
int binaire[8]; //on initialise un tableau de 8 variable
binaire[1] = nombre % 2; // on fais les calculs nécéssaire
nombre = nombre / 2;
binaire[2] = nombre % 2;
nombre = nombre / 2;
binaire[3] = nombre % 2;
nombre = nombre / 2;
binaire[4] = nombre % 2;
nombre = nombre / 2;
binaire[5] = nombre % 2;
nombre = nombre / 2;
binaire[6] = nombre % 2;
nombre = nombre / 2;
binaire[7] = nombre % 2;
nombre = nombre / 2;
binaire[8] = nombre % 2;
printf("%d%d%d%d%d%d%d%d\n\n", binaire[8], binaire[7], binaire[6], binaire[5], binaire[4], binaire[3], binaire[2], binaire[1]); // On écrit la réponse en renvoyant la valeur de chaques variables dans le sens inverse des calculs

}

else
{
printf("merci d'enter un nombre inférieur ou égal a 255\n\n ");
return 0;
}

}

Merci :)
N'hésitez pas a me le dire si mon programme est mauvais :)

Thevoxelcloud
Thevoxelcloud
Niveau 10
27 avril 2013 à 15:20:54

Mets ton code sur pastebin.com s'il te plait.

Komjsuiskick
Komjsuiskick
Niveau 10
27 avril 2013 à 15:25:20

code 1 : http://pastebin.com/SKx33CC9

code 2 : http://pastebin.com/TZpu9A0s

chris_27
chris_27
Niveau 10
27 avril 2013 à 15:28:08

Bonjour,

Les deux codes sont malheureusement mauvais. :(

L'une des règles de bases de la programmation, c'est d'automatiser les tâches répétitives. Ici, on voit que tu vais oui fois de suite le même calcul ("/ 2" suivi d'un "% 2"). Un bon code est un code où cette suite d'opération répétée n'apparait qu'une seule et unique fois.

Après, ta question porte sur l'utilisation ou non d'un tableau. Là, ça dépend de la finalité du programme. Si tu as juste besoin d'afficher la représentation en binaire du nombre, de simples variables peuvent suffire. En revanche, si tu veux garder une trace du résultat des calculs, et si tu veux faire cela proprement (avec une boucle, donc), il te faudra un tableau.

PS: à noter que, en vrai, tu peux tester si le bit numéro k est à 0 ou à 1 quasi-gratuitement via :

    if (nombre & (1u<<k))
    { /* bit k = 1 */
        ...
    }
    else
    { /* bit k = 0 */
        ...
    }

chris_27
chris_27
Niveau 10
27 avril 2013 à 15:30:47

Je tiens à remercier Komjsuiskick. C'est tellement rare de voir quelqu'un qui a la présence d'esprit d'activer la coloration syntaxique de pastebin que ça mérite d'être souligné. :ok:

Komjsuiskick
Komjsuiskick
Niveau 10
27 avril 2013 à 15:31:17

C'est bien ce qu'il me semblait pour la répétition :(
Le problème, c'est que je n'arrive pas a imaginer un code ou il n'y a pas de répétition de calcul :(

chris_27
chris_27
Niveau 10
27 avril 2013 à 15:35:25

Tu as déjà vu la notion de boucle ?

micil
micil
Niveau 9
27 avril 2013 à 15:56:49

comme ça c'est mieux :
http://pastebin.com/enURFsTc

Dbzgokussj2
Dbzgokussj2
Niveau 10
27 avril 2013 à 15:57:56

Il n'y a pas de différence, sauf que l'un utilise un tableau, et l'autre des variables. :oui:

Depuis combien de temps fais-tu de la programmation ?
Si tu viens à peine de débuter, et que tu ne connais pas les boucles, c'est bien.
Sauf que le principe d'une machine est d'automatiser des tâches.

Et généralement, quand tu répètes une tâche plus de 2-3 fois dans un programme, c'est qu'elle peut être écrite d'une meilleures façon, plus courte afin de ne pas dupliquer du code.

Les méthodes boucles while et for te permettent de faire ça.
Si tu regardes bien, tu fais 8 fois la même instruction ici.

Tu pourrai donc utiliser une boucle "for", qui serait répétées 8 fois, mais qui te permettrait de n'écrire qu'une seule fois les lignes !

int nombre8 = nombre % 2; // on fais les calculs
nombre = nombre / 2;

Dbzgokussj2
Dbzgokussj2
Niveau 10
27 avril 2013 à 15:58:30

Eh mince, j'ai commencé à écrire mon message, j'me suis absenté une bonne demi heures et voila que t'as déjà ma réponse posté plus haut ! :o))

micil
micil
Niveau 9
27 avril 2013 à 16:08:04

et met un boucle infini du début a la fin car si on met un nombre plus grand que 255 le logiciel s'arrete apres le message.

Komjsuiskick
Komjsuiskick
Niveau 10
27 avril 2013 à 16:31:21

Cela fais 1 semaine que j'ai commencé a apprendre de manière sérieuse :hap:
Merci a vous :)
micil : Je savais même pas que l'on pouvait utilisé une variable de cette manière pour un tableau :o))

chris_27
chris_27
Niveau 10
27 avril 2013 à 16:32:16

Le message de micil ci-dessus n'existe pas, donc vous ne l'avez pas lu./

Komjsuiskick
Komjsuiskick
Niveau 10
27 avril 2013 à 16:33:15

Et j'avais déjà vu la notion de boucle, mais cela ne m''est pas venu a l'idée de l'utiliser
J'y penserais la prochaine fois :hap:

micil
micil
Niveau 9
27 avril 2013 à 16:37:57

Chris_27 > pourquoi ça ? :(

UItraxion
UItraxion
Niveau 10
27 avril 2013 à 17:09:52

parce que meme si il rentre un nombre plus petit que 255 le programme (et non le "logiciel"...) se terminera quand même

parce que les boucles infinies c'est dégueulasse...

parce que l'auteur s'en fiche que son programme se termine ou pas...

micil
micil
Niveau 9
27 avril 2013 à 17:27:07

si on met un nombre plus grand que 255, ça met: "merci d'entrer un ..."
mais on peut pas entrer, c'est pour ca que j'ai dit de faire un boucle, ce serais plus logique

si il veut pas de boucle infini il a qu'a arreter le boucle apres le résultat

micil
micil
Niveau 9
27 avril 2013 à 17:33:50

et désolé pour les fautes, je viens de remarquer que je dit boucle en masculin depuis le début :rire:

chris_27
chris_27
Niveau 10
27 avril 2013 à 17:55:31

micil : parce que les "boucles infinies" dans un programme, c'est un bug et rien d'autre.

chris_27
chris_27
Niveau 10
27 avril 2013 à 20:39:21

Ouais... mais non. Il y a une limitation imposée par scanf dont il faut tenir compte, ainsi que des détails sur le type (unsigned VS signed) pour assurer un algorithme correct.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment