Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/07/2019, à 07:59

Mur54

[C++] Explication code basique

Bonjour, mon programme est le suivant :

#include <iostream>
int main()
{
    int currVal = 0, val = 0;
    if (std::cin >> currVal) {
        int cnt = 1;
        while (std::cin >> val) {
            if (val == currVal)
                ++cnt;
            else {
                std::cout << currVal << "occurs" << cnt << "times" << std::endl;
                currVal = val;
                cnt = 1;
            }
        }
        std::cout << currVal << "occurs" << cnt << "times" << std::endl;
    }
    return 0;
}

Pourquoi dans le if ligne 8, il n'y a pas de { ?
Et aussi, je ne comprends pas ce programme, pour moi on doit entrer des chiffres au std::cin de la ligne 5 et de la ligne 7, et pourtant on entre une seule fois une série de nombres.

Dernière modification par Mur54 (Le 04/07/2019, à 08:44)

Hors ligne

#2 Le 04/07/2019, à 08:39

pingouinux

Re : [C++] Explication code basique

Bonjour,
Tu as une curieuse façon de numéroter les lignes…

Mur54 a écrit :

Pourquoi dans le if ligne 5, il n'y a pas de { ?

Parce que ce n'est pas obligatoire si le if n'est suivi que d'une seule instruction.

Hors ligne

#3 Le 04/07/2019, à 08:44

Mur54

Re : [C++] Explication code basique

pingouinux a écrit :

Bonjour,
Tu as une curieuse façon de numéroter les lignes…

Mur54 a écrit :

Pourquoi dans le if ligne 5, il n'y a pas de { ?

Parce que ce n'est pas obligatoire si le if n'est suivi que d'une seule instruction.

Au temps pour moi, c'est corrigé, merci !
Est-ce que tu pourrais aussi m'éclairer sur mon autre question ?

Hors ligne

#4 Le 04/07/2019, à 09:27

pingouinux

Re : [C++] Explication code basique

Est-ce que tu pourrais aussi m'éclairer sur mon autre question ?

Désolé, je ne maîtrise pas ça…

Hors ligne

#5 Le 04/07/2019, à 11:06

Mur54

Re : [C++] Explication code basique

Pas de soucis, merci !

Hors ligne

#6 Le 04/07/2019, à 12:50

grigouille

Re : [C++] Explication code basique

Mur54 a écrit :

Et aussi, je ne comprends pas ce programme, pour moi on doit entrer des chiffres au std::cin de la ligne 5 et de la ligne 7, et pourtant on entre une seule fois une série de nombres.

Quand tu fais "entrée", l'espace tampon de std::cin se vide et la boucle se lance jusqu'à lecture de la fin.

tu devrais généraliser le programme avec un std::istream et le tester avec un fichier par exemple


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#7 Le 04/07/2019, à 14:05

NicoApi73

Re : [C++] Explication code basique

Bonjour,

@grigouille : C'est même un peu plus m***ique que ça
- dès que l'on fait Entrée, l'espace tampon vide sa première valeur dans currVal et une erreur est remontée si cette valeur n'est pas un entier. En cas d'erreur, on sort immédiatement (sans même aller dans la boucle)
- Les valeurs suivantes sont mises une à une dans val, jusqu'à ce que le buffer soit vide (dans ce cas, le flux attend des nouveaux caractères et une validation par Entrée) ou qu'un caractère qui ne correspond pas à un nombre soit rencontré (dans ce cas on sort de la boucle)

Ce que je n'aime pas dans ce code, c'est que les conditions sont considérées comme fausse sur une erreur remontée dans le déchargement du tampon dans un integer (l'erreur est quand on essaie de mettre un symbole différent d'un chiffre dans currVal ou val...)

Dernière modification par NicoApi73 (Le 04/07/2019, à 16:00)

Hors ligne

#8 Le 08/07/2019, à 07:43

Mur54

Re : [C++] Explication code basique

Pourquoi quand on a 2 cin, on ne doit pas rentrer 2 fois les valeurs ?
Dans ma tête, on doit taper une série de nombre pour la ligne 5, puis une autre série de nombre pour la ligne 7, or on ne tape qu'une seule fois la série de nombre en pratique, comment est-ce possible ?
Je suis un pur débutant en C++, c'est un exemple du livre de Lippman

Dernière modification par Mur54 (Le 08/07/2019, à 07:45)

Hors ligne

#9 Le 08/07/2019, à 09:04

NicoApi73

Re : [C++] Explication code basique

Bonjour,

cin est un objet de la classe istream, qui représente tel que l'entrée standard. >> est un opérateur.

Tu as une méthode utilisée par cin pour capturer ce qu'il y a sur l'entrée standard, puis le tampon est vidé. C'est quand ce tampon est vidé que la condition dans if est évalué, ainsi que dans while. Une fois que le tampon est vide, cin est de nouveau en attente d'entrée. C'est une erreur qui fait que l'on sort de la boucle while, à savoir le fait qu'on essaie de mettre autre chose qu'un nombre entier dans val (ou currVal pour l'instruction if)

Si tu aimes les livres, regarde celui de Claude Delannoy, c'est avec celui-là que j'ai appris à programmer en C++.

Dernière modification par NicoApi73 (Le 08/07/2019, à 09:05)

Hors ligne

#10 Le 08/07/2019, à 09:42

Mur54

Re : [C++] Explication code basique

Désolé de te l'annoncer, mais je ne vois que des critiques de ton bouquin.
Merci pour ton aide en tout cas !

Hors ligne

#11 Le 08/07/2019, à 09:54

NicoApi73

Re : [C++] Explication code basique

Mur54 a écrit :

Désolé de te l'annoncer, mais je ne vois que des critiques de ton bouquin.
Merci pour ton aide en tout cas !

L'une des premières versions date d'il y a 30 ans, il est à la 9ième édition. Des mauvais bouquins ne sont pas réédités.

Il permet d'apprendre très bien la syntaxe du langage, explique la notion de programmation objet. Il n'est pas dépendant d'un IDE, ni d'un OS. Par contre tu n'apprendras pas l'architecture logiciel avec ça. De même, ce n'est pas avec ça que tu feras une application graphique.

Après, je ne suis pas là pour te vendre un livre, je te cite juste en référence le livre qui m'a permis d'apprendre ce langage, de comprendre ce qu'est une classe et la programmation objet et de suivre l'évolution de ce langage.

Hors ligne

#12 Le 08/07/2019, à 10:37

Nuliel

Re : [C++] Explication code basique

Eh ben 9ème édition effectivement c'est un gage de qualité!
En même temps, tu as un livre à conseiller pour l'architecture logicielle?

Hors ligne

#13 Le 08/07/2019, à 10:49

NicoApi73

Re : [C++] Explication code basique

Salut Naziel,

Non, je n'ai pas de livre à conseiller pour l'architecture logicielle. Ca m'a toujours posé problème, et j'ai dû recommencer plusieurs fois des applications car mon architecture était pourrie. Il existe des méthodes/outils autour d'UML qui permettent d'aider pour faire une architecture.

Dernière modification par NicoApi73 (Le 08/07/2019, à 11:20)

Hors ligne

#14 Le 08/07/2019, à 21:13

NicoApi73

Re : [C++] Explication code basique

@Mur54 :

#include <iostream>

using namespace std;

int main()
{
    int currVal = 0, val = 0;
    
    if (cin >> currVal) 
    {
        int cnt = 1;
        while (cin >> val) 
        {
			char c;
			
            if (val == currVal)
                ++cnt;
            else 
            {
                cout << currVal << " occurs " << cnt << " times" << endl;
                currVal = val;
                cnt = 1;
            }
            c=cin.peek();
            if (c == '\n')
				break;
        }
        cout << currVal << " occurs " << cnt << " times" << endl;
    }
    return 0;
}

C'est plus propre que de compter sur une erreur pour arrêter. (Merci mon bouquin...) big_smile big_smile
EDIT : Néanmoins, il faudrait reprendre le code entièrement...

Après, si tu rentres la chaîne suivante :
1 2 1 1 2
Regarde le résultat... Pas sûr que ce soit réellement l'attendu. Mais pour avoir le bon résultat, le code doit être modifié et complexifié...

Dernière modification par NicoApi73 (Le 09/07/2019, à 06:11)

Hors ligne

#15 Le 09/07/2019, à 10:31

NicoApi73

Re : [C++] Explication code basique

#include <iostream>

using namespace std;

struct occurence { int val; int times; occurence * next_item;};

occurence * list_management (occurence * mylist, int myval)
{
	if (mylist != NULL)
	{
		if (mylist->val == myval)
			mylist->times ++;
		else
			mylist->next_item = list_management (mylist->next_item,myval);
	}
	else
	{
		mylist = new occurence;
		mylist->val = myval;
		mylist->times = 1;
		mylist->next_item = NULL;
	}
	return mylist;
}

int main()
{
    int val;
	char c;
    occurence * mylist = NULL;
    occurence * parse = NULL;
    
    do
    {
		if (cin >> val)
			mylist = list_management (mylist,val);
		else
		{
			cout << "Invalid caracter!\n";
			break;
		}
        c=cin.peek();
    }		
	while (c != '\n');
	
	parse = mylist;
	while (parse != NULL)
	{
		cout << parse->val << " occurs " << parse->times << " times\n";
		parse = parse->next_item;
		delete mylist;
		mylist = parse;
	}
	
	return 0;
}

EDIT : l'indentation est correcte dans geany, elle ne l'est pas ci-dessus. Si tu copies colles dans geany, tu devrais t'y retrouver...

Dernière modification par NicoApi73 (Le 09/07/2019, à 15:05)

Hors ligne

#16 Le 03/08/2019, à 17:25

NicoApi73

Re : [C++] Explication code basique

Mur54 a écrit :

Désolé de te l'annoncer, mais je ne vois que des critiques de ton bouquin.
Merci pour ton aide en tout cas !

Bonjour,

ce cours https://openclassrooms.com/fr/courses/1 … -langage-c est pas mal pour débuter. Il existe également en livre. L'auteur a également fait un cours sur le C que je trouve très intéressant.

Hors ligne