Rechercher : dans
Par :

[c] dessiner une ligne un carré, un triangle,

Dernière réponse le 26 avr 2008 à 15:21:25 bosz28, le 16 oct 2005 à 18:47:55 
 Signaler ce message aux modérateurs




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.

Meilleures réponses pour « [c] dessiner une ligne un carré, un triangle, » dans :
[Windows] Obtenir la liste des fichiers d'un dossier VoirLister le contenu d'un dossier Voici une astuce simple qui permet de lister le nom des fichiers contenus dans un répertoire. Vous pourrez obtenir en un clic les titres de vos chansons, de vos photos, etc. dans un fichier...
[Photoshop] Outil vectoriel Plume [Tutoriel] VoirL'outil vectoriel Plume Partie théorique Présentation But de ce tutoriel Pourquoi choisir l'outil plume L'essentiel de l'outil plume Modification de tracé Partie pratique Projet initial Variantes Partie théorique Présentation
3D Secure / Verified by Visa / SecureCode: Qu'est-ce que c'est ? VoirDepuis octobre 2008, les banques et commerçants en ligne ont commencé à adopter le système 3DSecure pour les paiements sur Internet. Qu'est-ce que c'est ? 3DSecure est appelé "Verified by Visa" chez Visa, et "SecureCode" chez Mastercard. (Les logos...
Technicien de maintenance informatique VoirTechnicien de maintenance Le technicien de maintenance informatique (parfois appelé technicien support ou technicien d'exploitation) est chargé de s'assurer du bon fonctionnement des postes de travail, des logiciels et des périphériques...

1

kilian, le 16 oct 2005 à 19:11:21

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;
}

Répondre à kilian

2

kilian, le 16 oct 2005 à 19:17:44

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

Répondre à kilian

3

bosz28, le 17 oct 2005 à 07:06:25

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.

Répondre à bosz28

4

Zep3k!GnO, le 17 oct 2005 à 09:52:48

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

Répondre à Zep3k!GnO

5

 deazure, le 26 avr 2008 à 15:21:25

Voici ce que je veux faire
|-----------------------------------------------------------­-----------------------------------------------------|
| |
| ecriture du programme |
| |
|-----------------------------------------------------------­------------------------------------------------------ |

Répondre à deazure