Programmer une table de multiplication [C]

Fermé
Robin3166
Messages postés
13
Date d'inscription
samedi 6 janvier 2018
Statut
Membre
Dernière intervention
13 mars 2018
- Modifié le 7 janv. 2018 à 00:03
luckydu43
Messages postés
3470
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
30 juin 2022
- 7 janv. 2018 à 12:40
Bonjour,


Je suis à mes débuts en programmation et je suis face à un exercice où il nous est demandé la chose suivante :

"Créer un programme qui demande d'entrer un entier entre 1 et 9 puis qui affiche sa table de multiplication".

Si l'on entre 5 le programme affichera donc :

1 X 5 = 5
2 X 5 = 10
...
9 X 5 = 45

En me basant sur mes connaissances je suis arrivé à ce code là, mais il est incomplet et je stagne, j'aurais donc aimé avoir votre avis. Je pense qu'il y a un trc à ajouter avec "for" ou "while" mais je bloque.

#include <stdio.h>

int main ( )  {
int nombre;

while ((nombre < 1) || (nombre > 9)) {
printf ("Entrez un nombre entre 1 et 9 à multiplier : ");
scanf ("%d", &nombre);
}

printf ("Voici la table de multiplication de %d", nombre);
nombre = 1;
while (nombre <= 10) {

}



A voir également:

3 réponses

luckydu43
Messages postés
3470
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
30 juin 2022
809
Modifié le 6 janv. 2018 à 23:31
Bonjour !

Je vais répondre... en Java :-D \o/

Bah oui, chacun son code, à toi de comprendre mais tkt c'est documenté ;-)

Info sur le do while en C


// méthode main
public static void main() {
    // déclaration de l'attribut nombre
    int nombre;

    // on met un do while parce que le test DOIT ÊTRE exécuté APRES la saisie de l'utilisateur
    // Aussi, parce que l'on ne sait pas combien de tentatives l'utilisateur va faire, le while (ou do-while) est justifié.
    // Dans tes boucles définies : privilégie le for. Y a qu'en Basic sur une Graph 100(+) que le for est moins
    // performant que le while (sur une Graph 35+/75/85/95 c'est déjà plus le cas)
    // Ah et puis ça permet de mieux comprendre la logique du code pour un autre 
    // qui le relit derrière ;-)
    do {
        // je te pique ta ligne de code en espérant qu'elle soit bonne
        scanf ("%d", &nombre);
        // Idem
        // Attention : la table de multiplication c'est de 1 à 10 ;-)
        while ((nombre < 1) || (nombre > 10)) 
    }
    //Idem
    printf ("Voici la table de multiplication de %d", nombre);
    // On est sur un intervalle de 1 à 10, donc vu qu'il est défini on utilise un for
    // vu que le test est <, c'est du strictement inférieur : le 11 est exclu
    // Note que le for est écrit en Java ;-)
    for (int vIncrement = 1 ; i < 11 ; i++) {
        // Je ne sais pas comment tu fais pour chainer les variables... essaie de creuser ;-)
        printf ("Voici la table de multiplication de %d = %d x %e = %f", nombre, vIncrement, nombre*vIncrement);
    }
}


Voilà voilà, j'espère que t'as de meilleures pistes ;-)

EDIT : J'ai corrigé des coquilles.
La vie quotidienne peut vite vous rendre accro et vous faire perdre aux jeux-vidéos ! 
Un peuple sacrifiant sa liberté pour plus de sécurité perd les deux.
0
Robin3166
Messages postés
13
Date d'inscription
samedi 6 janvier 2018
Statut
Membre
Dernière intervention
13 mars 2018

6 janv. 2018 à 23:58
Merci de ta répons,e elle m'apporte quelques pistes, après je suis encore pas assez au point pour passer du Java en C, je vais attendre de voir si quelqu'un peut répondre sur le langage C du coup ^^'
0
luckydu43
Messages postés
3470
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
30 juin 2022
809
7 janv. 2018 à 00:04
Bah déjà lis le code et les commentaires :-D

Tu sais, si tu fais des cours d'informatique, c'est pas pour qu'on te file le code tout fait tout mâché prêt à compiler, hein
Normalement tu devrais LARGEMENT transcrire ce code en C.
Y a peu de différence.
Surtout que là y a pas de classes, c'est un main tout facile, j'ai utilisé ton code le plus possible... là, ce code en java ne marche pas : les printf et les scanf n'existent pas en java.
C'est system.out.println() et Scanner.nextInt() leurs équivalents... je te laisse imaginer que j'allais pas mettre ça à la place ;-)
0
Robin3166
Messages postés
13
Date d'inscription
samedi 6 janvier 2018
Statut
Membre
Dernière intervention
13 mars 2018
> luckydu43
Messages postés
3470
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
30 juin 2022

7 janv. 2018 à 00:25
J'ai bien lu ton commentaire et ton code avant de répondre :)

Pour ce qui est du i et du i++ ils vont faire référence à quoi dans le code ici ? Comment le compilateur va les relier au reste du code ?
0
Robin3166
Messages postés
13
Date d'inscription
samedi 6 janvier 2018
Statut
Membre
Dernière intervention
13 mars 2018

7 janv. 2018 à 00:43
Si j'ajoutais en ligne de code quelque chose du genre :


i = 0;
i = (i +1) * nombre


Est-ce que ça serait une piste pour l'enchainement de variables ?
0
luckydu43
Messages postés
3470
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
30 juin 2022
809
Modifié le 7 janv. 2018 à 00:45
C'est déjà un peu mieux que "je vais attendre de voir si quelqu'un peut répondre sur le langage C", tu trouves pas ? :-)

Alors déjà j'ai fait une boulette :-D
Voici la bonne :
for (int vIncrement = 1 ; vIncrement < 11 ; vIncrement ++) {}

Le compilateur sait qu'un for attend des paramètres.
En particulier, obligatoirement une déclaration de variable avec sa valeur (détermine une des bornes de l'intervalle) et une condition (détermine l'autre borne de l'intervalle)
Le troisième paramètre, optionnel sert à définir le pas. Il peut être négatif, à virgule... à chaque itération, la fonction for appliquera l'opération du pas sur sa variable.
Ces paramètres sont placés entre parenthèses, c'est comme ça que le compilateur comprend que c'est eux.

int vIncrement = 1
Ça c'est pour définir la variable qui servira à effectuer la boucle itérative.
Tu reconnais là une déclaration classique de variable, sauf que là le compilateur sait que vu qu'elle est dans les parenthèses correspondantes aux paramètres de la fonction for, c'est c'est variable qui... tu as compris

On sépare les paramètres avec un point-virgule, question de compilation : le compilateur comprend qu'on passe à autre chose

vIncrement < 11
Bah ça c'est pour dire que la variable ne doit pas atteindre 11

vIncrement ++
C'est une opération d'incrémentation.
Elle correspond à vIncrement = vIncrement +1
vIncrement -- fonctionne de la même manière.
Et tu peux remplacer vIncrement ++ par vIncrement = vIncrement +1 sans problèmes ;-)

EDIT : Je vais répondre à ton 2ème message dans quelques minutes ;-)
0
luckydu43
Messages postés
3470
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
30 juin 2022
809
Modifié le 7 janv. 2018 à 00:51
Si j'ajoutais en ligne de code quelque chose du genre :
i = 0;
i = (i +1) * nombre

Oui mais non.
Printf implique un retour à la ligne, si je ne me trompe pas.
Tu DOIS faire une chaîne.

Je viens de tomber sur un site

printf("%i fois %i est %li\n", A, B, (long)A*B);

En fait :
%i attend un integer
%d un décimal
%s une string (appelée chaîne de caractères)

Du coup chez toi ça fait
printf ("Voici la table de multiplication de %i = %i x %i = %i", nombre, nombre, vIncrement, nombre*vIncrement);

pourquoi pas besoin du long ? le max est 10, et 10*10 = 100.
Ca rentre dans un int, pas besoin de caster en long.
0
Robin3166
Messages postés
13
Date d'inscription
samedi 6 janvier 2018
Statut
Membre
Dernière intervention
13 mars 2018

7 janv. 2018 à 02:03
Après quelques essais j'ai la version finale !!!

#include <stdio.h>

int main ( ) {
int nombre;
int vIncrement;

do {
printf ("Entrer un chiffre à multiplier entre 1 et 10\n");
scanf ("%d", &nombre);
} while ((nombre < 1) || (nombre > 11));

for (vIncrement = 1 ; vIncrement < 11 ; vIncrement ++) {
printf ("Voici la table de multiplication de %i = %i x %i = %i \n", nombre, nombre, vIncrement, nombre * vIncrement);
}}
0
luckydu43
Messages postés
3470
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
30 juin 2022
809
Modifié le 7 janv. 2018 à 02:46
Le point-virgule à la fin du while, c'est ça ? :-)
Alors, ça marche bien ? J'ai de la conf CygWin qui m'attend sur Netbeans, chui pas ops pour tester ca :-D
0
Robin3166
Messages postés
13
Date d'inscription
samedi 6 janvier 2018
Statut
Membre
Dernière intervention
13 mars 2018

7 janv. 2018 à 10:25
En fait il fallait replacer le int vIncrement au début de mon code. Et oui le compilateur demandait un point virgule après while. Encore merci en tout cas ^^
0
luckydu43
Messages postés
3470
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
30 juin 2022
809
7 janv. 2018 à 12:40
Parfait \o/ Tu peux passer en résolu ;-)
0