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

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2017
    Messages : 59
    Points : 26
    Points
    26
    Par défaut Petit Exercice de Tableau (Que je n'arrive pas à résoudre.)
    Bonsoir à tous, j'espère que vous allez bien

    Voici un petit exercice qu'il ma été donner de faire mais je n'arrive pas à le résoudre je suis dessus depuis 10h du matin... Je sollicite donc vos connaissances en la matière afin que vous m'aidiez à y voir plus clair Svp, merci. (Le programme n'est pas complet mais étant donné que je bug déjà à ce niveau là, je bloque aussi à un autre endroit celui de la répétition du message : entrée une valeur "V" tant qu'elle n'est pas dans le Tableau).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
    /* Écrire un programme qui gère si quelqu'un saisi une valeur "V" qui ne ce trouve pas dans un tableau.
    Le programme doit alors renvoyer un message "Valeur non trouvé" et il doit donner une 
    seconde chance à l'utilisateur de saisir une valeur "V" 
    Jusqu’à ce que cette valeur ce trouve dans le Tableau et affiche alors un message "Valeur trouvé" ...
    */
     
    #include <iostream>
    using namespace std;
     
    int main()
    {
    	int Tab[10];
    	int i,NombV;
     
    //Entrez de valeur dans le Tableau
    cout <<"Veuillez entrer dix valeurs dans le Tableau " <<endl;
    for (i=0;i<10;i++)
    {
    	cout <<"Valeur N° " << i + 1 <<" : ";
    	cin >> Tab[i];
    }
    cout <<endl;
    //Affiche le tableau avec les valeurs entrée
    cout <<"Tab : ";
    for (i=0; i<10;i++)
    {
    	cout <<Tab[i]<<",";
    }
    cout <<endl<<endl;
     
    //Entrez une valeur ""V""
    cout <<"Veuillez entrer une valeur V : ";
    cin >> NombV;
     
    //Boucle tant que la valeur V ne ce trouve pas dans le Tableau (Je ne trouve pas comment faire ...)
    cout <<endl<<endl;
     
     
     
     
    //Recherche si la valeur est dans le tableau
    for (i=0;i<10;i++)
    {
    	if (NombV == Tab[i])
    	{
    		cout <<"La valeur est dans le Tableau !"<<endl;
    	}
    //Ici non plus , je bug et je n'arrive pas à comprendre comment faire pour sortir du Tableau pour m'afficher un seul message si la valeur "V" n'est pas dans le Tableau et non pas à chaque indice ou ne ce trouve pas la Valeur "V" .... 
    	else
    	{
    		cout << "La valeur n'est pas dans le Tableau " <<endl;
    	}
    }
     
    }
    Je vous remercie d'avance pour vos réponses.

    Bonne soirée.

    Aigle-Royal.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2011
    Messages : 685
    Points : 1 487
    Points
    1 487
    Par défaut
    Hello,

    Tu cherches à obtenir que ton code s'exécute "tant que" l'assertion "trouvé" n'est pas "vrai".

    Tu devrais t'en sortir avec une boucle while et une variable bool.

    Bon courage.
    Nullius in verba

  3. #3
    Membre actif
    Homme Profil pro
    Développeur
    Inscrit en
    août 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : août 2011
    Messages : 71
    Points : 211
    Points
    211
    Par défaut
    Bonjour, l'idée serait de mettre ce bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //Recherche si la valeur est dans le tableau
    for (i=0;i<10;i++)
    {
    	if (NombV == Tab[i])
    	{
    		cout <<"La valeur est dans le Tableau !"<<endl;
    	}
    //Ici non plus , je bug et je n'arrive pas à comprendre comment faire pour sortir du Tableau pour m'afficher un seul message si la valeur "V" n'est pas dans le Tableau et non pas à chaque indice ou ne ce trouve pas la Valeur "V" .... 
    	else
    	{
    		cout << "La valeur n'est pas dans le Tableau " <<endl;
    	}
    }
    dans une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     bool val_est_trouvee(int tab[],int val)
    ensuite effectivement comme le dit Kaamui il faut faire une boucle tant que tu ne trouve pas la valeur (en utilisant la fonction).
    Personellement j'utiliserait plus car tu dois saisir au moins une fois la valeur et ça rend la boucle un peu plus simple à écrire.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2017
    Messages : 59
    Points : 26
    Points
    26
    Par défaut Réponse Kaamui
    Citation Envoyé par Kaamui Voir le message
    Hello,

    Tu cherches à obtenir que ton code s'exécute "tant que" l'assertion "trouvé" n'est pas "vrai".

    Tu devrais t'en sortir avec une boucle while et une variable bool.

    Bon courage.
    Bonsoir Kaamui, merci de ta réponse, j'ai tester avec la valeur Booléen mais ce n'est pas ce que je veux, car la il ne fait que répéter le message si ma valeur V n'est pas vrais, sauf que je veux qu'il répéter le message tant que la Valeur V ne ce trouve pas dans le Tableau et ca je n'arrive pas à faire...

    Je n'arrive pas à sortir du Tableau en fait, donc je teste bien les Valeurs de mon Tableau mais pour qu'il répéter une seule ligne je n'y parviens pas car je suis obligé de rentrer dans un boucle for ou while qui va boucler 10 fois ...

    Bonne soirée.

    Aigle-Royal.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2017
    Messages : 59
    Points : 26
    Points
    26
    Par défaut Réponse à Pjlan.
    Citation Envoyé par pjlan Voir le message
    Bonjour, l'idée serait de mettre ce bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //Recherche si la valeur est dans le tableau
    for (i=0;i<10;i++)
    {
    	if (NombV == Tab[i])
    	{
    		cout <<"La valeur est dans le Tableau !"<<endl;
    	}
    //Ici non plus , je bug et je n'arrive pas à comprendre comment faire pour sortir du Tableau pour m'afficher un seul message si la valeur "V" n'est pas dans le Tableau et non pas à chaque indice ou ne ce trouve pas la Valeur "V" .... 
    	else
    	{
    		cout << "La valeur n'est pas dans le Tableau " <<endl;
    	}
    }
    dans une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     bool val_est_trouvee(int tab[],int val)
    ensuite effectivement comme le dit Kaamui il faut faire une boucle tant que tu ne trouve pas la valeur (en utilisant la fonction).
    Personellement j'utiliserait plus car tu dois saisir au moins une fois la valeur et ça rend la boucle un peu plus simple à écrire.
    Bonsoir Pijlan la fonction me fait le même soucis elle va tester mes valeurs de Tableau introduite donc les 10 valeurs pour voir si la valeur ce trouve bien dans le Tableau cela je sait le faire, mais ce que je ne sais pas faire c'est afficher une seule ligne(message) sans les répétition des valeurs non trouvée dans le Tableau.

    Donc si mes valeurs son 1.4.6.7.9.8.5.2.10.11 et que j'entre la valeur V qui est 50 si il ne la trouve pas dans le Tableau il m'affiche un message Valeur non trouvée et me demande d'introduire le Nombre V encore une fois tant qu'il ne trouve pas la valeur dans le Tableau.
    Or je sais chercher la Valeur dans le Tableau et l'affichée sauf qu'il va m'afficher tout les valeurs ou ne ce trouve pas 50 vu que je doit créer une boucle pour tester les valeurs dans le Tableau, donc du coup dans le cas présent je vais avoir 10 messages de " valeur non trouvé , veuillez introduire le nombre v" (10 fois) or comme je l'ai dit je ne le veux qu'une seule fois et c'est cela que je n'arrive pas à comprendre comment faire... Merci.

    Bonne soirée.

    Aigle-Royal.

  6. #6
    Membre actif
    Homme Profil pro
    Développeur
    Inscrit en
    août 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : août 2011
    Messages : 71
    Points : 211
    Points
    211
    Par défaut
    Bonjour,
    Justement c'est ce a quoi devrait t'aider une fonction (il vaudrait mieux pour ça enlever le message de la fonction).
    si tu trouve la valeur dans le tableau alors tu retourne 'true'
    sinon tu retourne false.

    par contre attention dans ton approche actuelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //Recherche si la valeur est dans le tableau
    for (i=0;i<10;i++)
    {
    	if (NombV == Tab[i])
    	{
    		cout <<"La valeur est dans le Tableau !"<<endl;
    	}
    //Ici non plus , je bug et je n'arrive pas à comprendre comment faire pour sortir du Tableau pour m'afficher un seul message si la valeur "V" n'est pas dans le Tableau et non pas à chaque indice ou ne ce trouve pas la Valeur "V" .... 
    	else
    	{
    		cout << "La valeur n'est pas dans le Tableau " <<endl;
    	}
    }
    ce n'est pas juste car si tu trouve la valeur il faut sortir de la boucle (ou de la fonction si tu fais une fonction) et le else n'est pas bon car tu sais que la valeur n'est pas dans cette case 'i' spécifique du tableau mais ça ne dit rien de plus.

    Avec une fonction, tu sais que si tu n'as pas retourné true pendant la boucle c'est que tu n'as pas trouvé la valeur.
    Sans fonction, il faut gérer un booléen en plus qui marque le fait d'avoir trouvé la valeur et tu peux utiliser l'instruction ou un test supplémentaire dans la condition du for pour sortir.
    Je te conseille quand même vivement de faire une fonction.

    Au passage écrire 10 partout dans ton code,ce n'est pas terrible car le jour ou tu veux passer a 100 (par exemple) tu dois changer cela partout.
    Tu devrais utiliser une pour définir ta constante.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2017
    Messages : 59
    Points : 26
    Points
    26
    Par défaut Réponse à Pjlan.
    Citation Envoyé par pjlan Voir le message
    Bonjour,
    Justement c'est ce a quoi devrait t'aider une fonction (il vaudrait mieux pour ça enlever le message de la fonction).
    si tu trouve la valeur dans le tableau alors tu retourne 'true'
    sinon tu retourne false.
    par contre attention dans ton approche actuelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //Recherche si la valeur est dans le tableau
    for (i=0;i<10;i++)
    {
    	if (NombV == Tab[i])
    	{
    		cout <<"La valeur est dans le Tableau !"<<endl;
    	}
    //Ici non plus , je bug et je n'arrive pas à comprendre comment faire pour sortir du Tableau pour m'afficher un seul message si la valeur "V" n'est pas dans le Tableau et non pas à chaque indice ou ne ce trouve pas la Valeur "V" .... 
    	else
    	{
    		cout << "La valeur n'est pas dans le Tableau " <<endl;
    	}
    }
    ce n'est pas juste car si tu trouve la valeur il faut sortir de la boucle (ou de la fonction si tu fais une fonction) et le else n'est pas bon car tu sais que la valeur n'est pas dans cette case 'i' spécifique du tableau mais ça ne dit rien de plus.
    Oui en effet ....

    Avec une fonction, tu sais que si tu n'as pas retourné true pendant la boucle c'est que tu n'as pas trouvé la valeur.
    Sans fonction, il faut gérer un booléen en plus qui marque le fait d'avoir trouvé la valeur et tu peux utiliser l'instruction ou un test supplémentaire dans la condition du for pour sortir.
    Je te conseille quand même vivement de faire une fonction.
    Merci pour l'info, je suis parvenu à résoudre l'exercice à l'aide d'un ami , nous n'avons pas utilisé de booléen et pas de fonction non plus... mais un while.


    Au passage écrire 10 partout dans ton code,ce n'est pas terrible car le jour ou tu veux passer a 100 (par exemple) tu dois changer cela partout.
    Le 10 est la uniquement pour le teste il est évident que pour de plus grande grandeur j'aurai utilisé une valeur plus grande ...
    Tu devrais utiliser une pour définir ta constante.

    Ok merci pour toute c'est informations

    Petit question on ma demander de faire un autre exercice qui à des approches en mathématique qui est le suivant :
    - Deux nombres n1 et n2 sont des nombres amis si n2 est égale à la somme des diviseurs
    de n1 (diviseurs inférieurs à n1) et que n1 est égale à la somme des diviseurs de n2 (diviseurs inférieur à n2).

    Cependant je n'ai aucune notion en mathématique , et je ne sais pas du tout vers quoi m'orienter dans les mathématiques pour pouvoir résoudre cet exercice, aurai tu stp toi ou quelqu'un d'autre ici présent sur le forum, une direction à suivre et à me donner ? Merci.

    Ps: si tu veux voir comment on à résolu le code sans booléen et fonction dit le moi je te le copierai ici.

    Bonne journée à toi,

    Aigle-Royal.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    janvier 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2020
    Messages : 6
    Points : 26
    Points
    26
    Par défaut
    Bonjour Aigle-Royal,

    Petit question on ma demander de faire un autre exercice qui à des approches en mathématique qui est le suivant :
    - Deux nombres n1 et n2 sont des nombres amis si n2 est égale à la somme des diviseurs
    de n1 (diviseurs inférieurs à n1) et que n1 est égale à la somme des diviseurs de n2 (diviseurs inférieur à n2).

    Cependant je n'ai aucune notion en mathématique , et je ne sais pas du tout vers quoi m'orienter dans les mathématiques pour pouvoir résoudre cet exercice, aurai tu stp toi ou quelqu'un d'autre ici présent sur le forum, une direction à suivre et à me donner ? Merci.
    Un diviseur d d'un nombre entier n c'est simplement un nombre pour lequel il existe un nombre entier m tel que n = m * d. On dit aussi que d divise n. Par exemple : 2 est un diviseur de 10 car 10 = 5 * 2, mais 4 n'est pas un diviseur de 10 car 10 = 2.5 * 4 et 2.5 n'est pas un entier.

    Donc ce que tu dois faire, c'est une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned somme_diviseurs(unsigned n)
    qui ajoute entre eux tous les entiers qui divisent n.

    En C++, tu peux vérifier si un nombre divise un autre facilement grâce au modulo, n % d == 0 si et seulement si d divise n car n % d est le reste de la division euclidienne : https://fr.wikipedia.org/wiki/Division_euclidienne.

    Enfin, il ne reste plus qu'à vérifier que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n1 == somme_diviseurs(n2) && n2 == somme_diviseurs(n1)
    Pour aller plus loin et optimiser le code tu peux noter que :
    1. 1 divise n pour tout n, puisque n = n * 1, donc pas besoin de tester ce cas, la boucle dans somme_diviseurs peut donc commencer à 2, en n'oubliant pas d'initialiser la somme à 1 !
    2. (n / 2) divise forcément n (si (n / 2) est entier !) puisque n = 2 * (n / 2), mais aucun nombre supérieur à (n / 2) et inférieur à n ne peut diviser n, puisqu'alors le m qui marcherait serait compris entre 1 et 2, et il n'y a pas d'entiers entre 1 et 2 ! (exemple : 10 = 6 * 1.6666..., 20 = 11 * 1.8181...) Donc, la boucle dans somme_diviseurs peut s'arrêter à (n / 2) inclus.


    Bon courage !

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2017
    Messages : 59
    Points : 26
    Points
    26
    Par défaut Réponse à Julien Lopez.
    Bonjour , Julien, merci pour ta réponse.
    Cependant j'ai une question concernant ce que tu as dit.


    Mais aucun nombre supérieur à (n / 2) et inférieur à n ne peut diviser n, puisqu'alors le m qui marcherait serait compris entre 1 et 2, et il n'y a pas d'entiers entre 1 et 2 ! (exemple : 10 = 6 * 1.6666..., 20 = 11 * 1.8181...) Donc, la boucle dans somme_diviseurs peut s'arrêter à (n / 2) inclus.

    Je n'arrive pas très bien à comprendre cette ligne que veux tu dire par là ?

    Je te remercie d'avance pour ta réponse.

    Bonne journée.

    Aigle-Royal.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2017
    Messages : 59
    Points : 26
    Points
    26
    Par défaut Est-ce que quelqu'un peu me dire pourquoi j'ai un soucis de conversion dans ce code merci.
    Bonjour à tous, j'essaye de faire mon code du Nombre amis, mais j'y vais étape par étape ...
    j'ai donc déjà écris un bout de code, mais sa bug j'ai un soucis de conversion visiblement
    quelques part.
    Voici le message du debugeur :
    ||=== Build: Debug in NombresAmis (compiler: GNU GCC Compiler) ===|
    /home/yannick/Documents/C++ Projets/Exercice du site internet/NombresAmis/main.cpp||In function ‘int main()’
    /home/yannick/Documents/C++ Projets/Exercice du site internet/NombresAmis/main.cpp|70|error: invalid operands of types ‘float’ and ‘int’ to binary ‘operator%’|
    ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    using namespace std;
     
    int main()
    {
        int i;
        float Somme,Nb1;
        int Tab[100];
     
    //Introduction des deux nombres par l'utilisateur.
        cout <<"Veuillez entrer le premier nombre Svp :";
        cin >> Nb1;
     
     
        for (i = 0; i < Nb1; i++)
        {
            Somme = Nb1 / i;
            Tab[i] = Somme;
     
            if (Somme % i == 0)
            {
                Tab[i] = Somme;
                cout <<"Tab i : " << Tab[i] <<endl;
            }
     
        }
     
     
     
     
     
        return 0;
    }
    Je n'arrive pas bien à voir ou est le soucis, je sais que c'est en rapport avec le int et le float dans mes déclaration de variable
    mais j'ai mis tout à float et j'ai eu un autre message d'erreur de conversion encore ce qui du coup est incompréhensible pour moi
    actuellement, j'aurai donc besoin de votre aide pour voir ou cela bug et comment le résoudre.

    Je vous remercie d'avance et vous souhaite une excellente journée.

    Aigle-Royal.

    Ps : Je n'utilise pas encore de fonction dans le code c'est voulu pour le moment.

  11. #11
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    octobre 2004
    Messages
    11 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : octobre 2004
    Messages : 11 336
    Points : 28 719
    Points
    28 719
    Par défaut
    Salut,

    La réponse est simple : somme et nb sont des float, c'est à dire, des valeurs numériques réelles, comme celle de pi (3.1415926), par exemple.

    Or, ton tableau est prévu pour contenir des valeurs entières (1, 15, 256 397, ....). C'est simplement pas pareil, un peu comme ce que l'on apprend à l'école gardienne: on ne peut pas comparer des pommes avec des poires, hé ben, C++ considère que int et float, ce sont deux choses totalement différentes .

    Il y a moyen de convertir des entiers en réels (et inversement), mais cela se fait au dépend de la précision des valeurs représentées car, lorsque l'on essaye de convertir un réel en entier, il faut effectuer un arrondi.

    Vu que tu veux mettre la valeur de somme (qui est un réel) dans tab, si tu ne veux pas avoir de problème d'arrondi ou de conversion, il faut que tab soit prévu pour représenter un "certain nombre" de... valeurs réelles (ex: float tab[100]).
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2017
    Messages : 59
    Points : 26
    Points
    26
    Par défaut Réponse à Koala
    Bonjour Koala, merci mais c'est ce que j'avais compris aussi sauf que en déclarent mon Tableau en float
    j'ai aussi le même message d'erreur et c'est la que je ne comprend pas car même si je mets tout mes variables
    en float sauf i ou bien même avec i, eh ben j'ai un message d'erreur malgré tout...

    exemple 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
        int i;
        float Somme,Nb1;
        float Tab[100];
     
    //Introduction des deux nombres par l'utilisateur.
        cout <<"Veuillez entrer le premier nombre Svp :";
        cin >> Nb1;
     
     
        for (i = 0; i < Nb1; i++)
        {
            Somme = Nb1 / i;
            Tab[i] = Somme;
     
            if (Somme % i == 0)
            {
                Tab[i] = Somme;
                cout <<"Tab i : " << Tab[i] <<endl;
            }
     
        }
    Message d'erreur 1 :
    ||=== Build: Debug in NombresAmis (compiler: GNU GCC Compiler) ===|
    /home/yannick/Documents/C++ Projets/Exercice du site internet/NombresAmis/main.cpp||In function ‘int main()’
    /home/yannick/Documents/C++ Projets/Exercice du site internet/NombresAmis/main.cpp|70|error: invalid operands of types ‘float’ and ‘int’ to binary ‘operator%’|
    ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

    Exemple 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
     
    using namespace std;
     
    int main()
    {
        float i;
        float Somme,Nb1;
        float Tab[100];
     
    //Introduction des deux nombres par l'utilisateur.
        cout <<"Veuillez entrer le premier nombre Svp :";
        cin >> Nb1;
     
     
        for (i = 0; i < Nb1; i++)
        {
            Somme = Nb1 / i;
            Tab[i] = Somme;
     
            if (Somme % i == 0)
            {
                Tab[i] = Somme;
                cout <<"Tab i : " << Tab[i] <<endl;
            }
     
        }
     
     
     
     
     
        return 0;
    }
    Message erreur 2 :
    ||=== Build: Debug in NombresAmis (compiler: GNU GCC Compiler) ===|
    /home/yannick/Documents/C++ Projets/Exercice du site internet/NombresAmis/main.cpp||In function ‘int main()’
    /home/yannick/Documents/C++ Projets/Exercice du site internet/NombresAmis/main.cpp|68|error: invalid types ‘float [100][float]’ for array subscript|
    /home/yannick/Documents/C++ Projets/Exercice du site internet/NombresAmis/main.cpp|70|error: invalid operands of types ‘float’ and ‘float’ to binary ‘operator%’|
    /home/yannick/Documents/C++ Projets/Exercice du site internet/NombresAmis/main.cpp|72|error: invalid types ‘float [100][float]’ for array subscript|
    /home/yannick/Documents/C++ Projets/Exercice du site internet/NombresAmis/main.cpp|73|error: invalid types ‘float [100][float]’ for array subscript|
    ||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

    Comme tu peut le constater même si je fait un float pour tout les variables j'ai toujours une impossibilité de compilé à cause d'un problème
    de type de conversion.

    Aigle-Royal.

  13. #13
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    octobre 2004
    Messages
    11 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : octobre 2004
    Messages : 11 336
    Points : 28 719
    Points
    28 719
    Par défaut
    Ben oui, mais ca, c'est un autre problème, lié au modulo...

    Car le calcul du modulo ne peut s'effectuer qu'à partir d'une division euclidienne, vu qu'il permet d'obtenir le reste (entier) de la division d'une valeur entière par une autre valeur entière. C'est, typiquement, une opération qui ne peut donc pas s'effectuer avec ... des valeurs réelles...

    C'est moche, hein

    Mais, ceci étant dit, il n'existe aucune division réelle capable de donner un résultat strictement égal à 0, si bien que le test n'a -- en lui-même -- absolument aucun sens
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    janvier 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2020
    Messages : 6
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Aigle-Royal Voir le message
    Bonjour , Julien, merci pour ta réponse.
    Cependant j'ai une question concernant ce que tu as dit.







    Je n'arrive pas très bien à comprendre cette ligne que veux tu dire par là ?

    Je te remercie d'avance pour ta réponse.

    Bonne journée.

    Aigle-Royal.
    Salut Aigle-Royal,

    L'idée c'est qu'un nombre m qui est supérieur à la moitié d'un nombre n ne pourra jamais diviser n.

    Tu peux en avoir l'intuition en essayant sur plusieurs nombres. n=10 par exemple, la moitié c'est 5. 5 divise 10 puisque 10 = 5 * 2 ou encore 10 / 5 = 2.

    Est-ce que 6 divise 10 ? 10 = 6 * d. Que peut valoir d ? d = 1 est trop petit bien sûr, 6 * 1 = 6, il faudrait que n = m pour que 1 fonctionne. d = 2 ? On a 6 * 2 = 12, donc 2 est trop grand, ben oui 6 est plus grand que la moitié de 10, donc fois 2 c'est trop. Et bien sûr au dessus de 2 ce sera pire. Donc 6 ne divise pas 10. Et tu peux suivre le même raisonnement pour tous les entiers compris entre (n / 2) exclus et n exclus.

    Mais remarquer ça n'est qu'une optimisation. Rien ne t'empêche de faire la boucle jusqu'à n tu trouveras le même résultat, seulement un peu plus lentement.

    Pour ton erreur de compilation, le compilateur essaie de t'expliquer avec ce message : "error: invalid operands of types ‘float’ and ‘int’ to binary ‘operator%’".

    Pour ton exercice tu n'as pas du tout besoin de float ou de la division en réalité. Comme je te l'ai dit dans le message précédent, tu n'as besoin que du modulo : i divise Nb1 si Nb1 % i == 0.

    Petites remarques bonus :

    1. Jamais using namespace std; !!! Fais-moi confiance c'est une mauvaise idée. Tiens d'ailleurs il y a un super post dessus : https://www.developpez.net/forums/d2...namespace-std/
    2. Il vaut mieux éviter de déclarer plusieurs variables sur la même ligne. int a, b = 0; rend le code ambigu pour l’œil humain par exemple.
    3. Tu as écrit 2 fois l'assignation dans ton tableau, tu veux probablement n'exécuter l'instruction que dans le if pour garder les nombres i qui divisent Nb1.
    4. Donne des noms plus explicites à tes variables, par exemple diviseurs au lieu de Tab, ça te permettra de comprendre plus facilement ton code quand tu reviendra dessus plus tard.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Un tableau que je n'arrive pas à remplir.
    Par tidus_6_9_2 dans le forum AJAX
    Réponses: 1
    Dernier message: 14/05/2010, 12h09
  2. Petit bug IE // FF que je n'arrive pas à résoudre
    Par Denti-fritz dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 05/05/2008, 00h34
  3. Exercice d'algo que je n'arrive pas a resoudre
    Par bansan dans le forum Mathématiques
    Réponses: 7
    Dernier message: 10/03/2008, 08h15
  4. Réponses: 7
    Dernier message: 07/01/2007, 13h16
  5. problème que je n'arrive pas à résoudre de façon récursive
    Par miam dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 31/07/2004, 12h21

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