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 :

arbustes exo C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut arbustes exo C
    Bonjour,

    Bonjour,

    je fais cet exo

    nombre d'arbustes

    et voici mon 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     #include <stdio.h>
     
    int main()
    {
    	int col, lig;
    	int count = 0;
    	int taille;
    	int i, j;
    	char *chaine;
     
    	scanf("%d%d", &lig, &col);
     
    	for(i=0;i<col;i++)
    	{
    		scanf("%s", chaine);
    			for(j=0;j<col;j++)
    			{
    				if(chaine[j] == '#')
    					count++;
    			}
    	}
     
    	printf("%d\n", count);
     
    	return 0;
    }
    Pouvez-vous corriger, svp ?

    Merci.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ce programme ne marchera pas, chaine n'est pas initialisé.

    Et ton lien ne marche pas, on ne peut pas voir l'exercice.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut
    j'ai essayé avec getchar :

    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
     
    #include <stdio.h>
    #include <ctype.h>
     
    int main(void)
    {
     
      int c;
      int i = 0;
      int count = 0;
      int lig, col;
     
      scanf("%d%d", &col, &lig);
      i = col;
     
      while ((c = getchar() != EOF) && i > 0 )
      {
            if(c == '#')
            {
                 count++;
            }
            i++;
     
     
    }     
     
      printf("%d", count);
     
     
    system("pause");
      return 0;
    }
    mais ça ne marche pas, pouvez-vous corriger, svp ?

    Merci.

  4. #4
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    corriger quoi ?

    Medinoc a sa boule de cristal cassé et la mienne est trop sale

    non sinon le lien est cassé, on ne peux pas voir l'énonce

    [edit] je suis sceptique sur "%d%d" du scanf, comment fait on pour savoir quel chiffre appartient a quel nombre/int ?

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    C'est bien, avec ça tu n'as pas besoin de mémoriser quoi que ce soit.

    Simplement, on va se rajouter une fonction pour aller à la fin de ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
    #include <stdlib.h>
     
    /* Retourne 0 si OK, -1 si EOF (erreur) */
    int purge(void)
    {
    	int c;
    	while((c=getchar())!=EOF && c!='\n')
    	{}
    	return (c==EOF ? -1 : 0);
    }
    Et ensuite, le code pour compter:
    Code C : 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
    int main(void)
    {
    	int nLig, nCol;
    	/* Lit les nombres de ligne et colonnes */
    	int nScanned = scanf("%d %d", &nLig, &nCol);
    	purge();
    	if(nScanned!=2)
    	{
    		puts("Erreur");
    		return EXIT_FAILURE;
    	}
     
    	/* Lit les arbres */
    	{
    		int nArbres = 0;
    		int lig, col;
    		for(lig=0 ; lig<nLig ; lig++)
    		{
    			for(col=0 ; col<nCol ; col++)
    			{
    				int c = getchar();
    				if(c==EOF || c=='\n')
    				{
    					/* Erreur, ou ligne trop courte */
    					puts("Erreur");
    					return EXIT_FAILURE;
    				}
    				if(c=='#')
    					nArbres++;
    			}
    			/* Lit la fin de la ligne, ignore les caractères en trop */
    			purge();
    		}
    		/*maintenant, on a le nombre d'arbres*/
    		printf("Arbres : %d\n", nArbres);
    	}
    	return EXIT_SUCCESS;
    }
    Ce code est immunisé contre les erreurs d'entrée, comme un texte trop court ou des lignes trop courtes, et ignore tout ce qui dépasse.

    Pose des questions si tu ne comprends pas, car l'exercice ne sert à rien si la solution n'est pas comprise...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut
    j'ai pas compris à quoi sert la fonction purge().
    Apparemment, ça retourne un entier, mais je vois pas quel rôle joue la fonction purge ?

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

Discussions similaires

  1. Besoin d'aide concernant 1 exo
    Par Shakan972 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 29/11/2005, 11h31
  2. [debutant]Avis sur exo Simple.
    Par granquet dans le forum C
    Réponses: 9
    Dernier message: 27/11/2005, 19h49
  3. des exos sur les boocles
    Par zeyd dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 27/11/2005, 18h03
  4. exo base de donnée avec SQL
    Par chti_juanito dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/11/2005, 16h02

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