IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Table de multiplication du nombre x


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 149
    Par défaut Table de multiplication du nombre x
    Bonjours, je viens de commencer la programmation en langage C et j'ai un exercice à réaliser : nous devons afficher les y multiples du nombre x sous la forme :
    x fois 1 =
    x fois 2 =
    ...
    J'utilise Dev-C++ pour programmer sous Windows. J'ai essayer de faire quelque chose mais les résultats ne sont pas satisfaisant :
    #include <stdio.h>
    int main(){
    short i,a,x,y,j;
    printf("La table de quel nombre? \n");
    scanf("%d%*c", &y);
    printf("Combien de multiple? \n");
    scanf("%d%*c", &a);
    for(i=1;i<=a;x=y*i,i++){
    printf("%hx\n", x);
    }
    }
    Je veux donc que la boucle s'exécute "y" fois.
    Les problèmes que je remarque sont que lorsque j'exécute, la table commence à 0, puis lorsque les nombres dépassent 10, il me marque a, e ...
    Je débute en programmation donc si vous pouviez m'aider avec des explications simples je vous en serais reconnaissant.
    Merci d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Bonsoir et bienvenue.

    Merci d'utiliser les balises [code] et [/code] pour encadrer les extraits de programmes que tu nous présentes.

    Il y a beaucoup de petits travers dans ton code, notamment concernant l'initialisation de tes variables, qui sont pour ainsi dire incontournables lorsque l'on écrit ses premiers programme mais qui risquent malgré tout de te causer des soucis.

    Pour commencer, utilise des int ordinaires plutôt que des short, malgré la place qu'ils occupent, car tu ne manques pas de cette dernière et scanf() n'est pas une fonction facile : il faut que tu prennes soin à choisir les identifiants correspondant exactement aux variables que tu souhaites remplir car la fonction en question ne peut pas le faire pour toi. Tu risques d'obtenir des valeurs erronées et/ou des segfaults

    Ensuite, si tu ne les initialises pas explicitement, tes variables contiennent au départ une valeur indéfinie, qui correspond en fait à l'état de la mémoire là où on les a placées. Dans ton cas, cependant, elles ont l'air d'être initialisées à zéro par ton compilateur.

    Dans ta boucle, tu utilises le troisième paramètre de for pour définir la valeur de x :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i=1;i<=a;x=y*i,i++)
    Mais cette troisième expression n'est évaluée qu'après le tour de boucle. Il est donc normal que le premier résultat affiché soit zéro, et que tous les autres soient décalés d'un rang.

    Ensuite :
    « %x » sert à afficher un résultat en hexadécimal. Il est donc normal que les valeurs 10, 11, 12, etc. soient affichées « A, B, C, … ». Utilise « %d » à nouveau, à la place.

    Bon courage.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 149
    Par défaut
    Merci beaucoup de la rapidité de ta réponse. J'ai quasi tout réussi, sauf que je n'arrive pas à afficher la valeur de "y" lorsque j'exécute.
    J'ai marqué :
    printf("y \n",y); (je suis désolé je ne sais pas comment encadré les extrait avec [code] comme tu m'as demandé de le faire)
    mais il m'affiche toujours y et non la valeur que je défini au début.

    Sinon j'ai essayé d'écrire :
    printf("y fois %i = %d\n",y,i,x);
    sauf que là, il me faisait un autre calcul et je me retrouvé avec des sommes incohérente.
    Merci encore

    PS:voici ce que j'ai écrit :

    #include <stdio.h>
    int main(){
    int i;
    int a;
    int x;
    int y;
    int j;
    printf("La table de quel nombre? \n");
    scanf("%d%*c", &y);
    printf("Combien de multiple? \n");
    scanf("%d%*c", &a);
    for(i=1;i<=a;i++){
    x=y*i;
    printf("%y fois %i egale %d \n",y,i,x);
    }
    }

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Citation Envoyé par oieretxe Voir le message
    (je suis désolé je ne sais pas comment encadré les extrait avec [code] comme tu m'as demandé de le faire)
    Il suffit d'écrire [code] juste avant le début de ton code et [/code] (avec le slash) juste après sa fin. Ou alors, tu utilises le bouton de l'éditeur : http://club.developpez.com/aidenouve...es/Balises.gif .

    Pour le reste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%y fois %i egale %d \n",y,i,x);
    En fait, avec scanf() et printf(), les lettres précédées d'un deux-points comme « %i » représentent chacune un argument, ceux-là même que tu passes juste après, mais surtout leur type !

    — %d ou %i attendent un entier signé et le représentent en décimal ;
    — %u attend un entier non signé et l'écrit toujours en décimal ;
    — %x attend un entier non signé et l'écrit en hexadécimal ;
    — %s attend un pointeur sur une chaîne de caractère ;
    — %c attend un caractère (donc un entier de type char);
    — %f attend un nombre flottant de type double.
    etc.

    Si tous tes paramètres sont des entiers, il faut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("%d fois %d egale %d \n",y,i,x);
    Tout est là :
    http://man.developpez.com/man3/printf.3.php
    http://man.developpez.com/man3/scanf.3.php

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 149
    Par défaut
    Merci beaucoup vraiment, j'ai appris plus de chose sur la programmation en langage c avec toi qu'avec mon prof ^^

Discussions similaires

  1. [Turbo Pascal] Afficher la table de multiplication d'un nombre donné
    Par mounir101 dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 07/02/2015, 14h58
  2. Insertion multiple dans une table et limitation du nombre de lignes
    Par marcandre dans le forum Développement
    Réponses: 1
    Dernier message: 29/04/2011, 15h10
  3. Multiplication de nombres complexes
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 13/04/2006, 07h23
  4. [xml+xslt] débutant - multiplication de nombre
    Par Silvia12 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/11/2005, 11h04
  5. [T-SQL] exécuter un ALTER TABLE/COLUM multiple
    Par elderion dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/10/2005, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo