[C] faire un prog qui affiche une ligne, un carré, un triangle

faire un prog qui affiche une ligne, un carré, un triangle [C] - C - Programmation

Marsh Posté le 16-10-2005 à 18:42:58    


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 carachtères.

Reply

Marsh Posté le 16-10-2005 à 18:42:58   

Reply

Marsh Posté le 16-10-2005 à 19:29:58    

Ta fonction "lig" telle que tu l'as écrite a pour but d'afficher 8 fois la lettre "g". Elle ne renvoie pas de valeur, elle ne fait qu'afficher à l'écran. Donc ton instruction "printf(lig(i))" n'est pas bonne parce que tu demandes d'afficher ce que "lig()" renvoie.
Tu n'as qu'à utiliser la fonction et faire tout simplement "lig(i)"
 
Pareil pour

reslig="lig(i)"

. Tu places dans un "char" une chaîne complète. Ca ne peut pas marcher. Et même si ça marchait, cela ne placerait pas les 8 "g" dans "reslig" mais juste les lettres l i g ( i ). C'est comme quand tu écris "char mot[]="bonjour". Ca places les lettres b o n j o u r dans "mot".
 
"void lig(i)" => Ta fonction a besoin de connaître le type du paramètre "i". De plus, un paramètre passé à une fonction doit être un élément que la fonction ne connait pas d'avance. Toi, tu te sers de ce "i" comme d'un simple compteur de 1 à 8. Ce travail peut très bien être fait par une variable interne à la fonction.
 
Tu devrais relire tes cours. S'ils sont mal faits, tu as deux très bon cours de C ici...
http://fr.lang.free.fr/cours/Langa [...] e_v2.0.pdf
http://mapage.noos.fr/emdel


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 17-10-2005 à 07:01:49    

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.

Message cité 1 fois
Message édité par bosz28 le 17-10-2005 à 07:02:09
Reply

Marsh Posté le 17-10-2005 à 07:18:31    

bosz28 a écrit :

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.

Code :
  1. void lig(int k)
  2. {
  3.   for(i=1; i<=8; i++)
  4.   {
  5.     printf("*" );
  6.   }
  7. printf("n" );
  8. getch();
  9. }


 
 
En effet. Dans ta fonction, la boucle va de 1 à 8. On se demande à quoi sert le paramètre "int k"
On se demande même aussi si ton programme compile vu que "i" n'est pas défini !!!
 
Ensuite, ta fonction "car" n'est pas conforme à ta procédure.
Dans ta procédure "carré", tu as "N" entier en paramètre et "i" variant de "1" à "N".
Dans ta fonction "car", tu as "q" entier en paramètre et "q" variant de "1" à "8" !!!


Message édité par Sve@r le 17-10-2005 à 07:23:50

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 17-10-2005 à 07:20:20    

Que dois-je modifier dans la fonction? je ne vois pas trop quoi faire. En faite je ne sais pas trop comment fonctionne la boucle for.

Message cité 2 fois
Message édité par bosz28 le 17-10-2005 à 07:21:01
Reply

Marsh Posté le 17-10-2005 à 07:39:55    

bosz28 a écrit :

Que dois-je modifier dans la fonction? je ne vois pas trop quoi faire. En faite je ne sais pas trop comment fonctionne la boucle for.


 
for (instruction1; instruction2; instruction3)
{
     instruction i1;
     instruction i2;
     ...
}
 
L'instruction 1 est exécutée une seule fois avant le début de boucle. Elle sert à initialiser la variable de boucle
 
L'instruction 2 est un test. Si le test est vrai, alors la boucle se fait
Les instructions i1, i2, etc sont alors exécutées
 
L'instruction 3 se fait juste avant le retour au test "instruction 2". Elle sert à modifier (incrémenter ou autre chose) la variable de boucle pour que la boucle,selon le test, recommence ou s'arrète
 
Exemple
for (i=0; i < 10; i++)
 
Et si tu lisais les liens que je t'ai donné où tout ça est déjà bien expliqué...
 
Voici la fonction "lig" écrite conformément à ton algo

Code :
  1. void lig(int k)
  2. {
  3.   int i;
  4.   for(i=1; i<=k; i++)
  5.   {
  6.     printf("*" );
  7.   }
  8. printf("\\n" );
  9. getch();
  10. }


Message édité par Sve@r le 17-10-2005 à 07:42:42

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 19-10-2005 à 17:50:35    

bosz28 a écrit :

Que dois-je modifier dans la fonction? je ne vois pas trop quoi faire. En faite je ne sais pas trop comment fonctionne la boucle for.


Si tu capte pas trop la boucle for, au pire fait du while pour le moment, c'est moins abstrait a mon gout.
 
* Pour la ligne j'aurai fait :

Code :
  1. void afficherLigne(const int largeur)
  2. {
  3.       for (int i = 1 ; i <= largeur ; i++)
  4.       {
  5.             cout << "*";
  6.       }
  7. };


 
* Pour le carré :

Code :
  1. void afficherCarre(const int cote)
  2. {
  3.       for (int i = 1 ; i <= cote ; i++)
  4.       {
  5.             cout << afficherLigne(cote) << endl;
  6.       }
  7. };


 
Pour le triangle c'est un peu plus complexe, mais ça reste fesable en tatonant. Disons que faut bien savoir le nombre de blanc et le nombre de caractere pour chaque ligne.
 
Apres t'assemble tes procedures et voilà.
 
* Pour le triangle (j'ai ressorti ça d'un TD :)) :

Code :
  1. void afficherTriangle(const int hauteur)
  2. {
  3. for (int i = 1 ; i <= hauteur ; i++)
  4. {
  5.  for (int j = 1 ; j <= hauteur - i; j++)
  6.  {
  7.   cout << " ";
  8.  }
  9.  for (int k = 1 ; k <= 2 * i - 1 ; k++)
  10.  {
  11.   cout << "*";
  12.  }
  13.  cout << endl;
  14. }
  15. };

Message cité 1 fois
Message édité par MEI le 19-10-2005 à 17:56:48

---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 19-10-2005 à 18:44:27    

MEI a écrit :


Code :
  1. cout << "*";




Pas du C...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 19-10-2005 à 18:49:40    

C'est du C++ ???
 
J'ai jamais trop capté la différence, et vu qu'on apprend que le C++ dans mon IUT. :D
 
Puis, il utilise Turbo C++ :)


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 19-10-2005 à 19:07:23    

MEI a écrit :

C'est du C++ ???

Ben oui.

Citation :

J'ai jamais trop capté la différence, et vu qu'on apprend que le C++ dans mon IUT. :D
Puis, il utilise Turbo C++ :)

Peu importe.  

  • C et C++ sont des langages différents  
  • Turbo C++ sait compiler dans les deux langages, ça dépend de l'extension (.c ou .cpp)
  • Ici, c'est le forum C.



---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed