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 :

Construction d'une pyramide en C - Debutante


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2020
    Messages : 9
    Par défaut Construction d'une pyramide en C - Debutante
    Bonjour a tous,

    J'essaie de profiter du confinement pour me former a la programmation - j'essaie de commencer a coder un tout petit peu en C avec un cours en ligne (je suis chef de projet/MOA a la base). Je m'excuse par avance pour le manque d'accent (clavier QWERTY). Merci d'avance pour votre aide, je suis coincee la dessus depuis plusieurs jours!!

    J'ai un exercice ou je dois faire une pyramide comme cela avec un nombre de colonne et ligne donnees par l'utilisateur:
       #
      ##
     ###
    ####
    J'ai bien sur tente par moi meme et j'ai reussi avec ce code la :

    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
    #include <stdio.h>
     
    int main(void)
    {int n;
    do 
     {n = get_int("Height:\n");}
     while (n<1 || n>8);
    return n;
    for (int i = 0; i<1; i++)
        {if(n==1) {printf("       #\n");}
        if(n==2) {printf("       #\n      ##\n");}
        if(n==3) {printf("       #\n      ##\n     ###\n");}
        if(n==4) {printf("       #\n      ##\n     ###\n    ####\n");}
        if(n==5) {printf("       #\n      ##\n     ###\n    ####\n   #####");}
        if(n==6) {printf("       #\n      ##\n     ###\n    ####\n   #####\n  ######\n");}
        if(n==7) {printf("       #\n      ##\n     ###\n    ####\n   #####\n  ######\n #######\n");}
        if(n==8) {printf("       #\n      ##\n     ###\n    ####\n   #####\n  ######\n #######\n########\n");}
     }
    }
    Cependant, je voudrais faire quelque chose de plus automatise, mais je n'y arrive pas? Voila ce que j'ai ecrit pour le moment, mais le code ne fait rien que me prompter pour la variable (mais lorsque je la rentre, rien ne se passe):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main(void)
    {int n;
    do 
     {n = get_int("Height:\n");}
     while (n<1 || n>8);
    return n;
     
    for (int k=0; k<n; k++)
      {for (int j=(n-1); j>1; j--)
      {printf(" ");
        for (int i=0; i<=n; i++)
         {printf("#");}}
     printf("/n");}

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 853
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 853
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Agnes_G Voir le message
    J'ai un exercice ou je dois faire une pyramide comme cela avec un nombre de colonne et ligne donnees par l'utilisateur:
    #
    ##
    ###
    ####
    T'es sûre que le nombre de colonnes est donné par l'utilisateur ? Parce que d'après le dessin, et d'après ton code, c'est juste le nombre de lignes qui est donné. Déjà si tu commences avec un cahier des charges faux, pour un chef de projet...

    Citation Envoyé par Agnes_G Voir le message
    J'ai bien sur tente par moi meme et j'ai reussi avec ce code la :
    Bien évidemment ce code là ne vaut rien. Déjà à la limite tu aurais utilisé switch/case bon on aurait pu sortir 1/4 point (sur 100) mais là, avec ces if à suivre... C'est ici clairement un exercice pour t'apprendre à faire des boucles donc il te faut faire des boucles. D'autant plus qu'avec des boucles, il fonctionnera pour 8 lignes comme pour 8000.

    Citation Envoyé par Agnes_G Voir le message
    Cependant, je voudrais faire quelque chose de plus automatise, mais je n'y arrive pas? Voila ce que j'ai ecrit pour le moment, mais le code ne fait rien que me prompter pour la variable (mais lorsque je la rentre, rien ne se passe):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main(void)
    {int n;
    do 
     {n = get_int("Height:\n");}
     while (n<1 || n>8);
    return n;
     
    for (int k=0; k<n; k++)
      {for (int j=(n-1); j>1; j--)
      {printf(" ");
        for (int i=0; i<=n; i++)
         {printf("#");}}
     printf("/n");}
    Evidemment rien ne se passe. Pour ça il serait bien que tu nous dises ce que tu tentes de faire avec ce return n en ligne 6. Sais-tu ce que fait un return dans une fonction ?

    Ensuite bon ce code est quand-même effectivement plus dans l'esprit du machin mais concernant les calculs, outre qu'ils sont inutilement compliqués (pourquoi par exemple j décroit alors que sa valeur n'est pas utilisée ?), ils sont un peu faux. Par exemple pour une pyramide à 5 lignes, la première ligne aura 4 espaces et 1 étoile ; la seconde aura 3 espaces et 2 étoiles ; la 3° aura 2 espaces et 3 étoiles ; la 4° aura 1 espace et 4 étoiles et la 5° aura 0 espace et 5 étoiles. Ca ne te donne pas une idée ça sur comment doivent varier tes indices ?

    Et quand tu veux poster un code:

    Citation Envoyé par Agnes_G Voir le message
    je suis coincee la dessus depuis plusieurs jours!!
    N'exagère pas. Ca se fait en 3mn quoi !!!

    Citation Envoyé par Agnes_G Voir le message
    printf("/n")
    Ouais, super. On sent que tu es bien à ce que tu fais quoi...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre habitué
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2020
    Messages : 9
    Par défaut
    C'est tres gentil de repondre, mais quel message decourageant, j'ai eu en le lisant l'impression d'etre completement stupide.
    Ce qui est peut etre vrai cela dit

    Alors :
    1/ Oui ca fait plusieurs jours que je cherche, et surement, pour toi, ca prend 3 minutes. J'ai essaye plusieurs solutions avant celle-ci (mais sans succes), celle-ci etait juste un exemple. C'est pour ca que j'aimerais bien qu'on me mette juste sur la voie (et oui je sais aussi que le code avec les if ne vaut rien, c'est pour ca que je pose la question, mais je montrais au moins le resultat que je voulais obtenir a la fin)
    2/ Oui il y a le meme nombre (donne par l'utilisateur) qui correspond a la fois a la hauteur et la longueur des lignes mais que j'ai appele "height" par raccourci (en fait il fait height et length)
    3/ Par le return je voulais redemander le Height si le nombre donne par l'utilisateur etait inferieur a 1 ou superieur a 8, mais j'ai peut etre mal compris le role de la fonction return
    4/ "Ensuite bon ce code est quand-même effectivement plus dans l'esprit du machin mais concernant les calculs, outre qu'ils sont inutilement compliqués (pourquoi par exemple j décroit alors que sa valeur n'est pas utilisée ?), ils sont un peu faux. Par exemple pour une pyramide à 5 lignes, la première ligne aura 4 espaces et 1 étoile ; la seconde aura 3 espaces et 2 étoiles ; la 3° aura 2 espaces et 3 étoiles ; la 4° aura 1 espace et 4 étoiles et la 5° aura 0 espace et 5 étoiles."
    => Oui j'avais compris - c'est justement ce que j'essayais de faire, surement tres mal et maladroitement, dans le code, i.e. j'utilisais la boucle j pour compter les espaces, en commencant par (n-1) pour le nombre d'espaces de la premiere ligne, qui decroit a chaque fois de 1 et inversement pour le nombre de # qui commence a 1 pour finir en n en augmentant de 1 a chaque fois. Je n'arrive juste pas a le traduire en code.

  4. #4
    Membre habitué
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2020
    Messages : 9
    Par défaut Egalement, la raison pour laquelle je suis arrivee au code n2..
    ..est que j'ai commence par construire un carre de # avec un entier donne par l'utilisateur pour la hauteur et la largeur comme ci-dessous, que j'ai essaye (encore une fois, certainement mal) d'adapter pour obtenir ma pyramide.

    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
     
    int main(void)
    {
        int n;
        do
        {
            n = get_int("Size: ");
        }
        while (n < 1);
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                printf("#");
            }
            printf("\n");
        }
    }

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 853
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 853
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Agnes_G Voir le message
    C'est tres gentil de repondre, mais quel message decourageant, j'ai eu en le lisant l'impression d'etre completement stupide.
    Désolé, t'es chef de projet. De grands pouvoirs impliquent de grandes responsabilités. On te demandera plus à toi qu'aux autres. Fallait pas te mettre ainsi en avant.

    Citation Envoyé par Agnes_G Voir le message
    Par le return je voulais redemander le Height si le nombre donne par l'utilisateur etait inferieur a 1 ou superieur a 8, mais j'ai peut etre mal compris le role de la fonction return
    Effectivement t'as clairement pas assimilé le but de l'instruction (et non la fonction) return. Donc retour tuto pour lire là où c'est expliqué.
    Quand on veut demander un truc à l'utilisateur et boucler tant que le truc est pas bon, on programme une boucle qui boucle tant que le truc n'est pas bon. Et on en sort (soit par break, soit en laissant la boucle se terminer) donc quand le truc est bon. Toutefois tu aurais pu mettre ça de côté et te concentrer sur tes étoiles avec un Height ayant une valeur d'exemple. Surtout que cette partie "saisie Height" ne me semble pas être vraiment primordiale dans la compréhension de cet exercice...

    Citation Envoyé par Agnes_G Voir le message
    Oui j'avais compris - c'est justement ce que j'essayais de faire, surement tres mal et maladroitement, dans le code, i.e. j'utilisais la boucle j pour compter les espaces, en commencant par (n-1) pour le nombre d'espaces de la premiere ligne, qui decroit a chaque fois de 1 et inversement pour le nombre de # qui commence a 1 pour finir en n en augmentant de 1 a chaque fois. Je n'arrive juste pas a le traduire en code.
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    pour une boucle de n allant de 1 à Height (inclus), faire
        pour une boucle de i allant de 0 à (Height - n) (exclus), afficher espace
        pour une boucle de i allant de 0 à n (exclus), afficher étoile
        afficher fin de ligne
    fin pour
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre habitué
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2020
    Messages : 9
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Désolé, t'es chef de projet. De grands pouvoirs impliquent de grandes responsabilités. On te demandera plus à toi qu'aux autres. Fallait pas te mettre ainsi en avant.
    Aaaah... C'est pour cela que tu es aussi meprisant? Je voulais juste dire que j'etais cote fonctionnel ou maitrise d'ouvrage, rien d'autre et certainement pas me mettre en avant (par exemple je suis chef de projet - depuis longtemps en plus! - sur la mise en place d'une reglementation, ou d'un nouveau produit, etc. mais pas technique, c'est ce que je voulais dire mais c'est pour cela que je veux/voulais apprendre). C'etait juste pour me presenter, donner le contexte de pourquoi d'un seul coup je veux me former a la programmation, et pourquoi je pose cette question?

    Bref passons a des choses plus interessantes.
    En fait j'ai fini par comprendre en regardant mieux une reponse donner sur un autre forum ... La seule chose qui me manquait, logiquement, c'etait de compter le nombre de caracteres en fonction du nombre de lignes, et pas de n/hauteur/largeur (en y pensant a posteriori... mais evidemment .

    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
     
    int main(void)
    {
        int n,i,j,k;
    do 
     {n = get_int("Height:\n");}
     while (n<1 || n>8);
    // For each line, print the pyramid with a total of n characters, and print as many spaces as n-line number and hashes as line numbers
    for (k=0; k<=n; k++)
    {for (j=n-k; j>=1; j--)
      {printf(" ");}
     
    {for (i=0; i<k; i++)
      {printf("#");}
     
     printf("\n");}
    }}

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 853
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 853
    Billets dans le blog
    1
    Par défaut
    Examinons donc dans ton code la partie qui affiche le triangle et comparons-là à ce que j'ai écrit...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for (k=0; k<=n; k++) {
    // Pour k allant de 0 (inclus) à n (inclus).
    // Perso j'avais écrit "pour une boucle de n allant de 1 à Height (inclus)".
    // La seule chose qui diffère c'est que tu commences à 0 (donc tu affiches une ligne vide) tandis que je commence à 1 (donc pas de ligne vide). Toutefois dans ton exemple initial il n'y a pas de ligne vide...
    	for (j=n-k; j>=1; j--) {
    	// Pour j allant de n-k (inclus) à 1 (inclus).
    	// Mis à part le sens inutilement décroissant de ta boucle, y aurait-il une différence avec "pour une boucle de j allant de 0 inclus à (n - k) exclu" ??? Oui les bornes de 1 à n-k inclus pour toi et de 0 à n-k exclu pour moi. Toutefois, ce qui compte ici c'est le nombre d'itérations et c'est le même pour tous les deux !!!
    		printf(" ");
    	}
    	for (i=0; i<k; i++) {
    	// Pour i allant de 0 (inclus) à k (exclus). Là c'est exactement ce que j'ai écrit =>  pour une boucle de i allant de 0 à n (exclus)
    		printf("#");
    	}
    	printf("\n");
    Voilà. Comme tu vois je t'avais bel et bien tout écrit. Ah oui, sauf que je l'avais pas écrit en C mais en pseudo-code.

    Citation Envoyé par Agnes_G Voir le message
    Aaaah... C'est pour cela que tu es aussi meprisant?
    Non, c'est surtout que quelque part je sentais un espèce de branluchon qui n'en fout pas une rame tout en tentant de nous faire croire qu'il bosse (parce que la phrase "je suis coincee la dessus depuis plusieurs jours!!" est tout sauf crédible). Et ta dernière réponse me conforte dans cette idée. T'avais clairement pas envie de réfléchir, juste d'avoir ton code tout fait quoi.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. [débutant C#]construction d'une dll en dotnet..
    Par just1980 dans le forum C#
    Réponses: 20
    Dernier message: 19/08/2010, 15h53
  2. Constuire une pyramide
    Par NeHuS dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 01/03/2006, 13h48
  3. Construction d'une regexp : unmatched () in regexp
    Par linou dans le forum Langage
    Réponses: 7
    Dernier message: 27/01/2006, 11h34
  4. Problème de construction d'une classe
    Par AraBorLeg dans le forum Langage
    Réponses: 2
    Dernier message: 05/12/2005, 19h07
  5. construction d'une classe
    Par r0d dans le forum C++
    Réponses: 10
    Dernier message: 16/09/2004, 17h35

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