Comment faire un programme avec des ***
Résolu
Rmizoune
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
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
- Forcer la fermeture d'un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - 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,