Tom's Guide > Forum > Programmation > [C] desssiner une ligne puis un carré puis un triangle.

[C] desssiner une ligne puis un carré puis un triangle.

Forum Programmation : [C] desssiner une ligne puis un carré puis un triangle.

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 



Salut tout le monde!
Je dois faire un programme en C et j'utilise turbo C++ 1.0

Voici l'énoncé de mon exercice :

Ecrire un programme qui affiche 3 formes géométriques à partir de caractères, une ligne, un carré, un triangle, (une ligne séparera chaque forme) en demandant à l'utilisateur la taille qu'il souhaite.

Il faut définir et utiliser une fonction qui affiche une ligne de N caractères (N entre 1 et 8).
La saisie de la taille devra être valide (redemander un entier tant que la taille donnée n'est pas entre 1 et 8) : définir et utilisé une fonction de saisie valide.

Voici pour le moment le code que j'ai tapé mais qui me pose déja des soucis que je n'arive à résoudre :

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. void car(int i);
  4. void lig(int i);
  5. void main()
  6. {
  7.   int i;
  8.   char reslig,rescar,n;
  9.   clrscr();
  10.   printf("entrer la valeur de i" );
  11.   scanf("%d",&i);
  12.   reslig="lig(i)";
  13.   printf("%s",reslig);
  14.   rescar="car(i)";
  15.   printf("%s",rescar);
  16.   getch();
  17. }
  18. void lig(i)
  19. {
  20.   for(i=1; i<=8; i++)
  21.   {
  22.     printf("g" );
  23.   }
  24. printf("\n" );
  25. getch();
  26. }
  27. void car(i)
  28. {
  29.   for(i=1; i<=8; i++)
  30.   {
  31. printf(lig(i));
  32.   }
  33. printf("\n" );
  34. getch();
  35. }




Mais cela ne fonctionne pas! En effet, cela ne prend pas en compte le nombre que je donne et la fonction carré n'est pas exécuter! en plus quand je rentre une valeur, le charactère que j'ai pré-enregistrer pour les dessins sont raplacer par d'autres charactères.

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

- déjà car n'est jamais appelé nulle part.
- C'est pas rescar="car(i)"; mais rescar=car(i); qu'il faut mettre.
- Ensuite toutes tes fonctions sont déclarées avec un retour void qui signifie que ça ne retourne rien:
printf(lig(i)); ne fait rien sur le printf, écrit simplement lig(i);
Si tu ajoutes un type de retour pense à mettre des return dans tes fonctions.
- les paramètres des fonctions ne sont pas typés:
void lig (int i)

Répondre à CRicky

Salut bon j ai pas regarder a fond tout ton code mais déja cette partie la ne peux pas marcher:

Code :
  1. printf("entrer la valeur de i" );
  2.   scanf("%d",&i);
  3.   reslig="lig(i)";
  4.   printf("%s",reslig);
  5.   rescar="car(i)";
  6.   printf("%s",rescar);
  7.   getch();


tu essaie de mettre dans reslig une chaine de caractére car ta fonction ecrit entre guillemet n est pas interpréter mais transformé en en chaine de caractéres:

si je comprend bien ce que tu a voulu faire c est récuperer un caractère venant de l execution de ta fonction dans c est cas la tu dois ecrire une fonction char pas void car void ne renvoie rien!

bon tu m as l air très mal partie donc un conseil commence a écrire ton programe en algo si tu ne connais rien
ecrit en francais ce que tu veux faire
ex:
program principale

initialisation(variables,ecran,...)
demander a l utilisateur la saisie d un nombre
récuperer le nombre dans la variable I


voila ecrit le déja comme ca post le je te dirais si c est bon et après je t aiderai a le transformer en code. tu n est pas obligé de faire ca mais comme ca tu programmera mieux dans le futur!

Répondre à showie

Voici l'algo du programme que je dois réaliser.

Code :
  1. Procédure : ligne(données N entier)
  2. variable i : entier (pour compter le nombre de répétition)
  3. début
  4.   pour i variant de 1 a N par pas de 1 faire
  5.       écrire("*" )
  6.   fin pour
  7.       passer à la ligne
  8.   fin
  9. Procédure : carré(données N entier)
  10. variable i : entier (pour compter le nombre de répétition)
  11. début
  12.   pour i variant de 1 a N par pas de 1 faire
  13.     ligne(N)
  14.     fin pour 
  15.   fin
  16. Procédure : triangle(données N entier)
  17. variable i : entier (pour compter le nombre de répétition)
  18. début
  19.   pour i variant de 1 a N par pas de 1 faire
  20.     ligne(i)
  21.     fin pour 
  22.   fin




Voici le code après quelques modifications

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. void car(int i);
  4. void lig(int i);
  5. void main()
  6. {
  7.   int i;
  8.   clrscr();
  9.   printf("entrer la valeur de i" );
  10.   fflush(stdin);
  11.   scanf("%d",&i);
  12.   printf("vous avez choisi i=%d\n",i);
  13.   lig(i);
  14.   car(i);
  15.   getchar();
  16. }
  17. void lig(int k)
  18. {
  19.   for(i=1; i<=8; i++)
  20.   {
  21.     printf("*" );
  22.   }
  23. printf("\n" );
  24. getch();
  25. }
  26. void car(int q)
  27. {
  28.   for(q=1; q<=8; q++)
  29.   {
  30.     lig(q);
  31.   }
  32. getch();
  33. }



La fonction lig() ne doit pas être bonne car quelqesoit la veleur de i que je donne, j'obtient toujours 8 charactères d'affiché à l'écran.

Répondre à boss2of8scandalz

Salut

effectivement dans la fonction ligne ta boucle fort a 8 en condition d arrêt obligatoirement et la valeur transmit a la procédure ne sert a rien.

sinon juste un détail mais tu declare tes procedure en haut avec la variable i et en bas après ca devient k et q evite d utiliser les meme nom de variables dans ton programme principale et dans tes procédures rien de pire pour que tu ais des erreur dans de future programme beaucoup plus conséquents!!


Répondre à showie

ça compile ça ?
dans lig(), i n'est pas déclaré.
Dans car() ça compile parce que tu utilise le paramètre comme variable temporaire, mais ça ne risque pas de marcher.

Répondre à CRicky
Tom's Guide > Forum > Programmation > [C] desssiner une ligne puis un carré puis un triangle.
Aller à :

Il y a 308 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens