|
|
|
|
#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();
}
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:
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.
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.
|