Code C++

Fermé
sivalto - 17 juil. 2011 à 20:21
 sivalto - 18 juil. 2011 à 12:58
Bonjour, j'ai un code C++ simple qui créer un rectangle avec les dimension qu'on lui a donné, longueur, hauteur. C'est un code du sdz. A la fin, il demande de modifier le code :

- Afficher un message d'erreur si la hauteur ou la largeur est négative. (Je l'ai fait)
- Ajouter un argument pour le symbole à utiliser lors du dessin.


Pour le deuxième point, il me faudrait de l'aide, merci.

void dessineRectangle(int l, int h)
{
for(int ligne(0); ligne < h; ligne++)
{
for(int colonne(0); colonne < l; colonne++)
{
cout << "*";
}
cout << endl;
}
}


int main()
{
int largeur, hauteur;
cout << "Largeur du rectangle : ";
cin >> largeur;
cout << "Hauteur du rectangle : ";
cin >> hauteur;


if (largeur < 0 || hauteur < 0)
{
cout << "Vous avez entre un nombre negatif, reesayez." << endl;
}


dessineRectangle(largeur, hauteur);

dessineRectangleun(largeur, hauteur);
return 0;
}
A voir également:

6 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
Modifié par Pacorabanix le 17/07/2011 à 23:11
salut,

tu vois, ton rectangle tu le dessines avec le caractère '*' . Mais rien ne t'empêcherait de faire une autre fonction dessine rectangle qui dessine le rectangle avec par ex. le caractère '+' ou 'x' etc...

tu pourrais faire plusieurs fonctions :
dessineRectangle(int l, int h) // ta fonction, qui dessine avec *      
dessineRectangleAvecPlus(int l, int h) // une autre qui dessine avec +      
dessineRectangleAvecX(int l, int h) // une autre qui dessine avec X  


etc...


mais c'est un peu moche.

finalement, ce caractère, tu pourrais très bien faire en sorte que ce soit un des paramètres que tu donnes à la fonction, comme la largeur et la longueur.

tu appellerais alors ta fonction depuis le main avec un troisième argument comme ceci :

int main() {      
    //. ...       
    dessineRectangle(largeur, hauteur, '*');      
    dessineRectangle(largeur, hauteur, '+');      
    dessineRectangle(largeur, hauteur, 'X' );      
   // ...      
}      


tu comprends ?

et après, tu peux simplement demander le caractère dans le main, comme tu fais avec la largeur et la hauteur, dans une variable "caractere" par ex. , et tu appelles ta fonction avec cette variable :
dessineRectangle(largeur, hauteur, caractere );
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 17/07/2011 à 22:14
Je trouve bizarre ton utilisation de ta boucle...
ligne(0) ça fait penser à l'utilisation d'un constructeur par défaut d'un objet alors que int est type primitif et l'initialisation serait plutôt ligne=0

De plus je mettrai l'affichage de l'erreur à l'intérieur de la fonction...

Sinon je ne vois pas l'erreur, peut-être dans la fonction dessineRectangleun, mais tu ne l'as pas précisé...
La confiance n'exclut pas le contrôle
0
@Pacorabanix :

"tu vois, ton rectangle tu le dessines avec le caractère '*' . Mais rien ne t'empêcherait de faire une autre fonction dessine rectangle qui dessine le rectangle avec par ex. le caractère '+' ou 'x' etc... "

Oui, c'est ce que je veux faire. J'avais rajouter une troisième fonction :

void dessineRectangleun(int l, int h)
{
for(int ligne(0); ligne < h; ligne++)
{
for(int colonne(0); colonne < l; colonne++)
{
cout << "o";
}
cout << endl;
}
}


Et donc, c'est pour ça qu'il y avait dessineRectangleun dans la fonction main.
Bah en fait, comme je l'attendais, ça a fait un rectangle de * et un autre en dessous de o. Or, je veux qu'on ait le choix pour le symbole à utiliser lors de la création du rectangle.


@KX : C'est le code d'un petit exemple sur le sdz, je n'ai rajouté que la condition.
Merci
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
18 juil. 2011 à 00:45
Comme le disait Pacorabanix, plutôt que de faire une fonction par caractère différent, tu dois rajouter un argument à ta fonction pour préciser quel caractère tu affiches.
Tu n'as alors plus qu'à faire un cin supplémentaire pour récupérer ce caractère et l'utiliser dans la fonction...

#include <iostream>

void dessineRectangle(int x, int y, char c)
{
	if (x<=0 || y<=0)
	{
		std::cerr << "Largeur et hauteur d'un rectangle doivent etre positives" << std::endl;
		return;
	}
	
	for (int i=0; i<x; i++)
	{
		for (int j=0; j<y; j++)
			std::cout << c;
		std::cout << std::endl;
	}
}

int main()
{
	int x,y;
	char c;
	
	std::cout << "Largeur du rectangle : ";
	std::cin  >> x;
	std::cout << "Hauteur du rectangle : ";
	std::cin  >> y;
	std::cout << "Caractere du dessin  : ";
	std::cin  >> c;
	std::cout << std::endl;
	
	dessineRectangle(x,y,c);
	
	return 0;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ha... je comprends mieux. Merci à vous deux, ça fait plaisir qu'il y ait des gens qui aident des novices comme moi :)

J'ai tout compris, cependant j'aurai deux questions :

int x,y; Ceux sont bien deux variable déclaré sans être initialisé ?

std::cin >> c; Pourquoi mets tu des std:: ? Ce n'est pas plus simple de mettre au début using namespace std; ?
Je pense qu'il doit bien avoir une raison..
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
18 juil. 2011 à 08:26
x,y et c sont initialisées au moment du cin, c'est d'ailleurs comme ça que tu faisais pour tes deux variables largeur et hauteur.

Pour le std ce n'est pas faux de mettre le using namespace dans ce code, cependant les espaces de noms permettent de lever des ambiguïtés, et cela pourrait t'amener à faire des erreurs le jour où tu devras manipuler plusieurs namespaces différents avec des noms de fonctions identiques. C'est une mauvaise habitude à prendre de toujours mettre le using namespace juste parce que c'est "plus pratique". En plus personnellement avec Visual Studio j'ai un complètement automatique, c'est à dire que dès que je tape std:: j'ai toute la liste des fonctions de l'espace de noms qui apparaissent, donc pour moi c'est ça le plus pratique ;)
0
D'accord, j'ai compris, si j'ai besoin d'aide je sais ou passer :) Merci
0