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 :

dessiner un losange plein


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Par défaut dessiner un losange plein
    Bonjour je cherche à afficher un losange plein en langage C (je debute dans ce langage)
    je dois faire une boucle de i=1 a n/2+1
    puis afficher n-i-2 espaces
    et afficher n - 2*(i+1) etoiles
    l'étoile est le motif qui constitue le dessin
    mais je me demande s'il existe une fonction qui réalise l'affichage des étoiles et des espaces ?

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    fprintf ou printf ....
    Voir la doc...

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par amateurc Voir le message
    mais je me demande s'il existe une fonction qui réalise l'affichage des étoiles et des espaces ?
    Euh, c'est une question élémentaire qui a forcément été abordée en cours. Tu devais dormir...

    Pour afficher 1 caractère, putchar() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include <stdio.h>
     
    putchar(' ');
    putchar('*');

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    tu peux consulter le fichier stdio.h pour voir les fonctions disponibles
    http://man.developpez.com/man3/stdio.3.php

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Par défaut
    Euh, c'est une question élémentaire qui a forcément été abordée en cours. Tu devais dormir...
    en fait je sais comment afficher un texte mais je voulais savoir si il existait une fonction qui place un texte en fonction d'une variable par exemple si je veux faire :
    * [il y a 8 espaces]
    sans faire de printf(" *"); c'est a dire quelque chose comme cela :
    printf("a*") ou le a est la variable qui contient 8 espaces

  6. #6
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par amateurc Voir le message
    en fait je sais comment afficher un texte mais je voulais savoir si il existait une fonction qui place un texte en fonction d'une variable par exemple si je veux faire :
    * [il y a 8 espaces]
    sans faire de printf(" *"); c'est a dire quelque chose comme cela :
    printf("a*") ou le a est la variable qui contient 8 espaces
    Non, il n'existe pas de telle fonction dans la bibliothèque standard du C. Mais c'est relativement facile à programmer soit même. Fais de ton mieux et poste ton code.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Par défaut
    d'accord merci de cette précision

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par amateurc Voir le message
    en fait je sais comment afficher un texte mais je voulais savoir si il existait une fonction qui place un texte en fonction d'une variable par exemple si je veux faire :
    * [il y a 8 espaces]
    sans faire de printf(" *"); c'est a dire quelque chose comme cela :
    printf("a*") ou le a est la variable qui contient 8 espaces
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <stdio.h>
     
    int main (void)
    {
       int a = 8;
     
       printf ("%*c\n", a, '*');
       printf ("%*s\n", a, "*");
     
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
           *
           *
     
    Press ENTER to continue.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Par défaut
    merci beaucoup

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Par défaut
    voila j'ai fait les premières lignes de code mais apparemment l'idée est là mais pas l'affichage correcte, pouvez-vous me dire ce qui cloche voici le code :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void)
    {
      int n,i,j; //nb = nombre d'étoile ds 1/2 sup, n = nb ligne, i,j=iterateur
      int espace,nbetoile;
      printf("nombre de ligne : ");
      scanf("%d",&n);
      printf("\n");
     
      for(i=1;i<=n/2+1;i++) //boucle qui permet le retour a la ligne 
          {
             espace=n-i-2;
             nbetoile=n-2*(i+1);
             for(j=1;j<=i;j++) //boucle qui permet le nombre afficher '*' en fonction de la boucle du i 
             {
                 printf("%*c",espace,printf("%*c",nbetoile,'*'));             
                            } 
                 printf("\n");   // retour a la ligne pour la mise en forme
               }
     
      system("PAUSE");	
      return 0;
    }

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par amateurc Voir le message
    voila j'ai fait les premières lignes de code mais apparemment l'idée est là mais pas l'affichage correcte, pouvez-vous me dire ce qui cloche voici le code :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                 printf("%*c",espace,printf("%*c",nbetoile,'*'));
    Tu as dit que tu voulais un nombre d'espace programmable et je t'ai indiqué comment faire. Tu n'as pas dit que tu voulais un nombre de caractères quelconque programmable. Pour ça, il faut écrire ta propre fonction (pas sûr que ce soit utile ici, c'est toi qui voit...)

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Par défaut
    en fait je dois dessiner quelque chose dans le genre là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      *
     ***
    *****
     ***
      *
    mais le problème c'est que je ne sais pas trop par ou commencer à cause des espaces.

    ca j'arrive plus ou moins à le faire avec ce code que j'avais fais dans un exercice précédent
    le problème c'est que je n'affiche pas le bon nombre d'étoile voici le 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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
      int nb,i,j;
     
      printf("saisir nb ");
      scanf("%d",&nb);
      printf("\n");
     
      for(i=1;i<=nb;i++) //boucle pour le retour a la ligne
          {
            for(j=1;j<=i;j++)
           {
                 printf("*");             //affiche '*' en fonction de la boucle i
                           } 
                printf("\n");   //retour a la ligne
               }
     
       printf("\n\adessin termine \a\n\n");
     
    system("PAUSE");	
    }
    après j'ai le reste pour faire la boucle décroissante mais je ne vois pas trop quoi modifier pour ajouter une étoile à partir de la i=2

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    pourquoi ne pas commencer simplement ???

    Afficher n espaces la ou on est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for ( i = 0 ; i < n ; i++ )
      printf ( " " );
    afficher m etoiles la ou on est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for ( i = 0 ; i < m ; i++ )
      printf ( "*" );

  14. #14
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par amateurc Voir le message
    en fait je dois dessiner quelque chose dans le genre là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      *
     ***
    *****
     ***
      *
    mais le problème c'est que je ne sais pas trop par ou commencer à cause des espaces
    j'aurais bien voulu essayé de faire ça avec des tables peut être que ça aurait été plus simple mais je ne sais pas comment les utiliser
    Le but de ce genre d'exercice est de faire réfléchir à une solution purement algorithmique basée sur des boucles et des tests astucieux.

    On observe la figure, on imagine comment elle est tracée, et on essaye de trouver quelles actions séquentielles et répétitives il faut mener pour aboutir au résultat. Ces action répétitives peuvent être dépendantes de certaines variables qui peuvent évoluer au cours de l'exécution...

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Par défaut
    merci de m'orienter dans ma démarche,
    j'ai modifier mon code au dessus et je suis arriver au nombre d'étoile affiché pour
    5 lignes j'obtient ceci :
    *
    ***
    *****
    ***
    *
    par ce 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
      int nb,i,j;
     
      printf("saisir nb ");
      scanf("%d",&nb);
      printf("\n");
     
      for(i=1;i<=nb/2+1;i++)
      {
              for(j=1;j<=i;j++)
              {
              if (j>1) 
              printf("*"); //unique condition du if
              printf("*"); //affiche '*' de la boucle            
              } 
      printf("\n");   
      }
     
      for(i=nb/2+1;i<=nb;i++) //boucle qui permet le retour a la ligne 
      {   
          if ((nb%2)==0) 
           { for(j=nb;j>=i;j--) //boucle qui permet le nombre afficher '*' en fonction de la boucle du i 
             {//qd paire
             if (j!=nb)
             printf("*"); //condition if
             printf("*"); //affiche '*' de la boucle            
             }
           }
          else
          { for(j=nb;j>i;j--) //boucle qui permet le nombre afficher '*' en fonction de la boucle du i 
             {//qd impaire
             if (j!=nb)
             printf("*"); //condition if
             printf("*"); //affiche '*' de la boucle            
             }
           } 
      printf("\n");   // retour a la ligne pour la mise en forme
      }
     
       printf("\ndessin termine \n\n");
     
    system("PAUSE");	
    }
    il me reste donc que les espaces à placer avez-vous des conseils à me donner pour les espaces ?

  16. #16
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par amateurc Voir le message
    il me reste donc que les espaces à placer avez-vous des conseils à me donner pour les espaces ?
    Je ne vois pas ce que ça change que ce soient des espaces. Si tu ne les 'voit' pas, remplace les par des '-', par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    --*
    -***
    *****
    -***
    --*

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Par défaut
    L'espace ne se trouvant qu'avant la première étoile il faut mettre il condition du type si c'est la première étoile alors afficher les espaces suivis de l'étoile me donne donc ça dans le 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
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
      int nb,i,j;
      int espace;
     
      printf("saisir nb ");
      scanf("%d",&nb);
      printf("\n");
      espace=nb/2+1;
     
      for(i=1;i<=nb/2+1;i++)
      {
              for(j=1;j<i;j++)
              {
              if (j==1) 
              printf("%*c",espace,'*');
              if (j>=1) 
              printf("*"); //unique condition du if
              printf("*"); //printf("%*c",espace,'*');
              espace--;
              } 
      printf("\n");   
      }
      espace=nb/2+1;
      for(i=nb/2+1;i<=nb;i++) //boucle qui permet le retour a la ligne 
      {   
          if ((nb%2)==0) 
           { for(j=nb;j>=i;j--) //boucle qui permet le nombre afficher '*' en fonction de la boucle du i 
             {//qd >=paire qd >impaire
             if (j!=nb)
             printf("*"); //condition if
             printf("*"); //affiche '*' de la boucle 
             espace--;               
             }
           }
          else
          { for(j=nb;j>i;j--) //boucle qui permet le nombre afficher '*' en fonction de la boucle du i 
             {//qd >=paire qd >impaire
             if (j!=nb)
             printf("*"); //condition if
             printf("*"); //affiche '*' de la boucle 
             espace--;              
             }
           } 
      printf("\n");   // retour a la ligne pour la mise en forme
      }
     
       printf("\ndessin termine \n\n");
     
    system("PAUSE");	
    }
    le problème est que lors de l'affichage j'obtient ceci:
    pour 5 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        ***
      *****
    ***
    *
    la première ligne de s'affiche plus et l'affichage n'est plus bon et je ne trouve pas l'erreur

  18. #18
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par amateurc Voir le message
    L'espace ne se trouvant qu'avant la première étoile il faut mettre il condition du type si c'est la première étoile alors afficher les espaces suivis de l'étoile me donne donc ça dans le code :
    Le truc, c'est de réfléchir avant d'agir et d'y aller par étape... C'est pourtant ce que j'ai essayé de t'expliquer. Mais je ne sais pas pourquoi, en informatique, on croit que la solution, c'est le code. Ben non. Comme dans toute activité de production, c'est la reflexion préalable :
    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
     
    #include <stdio.h>
     
    /*
    --*
    -***
    *****
    -***
    --*
     
    Il y a 5 lignes à tracer
     
    espaces  etoiles
    2        1
    1        3
    0        5
    1        3
    2        1
     
    Il faut donc faire une fonction qui affiche une ligne avec
    les parametres nb-espace et nb-etoile
     
    void ligne (int space, int star)
     
    et appeler cette fonction 5 fois avec les paramètres variant 
    comme indiqué au-dessus
     
    */
     
    int main (void)
    {
       int i;
       int space = 2;
       int star = 1;
       for (i = 0; i < 5; i++)
       {
          printf ("%d, %d\n", space, star);
     
          if (i < 2)
          {
             space--;
             star += 2;
          }
          else
          {
             space++;
             star -= 2;
          }
       }
       return 0;
    }
    Je te laisse terminer. Tu constante la la résolution d'un problème complexe devient simple si on sépare les difficultés en problèmes plus petits donc plus simples...

    La programmation, c'est surtout une bonne organisation de la pensée. Le codage, c'est rien.
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    #include <stdio.h>
     
    #define DBG 0
     
    /*
    --*
    -***
    *****
    -***
    --*
     
    Il y a 5 lignes à tracer
     
    espaces  etoiles
    2        1
    1        3
    0        5
    1        3
    2        1
     
    Il faut donc faire une fonction qui affiche une ligne avec
    les parametre nb-espace et nb-etoite
     
    void ligne (int space, int star)
     
    et appeler cette fonction 5 fois avec les paramètres variant comme indiqué au
    dessus
     
    */
     
    void ligne (int space, int star)
    {
       int i;
       for (i = 0; i < space; i++)
       {
          putchar (' ');
       }
       for (i = 0; i < star; i++)
       {
          putchar ('*');
       }
       putchar ('\n');
    }
     
    int main (void)
    {
       int i;
       int space = 2;
       int star = 1;
       for (i = 0; i < 5; i++)
       {
    #if DBG
          printf ("%d, %d\n", space, star);
    #endif
          ligne (space, star);
     
          if (i < 2)
          {
             space--;
             star += 2;
          }
          else
          {
             space++;
             star -= 2;
          }
       }
       return 0;
    }

Discussions similaires

  1. Dessiner un cercle plein avec Xlib
    Par Guillaume1701 dans le forum Débuter
    Réponses: 1
    Dernier message: 01/04/2014, 16h40
  2. Dessiner un losange
    Par kheuzo dans le forum C
    Réponses: 4
    Dernier message: 07/10/2007, 10h53
  3. dessiner un losange en java
    Par gridsof dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 14/05/2007, 00h13
  4. graphisme ; comment dessiner un losange
    Par gridsof dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 13/05/2007, 20h06
  5. Réponses: 2
    Dernier message: 16/07/2005, 08h12

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