Comment faire un programme avec des ***
Résolu
Rmizoune
Messages postés
9
Statut
Membre
-
Hxyp Messages postés 401 Date d'inscription Statut Membre Dernière intervention -
Hxyp Messages postés 401 Date d'inscription Statut Membre Dernière intervention -
Bonjour je suis nouveau dans comment ca marche et je vous demande une petite quéstion sur un programme que j'ai tapé mais il y a un problème l'énoncé dis :
Ecrire un programme qui dessine un cadre en caractère * de largeur X et de hauteur Y. Ces valeurs
seront entrées au clavier. Exemple :
X= 5
Y= 7
donne
*****
* *
* *
* *
* *
* *
*****
A la fin merci beaucoup si vous répondez j'att vos réponse avant le vendredi merci bcp
Ecrire un programme qui dessine un cadre en caractère * de largeur X et de hauteur Y. Ces valeurs
seront entrées au clavier. Exemple :
X= 5
Y= 7
donne
*****
* *
* *
* *
* *
* *
*****
A la fin merci beaucoup si vous répondez j'att vos réponse avant le vendredi merci bcp
A voir également:
- Comment faire un programme avec des ***
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Comment faire un message programmé sur iphone - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Comment fermer un programme qui ne répond pas - Guide
2 réponses
Bonjour, vous pouvez n'utiliser qu'un seul tableau je trouve que c'est plus simple ainsi. Exemple :
int main()
{
//Declaration des variables :
int i, j, p=0, x=0, y=0;
char *buff, as='*';
size_t taille_buff;
//La saisie :
system("color f1");
printf("Largeur : ");
scanf ("%d",&x);
printf("Hauteur : ");
scanf ("%d",&y);
taille_buff=x*y+y; //+y pour le saut \n ajouté en fin des lignes
buff=(char*)malloc(taille_buff); //alloue la mémoire
for(i=0;i<y;i++) //y
{
for(j=0;j<x;j++) //x
{
if((!i)||(i==y-1)) buff[p]=as; //premiere ligne ou derniere
else if((!j)||(j==x-1)) buff[p]=as; //premier char ou dernier
else buff[p]=' ';//le centre
p++;//position dans buff
}
buff[p]='\n'; p++;//fin de ligne
}
buff[taille_buff-1]='\0';//dernier caractere qui est un \n devient un \0
printf("%s",buff); //affichage
free(buff); //libère la mémoire
return 0;
}
Merci beaucoup Hxyp je veux juste savoir a quoi ca sert c 2 truc :
char *buff, as='*';
size_t taille_buff;
buff que j'ai pas compris mais je c que ta déclarer un tableau je pense
char *buff, as='*';
size_t taille_buff;
buff que j'ai pas compris mais je c que ta déclarer un tableau je pense
Désolé du retard à vous répondre, en fait j'avais répondu mais il semble que je n'avais pas valider la prévisualisation de ma réponse... ahahah
Alors oui il y a bien un tableau, la ligne
char *buff, as='*';
revient à faire : char *buff; char as='*';
char *buff; c'est un pointeur ce qui veut dire qu'il doit pointer vers un bloc mémoire pour être utilisé comme un tableau avec les [ ] -> buff[i]. Vu qu'on ne connait pas la taille de nôtre tableau avant la compilation on va allouer de la mémoire d'une façon dynamique et récupérer le pointeur qui en découle.
La fonction malloc(size_t size) nous fait ça, elle prend en paramètre un size_t c'est pourquoi j'ai utilisé size_t taille_buff; pour passer la taille à allouer du tableau à malloc. Une fois que malloc à réussi à allouer un bloc mémoire à la taille désirée (taille_buff) il renvoit le pointeur vers celui-ci.
buff=(char*)malloc(taille_buff); buff récupère le pointeur donné par malloc, le (char*) c'est un cast car malloc retourne un void et comme buff est un char*...
Après ça buff devient un tableau identique à un :
char buff[taille_buff];
malloc : http://www.cplusplus.com/reference/cstdlib/malloc/
Alors oui il y a bien un tableau, la ligne
char *buff, as='*';
revient à faire : char *buff; char as='*';
char *buff; c'est un pointeur ce qui veut dire qu'il doit pointer vers un bloc mémoire pour être utilisé comme un tableau avec les [ ] -> buff[i]. Vu qu'on ne connait pas la taille de nôtre tableau avant la compilation on va allouer de la mémoire d'une façon dynamique et récupérer le pointeur qui en découle.
La fonction malloc(size_t size) nous fait ça, elle prend en paramètre un size_t c'est pourquoi j'ai utilisé size_t taille_buff; pour passer la taille à allouer du tableau à malloc. Une fois que malloc à réussi à allouer un bloc mémoire à la taille désirée (taille_buff) il renvoit le pointeur vers celui-ci.
buff=(char*)malloc(taille_buff); buff récupère le pointeur donné par malloc, le (char*) c'est un cast car malloc retourne un void et comme buff est un char*...
Après ça buff devient un tableau identique à un :
char buff[taille_buff];
malloc : http://www.cplusplus.com/reference/cstdlib/malloc/
Hxyp,
le (char*) c'est un cast car malloc retourne un void et comme buff est un char*...
Juste pour info, malloc retourne un void* et non un void. Et il n'y a pas besoin de caster, le cast est implicite : particularité de void*. Le cast était obligatoire en pré-ansi où le type générique void* n'existait pas.
Cdlt,
le (char*) c'est un cast car malloc retourne un void et comme buff est un char*...
Juste pour info, malloc retourne un void* et non un void. Et il n'y a pas besoin de caster, le cast est implicite : particularité de void*. Le cast était obligatoire en pré-ansi où le type générique void* n'existait pas.
Cdlt,