1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 18
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2017
    Messages : 8
    Points : 5
    Points
    5

    Par défaut Aide modification d'un programme

    Bonjour à tous, nous avions à écrire un programme qui lit au clavier un entier positif n et trace un carré de longueur n
    rempli d’étoiles. J'ai réussis à faire celui-ci qui fonctionne et maintenant on doit le modifier pour que des "+" soit sur la diagonale du carrée. J'ai essayé de nombreuses choses mais sans succès. Je compte sur vos connaissances pour m'éclairez
    Merci d'avance pour votre aide .


    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
     #include <stdio.h>
     
    int main(){
    	int i = 1,l, j=0;
     
    	printf("Saisissez la largeur ,souhaitée pour le carré :\n");
    	scanf("%d",&l);
     
     
    while (j<=l) {
     
    	while (i<=l) {	
     
    		if (i<l) {	
    			printf("*");
    			i++; }
     
    		else if (i=l) {
    			printf("*\n");
    			i++;}
     
    		}
     
     
    	j++;
    	i=1;
    	}
     
    	return 0;
     
    }

  2. #2
    Responsable Modération
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    7 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 7 070
    Points : 22 343
    Points
    22 343

    Par défaut

    Bonjour,

    Un indice : pour dessiner ligne par ligne ceci :
    +*****
    *+****
    **+***
    ***+**
    ****+*
    *****+
    Il faut d'abord écrire ceci :
    +*****
    … puis ceci :
    *+****
    …puis ceci :
    **+***
    etc.

    Donc, en gros, à chaque ligne il faut écrire « une étoile de plus » qu'à la ligne précédente (en commençant à zéro), suivie d'exactement un seul « + », suivi « d'une étoile de moins » qu'à la ligne précédente, en commençant à n.


    Une astuce : tu peux t'épargner de fastidieuses boucles imbriquées en utilisant la syntaxe : printf ("%*c",…,…);. Voir la man page de printf pour cela.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    5 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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 : 5 928
    Points : 16 386
    Points
    16 386
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par lucasvvv Voir le message
    J'ai réussis à faire celui-ci qui fonctionne

    Bonjour

    t'es sûr que ça fonctionne ça ??????

    Citation Envoyé par lucasvvv Voir le message
    et maintenant on doit le modifier pour que des "+" soient sur la diagonale du carrée.
    Laquelle de diagonale ? L'article défini "la" implique que l'élément cité soit parfaitement défini (ou définissable par déduction) ; ce qui n'est pas le cas ici !!!

    Citation Envoyé par lucasvvv Voir le message
    J'ai essayé de nombreuses choses mais sans succès. Je compte sur vos connaissances pour m'éclairer
    Si c'est la diagonale nord-ouest/sud-est, alors chaque "+" s'affiche quand les coordonnées (x, y) du pixel sont égales (x=y).
    Si c'est la diagonale nord-est/sud-ouest, alors chaque "+" s'affiche quand x=(l-y)
    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

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 18
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2017
    Messages : 8
    Points : 5
    Points
    5

    Par défaut

    Merci pour vos réponses j'ai finalement réussis

    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 <stdlib.h>
     
    int main()
    {
     
        int l,j, i=0 ,x=2;
     
        printf("Veuillez saisir la largeur souhaitée pour le carre : ");
        scanf("%d",&l);
        j=l;
     
        while (i<l) {
     
                while (j<l){
                printf("*");
                j++;
                }
     
                printf("+");
     
                while (x<=l-i) {
                    if (x<l-i) { printf("*");}
                    if (x==l-i) { printf("*\n");}
               x++; }
     
     
                i++;
                j = j-i;
                x=2;}
    return 0;
    }
    J'ai tout de même utilisé les structures itératives au lieu de printf(%*c,...) car cela nous est imposé.
    Bonne soirée à vous

  5. #5
    Responsable Modération
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    septembre 2007
    Messages
    7 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2007
    Messages : 7 070
    Points : 22 343
    Points
    22 343

    Par défaut

    Citation Envoyé par lucasvvv Voir le message
    J'ai tout de même utilisé les structures itératives au lieu de printf(%*c,...) car cela nous est imposé.
    Bonne soirée à vous
    Super !
    Mais essaie quand même de recourir à for plutôt qu'à while dans ce genre de cas.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    5 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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 : 5 928
    Points : 16 386
    Points
    16 386
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par lucasvvv Voir le message
    Merci pour vos réponses j'ai finalement réussis
    Ouch cette orthographe !!! Et ce code... T'as pas trouvé plus simple ? Parce que tous tes tests et ce "j" qui récupère "j-i" à chaque itération... Et ce "x=2" qui arrive et qui sert à on ne sait trop quoi...
    Un code, ca doit être à la fois efficace et simple. Efficace bien entendu mais simple pour pouvoir le relire et le faire évoluer facilement. Et ça doit être aussi écrit proprement pour pouvoir être lu facilement. Donc indenté. Je sais pas moi, quand tu lis un livre, t'aimes bien que les lignes soient alignées. T'apprécierais un livre avec des lignes en vrac ???

    Donc un carré c'est en 2D donc à priori 2 variables suffisent (peut-être c'est ça le "x=2"...). Eventuellement une 3° pour sa longueur...
    Ensuite il suffit de balayer la longueur fois largeur et afficher "*" sauf dans un cas particulier où on affiche "+". Donc à priori deux boucles imbriquées et un seul test devraient suffire.

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
    	int j, i, l;
     
    	printf("Veuillez saisir la largeur souhaitée pour le carre : ");
    	scanf("%d",&l);
     
    	for (i=0; i < l; i++) {
    		for (j=0; j < l; j++) {
    			printf("%c", j != i ?'*' :'+');
    			/* Ok, j'utilise un ternaire pour simplifier. Mais s'il faut vraiment un test explicite...
    			if (j != i)
    				printf("*");
    			else
    				printf("+");
    			*/
    		}
    		printf("\n");
    	}
    	return 0;
    }
    Ca n'a pas déjà un peu plus d'allure ???
    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

  7. #7
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    2 203
    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 : 2 203
    Points : 4 889
    Points
    4 889

    Par défaut

    Avec 1 seule boucle et 0 test [sauf la précondition (width > 0) et le test NULL]

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
    int main(int argc, char** argv)
    {
        unsigned char* one_row /*= NULL*/;
        int nb_items, width;
     
        printf("Veuillez saisir la largeur souhaitée pour le carre : ");
        nb_items = scanf("%d", &width);
     
        if (nb_items != 1) {
            printf("\nErreur : votre saisie est erronée\n");
     
            return EXIT_FAILURE;
        }
     
        if (width == 0) {
            printf("\nAttention : vous avez saisi une largeur nulle : rien à faire\n");
     
            return EXIT_SUCCESS;
        } else {
            printf("\n\nMatrice :\n");
        }
     
        one_row = malloc((width + 1) /* * sizeof(unsigned char)*/);
     
        if (one_row != NULL) {
            int row /*= 0*/;
     
            memset(one_row, '*', width);
     
            one_row[0]     = '+';
            one_row[width] = '\0';
     
            for(row = 0; row < (width - 1); ++row) {
                printf("%s\n", one_row);
     
                one_row[row]     = '*';
                one_row[row + 1] = '+';
            }
     
    //      Print last row
            printf("%s\n", one_row);
     
    //      Clean
            free(one_row);
            one_row = NULL;
        }
     
        return EXIT_SUCCESS;
    }
    Édit : Pyramidev a raison de tester le retour de la fonction scanf

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    5 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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 : 5 928
    Points : 16 386
    Points
    16 386
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par foetus Voir le message
    Avec 1 seule boucle
    Astucieux. Tu crées une ligne d'étoiles, avec un '+' au début. Puis tu affiches ta ligne et enfin tu décales le '+' au fur et à mesure que tu descends dans les lignes.

    Mais ne peut-on pas considérer que la seconde boucle (que tu réfutes) est présente dans le printf("%s\n", one_row) (sans parler du memset qui ne remplit probablement pas sa zone par l'opération du saint-esprit) ???
    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

  9. #9
    Membre chevronné
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    avril 2016
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : avril 2016
    Messages : 469
    Points : 2 084
    Points
    2 084

    Par défaut

    Ma petite contribution :
    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 <stdio.h>
     
    int main(void)
    {
    	printf("Veuillez saisir la largeur souhaitee pour le carre : ");
    	int largeurCarre;
    	const int nbInfosLues = scanf("%d", &largeurCarre);
     
    	if(nbInfosLues < 1) {
    		printf("Erreur : Ce que vous avez saisi n'est pas un entier.\n");
    		return 1;
    	}
     
    	if(largeurCarre < 1) {
    		printf("Erreur : L'entier saisi doit etre strictement positif.\n");
    		return 2;
    	}
     
    	for(int ligne = 0; ligne < largeurCarre; ++ligne) {
    		for(int colonne = 0; colonne < largeurCarre; ++colonne) {
    			const char carac = (ligne == colonne) ? '+' : '*';
    			putc(carac, stdout);
    		}
    		putc('\n', stdout);
    	}
     
    	return 0;
    }
    Remarques :
    • Les noms des variables doivent être significatifs. l est une mauvaise idée. En plus, il ressemble à 1.
    • Ne pas oublier de tester le retour de scanf.
    • Pour afficher un seul caractère, putc me semble adapté.

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    5 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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 : 5 928
    Points : 16 386
    Points
    16 386
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par Pyramidev Voir le message
    l est une mauvaise idée. En plus, il ressemble à 1.
    Je suis d'accord. D'ailleurs au début je l'ai effectivement confondu.
    Citation Envoyé par Pyramidev Voir le message
    Pour afficher un seul caractère, putc me semble adapté.
    Certes, et Bktero te dira que je plussoies généralement aussi dans ce sens
    Mais là je m'étais dit que comme c'était un exo de débutant, je n'ai pas voulu lui mettre un code trop en dehors de ses connaissances présumées.
    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

Discussions similaires

  1. [FB4] Aide modification programme
    Par bensefaj dans le forum Flex
    Réponses: 5
    Dernier message: 18/07/2013, 10h48
  2. [TP] Aide pour commenter un programme
    Par justind1989 dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 06/04/2006, 20h11
  3. [Oracle 9i] aide modification d'une colonne
    Par bubblelicious dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/03/2006, 16h29
  4. [Language] Aide sur mon premier programme Java?
    Par hash2zo dans le forum Langage
    Réponses: 15
    Dernier message: 27/09/2005, 20h26
  5. [TPW][cours]Demande d'aide pour finir un programme
    Par jf dans le forum Turbo Pascal
    Réponses: 21
    Dernier message: 16/06/2003, 19h10

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