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 :

Faire un "Z" avec des étoiles


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club Avatar de InsecteSinge
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1
    Par défaut Faire un "Z" avec des étoiles
    Bonjour,
    j'y connais pas grand chose en C je suis en première année de double-licence et j'ai mes partiels dans 6 jours. Donc, j'aimerais savoir comment faire un "Z" avec des étoiles : j'ai réussi à faire les deux barres horizontales, mais pour la diagonale...

    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
    28
     
    #include <stdlib.h>
    #include <stdio.h>
     
    #define H 5
     
    int main()
    {
       int i;
       int j;
     
    for (i = 0; i < H; i++)
       {
            for (j = 0; j < H; j++)
            {
                if ((i == 0) || (i == H-1))
                {
                    printf("*");
                }
     
            }
     
            printf("\n");
     
        }
     
       return EXIT_SUCCESS;
    }

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par défaut
    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
    39
    40
    41
    42
    #include <stdio.h>
    #include <stdlib.h>
     
     
    #define PRINT_MARGIN(WIDTH) for(count1=0; count1 < WIDTH; ++count1) { printf(" "); }
     
     
    void print_z(size_t width, size_t left_margin) {
        if (width > 1) {
            size_t count1, count2;
     
            PRINT_MARGIN(left_margin)
            for(count1=0; count1 < width; ++count1) { printf("*"); }
            printf("\n");
     
            for(count1=(left_margin + width); count1 > left_margin; --count1) {
                for(count2=0; count2 < (count1 - 1); ++count2) {
                    printf(" ");
                }
     
                printf("*\n");
            }
     
            PRINT_MARGIN(left_margin)
            for(count1=0; count1 < width; ++count1) { printf("*"); }
            printf("\n");
        }
    }
     
     
    int main (int argc, char** argv)
    {
        print_z(10, 5);
        printf("\n\n");
        print_z(3, 5);
        printf("\n\n");
        print_z(7, 10);
        printf("\n\n");
        print_z(20, 0);
     
        return EXIT_SUCCESS;
    }


    Édit :
    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
    39
    40
    41
    42
    43
    44
    45
    #include <stdio.h>
    #include <stdlib.h>
     
     
    #define PRINT_MARGIN(LEFT_MARGIN) for(count2=0; count2 < LEFT_MARGIN; ++count2) { printf(" "); }
     
    #define PRINT_ONE_Z_LINE(CHAR, WIDTH) \
        for(count2=0; count2 < (WIDTH - 1); ++count2) { \
            printf("%c", CHAR); \
        } \
         \
        printf("*\n");
     
    #define PRINT_ONE_ENTIRE_LINE(CHAR, WIDTH, LEFT_MARGIN) \
        PRINT_MARGIN(LEFT_MARGIN) \
        PRINT_ONE_Z_LINE(CHAR, WIDTH)
     
     
    void print_z(size_t width, size_t left_margin) {
        if (width > 1) {
            size_t count1, count2;
     
            PRINT_ONE_ENTIRE_LINE('*', width, left_margin);
     
            for(count1=width; count1 > 0; --count1) {
                PRINT_ONE_ENTIRE_LINE(' ', count1, left_margin);
            }
     
            PRINT_ONE_ENTIRE_LINE('*', width, left_margin);
        }
    }
     
     
    int main (int argc, char** argv)
    {
        print_z(10, 5);
        printf("\n\n");
        print_z(3, 5);
        printf("\n\n");
        print_z(7, 10);
        printf("\n\n");
        print_z(20, 0);
     
        return EXIT_SUCCESS;
    }

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par défaut
    Pourquoi tant de macros? Surtout en réponse à une question posée par quelqu'un qui s'avoue débutant...
    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.

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Pourquoi tant de macros ?
    Cela permet de coder une méthode très lisible parce que, ayant retirer quasi toutes les boucles et les calculs, on a quasi plus que le nom des macros.
    Après peut-être que "PRINT_ONE_ENTIRE_LINE" n'est pas assez parlant

    On voit bien qu'en lisant mon 2ième code, dessiner un Z se fait en 3 parties :
    • La barre du dessus avec que des étoiles : 1 PRINT_ONE_ENTIRE_LINE avec *
    • Le corps, il suffit de remplir 1 ligne avec des espaces sauf le dernier caractère (le plus à droite, *) et de retirer 1 espace à la ligne suivante : N PRINT_ONE_ENTIRE_LINE avec espace
    • La barre du dessous avec que des étoiles : 1 PRINT_ONE_ENTIRE_LINE avec *

    Je trouve cela plus facile à comprendre pour un débutant justement

    Et dans cette macro PRINT_ONE_ENTIRE_LINE, on a juste à commenter la macro PRINT_MARGIN pour supprimer la marge.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    @InsecteSinge, ce qui manque dans ton code :
    Pour chaque ligne intermédiaire, à un moment il faut afficher une étoile. Ce moment se trouve assez facilement, c'est quand j vaut H-i-1.
    Mais pour que l'étoile ne soit pas sur la première colonne, il faut penser à imprimer une espace pour chaque valeur de j qui précède.
    Il faut donc ajouter en ligne 20 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		else if ( j < H - i - 1 ) {
    			printf(" ");
    		}
    		else if ( j == H - i - 1 ) {
    			printf("*");
    		}
    Et pour les macros, tu as le temps de les comprendre (je les connais depuis 30 ans et j'ai encore des difficultés )

  6. #6
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 788
    Par défaut
    Hello,

    Si on fait joujou avec le format de printf(), un code tout simple
    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
    #include <stdio.h>
     
    #define LZ	10
     
    void displayFullLine(void) {
    	for(int i=0;i<LZ;i++)
    		putchar('*');
    	putchar('\n');
    }
     
    int main(void) {
    	/* affiche la barre supérieure du Z */
    	displayFullLine();
     
    	/* les deux lignes qui suivent permettent d'afficher la barre oblique du Z */
    	for(int i=LZ-1;i>=0;i--)
    		printf("%*.s*\n",i," ");
     
    	/* affiche la barre inférieure du Z */
    	displayFullLine();
     
    	return 0;
    }

Discussions similaires

  1. faire des formes avec des étoiles en java ?!
    Par malicia_bm dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 24/03/2008, 22h36
  2. Réponses: 5
    Dernier message: 26/08/2006, 12h14
  3. [Configuration] Faire un include avec des paramètres
    Par navis84 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 26/07/2006, 10h45
  4. Faire une boucle avec des variables vides ?
    Par byloute dans le forum Linux
    Réponses: 5
    Dernier message: 23/02/2006, 09h33
  5. [SELECT] Faire un select avec des champs vides
    Par MinsK dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/08/2005, 00h05

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