[c] dessiner une ligne un carré, un triangle,
bosz28
-
deazure -
deazure -
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 :
#include <stdlib.h> #include <stdio.h> void car(int i); void lig(int i); void main() { int i; char reslig,rescar,n; clrscr(); printf("entrer la valeur de i"); scanf("%d",&i); reslig="lig(i)"; printf("%s",reslig); rescar="car(i)"; printf("%s",rescar); getch(); } void lig(i) { for(i=1; i<=8; i++) { printf("g"); } printf("\n"); getch(); } void car(i) { for(i=1; i<=8; i++) { printf(lig(i)); } printf("\n"); getch(); }
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.
A voir également:
- Afficher un carré en c
- Afficher appdata - Guide
- Metre carré clavier ✓ - Forum Bureautique
- 2 au carré symbole iphone ✓ - Forum iPhone
- Carré en c ✓ - Forum Programmation
- Signe au carré - Forum iPad
4 réponses
reslig="lig(i)"; rescar="car(i)";
Ici tu n'exécutes pas lig() et car()
Ce que tu fait c'est faire pointer reslig vers la chaine de caractère "lig(i)" et rescar vers la chaine "car(i)"
Tu les entoures de guillemets ce ne sont que des chaînes.
Pour executer une fonction, il ne faut pas l'entourer de guillemets.
Donc ce serait:
reslig=lig(i); rescar=car(i);
C'est déjà plus correct: lig(i) s'execute et affiche à l'écran ta ligne.
Ta fonction s'en charge donc ton printf() plus loin ne sert à rien.
En fait je vois ton résonnement, tu pensais qu'en faisant:
reslig="lig(i)";
..reslig contiendrait ce qu'affiche lig(i), et bien non ça ne fonctionne pas comme ça :-)
printf(), ça affiche toujours à l'écran et ça ne charge pas l'affichage ailleurs.
Par contre lig et car sont des fonctions de type void, donc inutile de mettre:
reslig=lig(i);
puisque lig(i) ne retourne aucune valeur (mais effectue des actions, il faut distinguer les deux notions).
Donc pour ton main, ceci corrigera déjà certains truc:
int main() //Par convention, main doit retourner un int { int i; clrscr(); printf("entrer la valeur de i"); scanf("%d",&i); lig(i); car(i); getch(); return 0; }
Ah j'oubliais:
Pourquoi pas bon?
Parce que comme je l'ai dis au dessus, lig(i) ne retourne aucune valeur (il est typé void). Donc ton printf n'affichera rien (peut être même que ça te déclenchera une erreur).
lig() fait déjà un affichage à l'écran, tu n'as donc pas à t'en soucier:
void car(i) { for(i=1; i<=8; i++) { printf(lig(i)); //Pas bon!!! } printf("\n"); getch(); }
Pourquoi pas bon?
Parce que comme je l'ai dis au dessus, lig(i) ne retourne aucune valeur (il est typé void). Donc ton printf n'affichera rien (peut être même que ça te déclenchera une erreur).
lig() fait déjà un affichage à l'écran, tu n'as donc pas à t'en soucier:
void car(i) { for(i=1; i<=8; i++) { lig(i); // La foule en délire..... } printf("\n"); getch(); }
Voici l'algo du programme que je dois réaliser.
Voici le code après quelques modifications
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.
Procédure : ligne(données N entier) variable i : entier (pour compter le nombre de répétition) début pour i variant de 1 a N par pas de 1 faire écrire("*") fin pour passer à la ligne fin Procédure : carré(données N entier) variable i : entier (pour compter le nombre de répétition) début pour i variant de 1 a N par pas de 1 faire ligne(N) fin pour fin Procédure : triangle(données N entier) variable i : entier (pour compter le nombre de répétition) début pour i variant de 1 a N par pas de 1 faire ligne(i) fin pour fin
Voici le code après quelques modifications
#include <stdlib.h> #include <stdio.h> void car(int i); void lig(int i); void main() { int i; clrscr(); printf("entrer la valeur de i"); fflush(stdin); scanf("%d",&i); printf("vous avez choisi i=%d\n",i); lig(i); car(i); getchar(); } void lig(int k) { for(i=1; i<=8; i++) { printf("*"); } printf("\n"); getch(); } void car(int q) { for(q=1; q<=8; q++) { lig(q); } getch(); }
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.
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.
void lig(int k)
{
for(i=1; i<=8; i++) // Ok ca tourne que de 1 a 8 normal ...
{
printf("*");
}
printf("\n");
getch();
}
remplace:
for(i=1; i<=8; i++)
PAR
for(i=1; i<=k; i++)
Zep3k!GnO
-->hi i hi o on va pas au boulot :P
void lig(int k)
{
for(i=1; i<=8; i++) // Ok ca tourne que de 1 a 8 normal ...
{
printf("*");
}
printf("\n");
getch();
}
remplace:
for(i=1; i<=8; i++)
PAR
for(i=1; i<=k; i++)
Zep3k!GnO
-->hi i hi o on va pas au boulot :P