Petite aide en c++

Fermé
widi Messages postés 34 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 16 décembre 2006 - 3 nov. 2006 à 14:38
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 - 29 nov. 2006 à 08:58
bonjour tout le monde j'ai un programme à faire et je n'y arrive pas.
Je doit faire un programme qui permet de faire un "cadre". Enfaite l'utilisateur doit donner la largeur et la longueur de ce cadre.
Par exemple si l'utilisateur donne 3 pour la longueur et 5 pour la largeur ça donnera:
+-----+
| |
| |
| |
+-----+

Je doit faire ça avec un for non?
ça serai vraimen gentil de m'aider merci d'avance

21 réponses

Utilisateur anonyme
3 nov. 2006 à 15:48
slt non le for est une boucle qui s'auto-incremente (de 1 si tu ne précise pas le Pas) d'une valeur définie à une autre valeur définie(et non une variable)...
0
widi Messages postés 34 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 16 décembre 2006
3 nov. 2006 à 17:27
ben je fait avec quoi alors car j'ai un maximum pour ma longueur et ma largeur
0
Utilisateur anonyme
3 nov. 2006 à 19:44
Dsl je commence tout juste avec le c++
mais pour la largeur / longueur max tu peux utiliser differente choses
le tant que :
tant que la longueur ne depassepa la limite faire...
ou avec le si... ou d'autres encores.. mais apre je ne sai pa comme tu peu faire ton programme... dsl
0
Lazarey Messages postés 3239 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 21 mai 2012 745
4 nov. 2006 à 22:08
C'est facile.
D'abord tu déclare deux variables, une pour la longueur et une pour la largeur. Tu demande à l'utilisateur de leur donner une valeur.
Ensuite tu fait une boucle for qui démare à 1 et qui va jusqu'à la valeur de la variable de la largeur. Dans ta boucle tu affiche un "-" a chaque incrémentation.
Pour la largeur, tu fais la meme chose, mais en colone, c'est à dire tu affiche un | et un endl à chaque incrémentation.
0

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

Posez votre question
Utilisateur anonyme
5 nov. 2006 à 21:56
a ouais pas con je voyais pas ca comme ca...lol
0
widi Messages postés 34 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 16 décembre 2006
6 nov. 2006 à 10:19
coucou, encore merci beaucoup pour votre aide donc j'ai fait ce que vous m'avez dit mais malheureusement ça fait pas ce que je veut voila mon programme:

#include <iostream>
using namespace std;
main ( ){

float lo, la, symb;

cout<<"Veuillez entrer la largeur de votre contour"<<endl;
cin>>la;
cout<<"Veuillez entrer la longueur de votre contour"<<endl;
cin>>lo;

for(lo=1; lo<=60;){
for(la=1; la<=80;){
cout<<"-";
}
cout<<"\n";


cout<<"|"<<endl;
}
}


les valeur 60 et 80 sont les deux valeurs que je ne doit pas depasser, le seul probléme c'est que les valeur que je rentre ne sont pas pris en compte doit y'avoir un problème mais j'arrive pas à faire autrement. Et sinon la variable symb el sert pour la suite repondez moi svp
0
widi Messages postés 34 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 16 décembre 2006
7 nov. 2006 à 19:08
SVP aidez moi
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
7 nov. 2006 à 19:36
Salut,

Tu n'as du bien comprendre le concept du for.
for(truc à faire au début; condition à tester pour continuer ou terminer la boucle ; action à faire à chaque itération)


Donc ce qu'il faut que tu fasses, c'est utiliser lo et la, là tu les réinitialise à 1 avec ton for alors que l'utilisateur a mis des données dedans.

Perso je verrais ça:
//On est dans le main
float lo, la, symb;
int i,j;

cout<<"Veuillez entrer la largeur de votre contour"<<endl;
cin>>la;
cout<<"Veuillez entrer la longueur de votre contour"<<endl;
cin>>lo;

if(lo>60)  lo=60;
if(la>80) la=80;

for(i=0 ; i<lo; i++){
          for(j=0; j<la; j++){
                 cout<<"-";
          }
          cout<<"\n";
          cout<<"|"<<endl;
}
 
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 nov. 2006 à 23:57
Salut.
Je ne sais pas où Lapinkiller à vue que les boucles s'incrémentaient toute seule, mais je pense que c'est faux, ou alors sur certain compilateur par très iso. Moi la boucle, je la verrai comme ça (je met pas le début):
cout<<'+';
for (int i=1;i<la-1;i++)
    cout<<'-';
cout<<"+\n";
for(int j=1;j<lo-1;j++)
   {
   cout<<'|';
   for (int i=1;i<la-1;i++)
       cout<<' ';
   cout<<"|\n";
   }
for (int i=1;i<la-1;i++)
    cout<<'-';
cout<<"+\n"<<endl;
sous condition que lo>2 et la>2
0
widi Messages postés 34 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 16 décembre 2006
8 nov. 2006 à 13:18
merci encore de votre aide le programme de lapinkiller ne fonctionnais pa exactement comme je voulais mais celui de char Snipeur fonctionne super bien à une détail pres.
Par exemple lorsque j'inscrit une largeur de 5 et une longueur de 3 ça me met:
+---+
| |
+---+
alors que je voudrais que ça me fasse:

+-----+
| |
| |
| |
+-----+

donc pour se faire j'ai deja enlever les -1 mais ça m'en ajoute que 1 dc voila si vous savez .....
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
8 nov. 2006 à 16:22
tu enleve le -1, et tu commence à 0 au lieu de 1.
J'avais pas compris que ce que tu donnait c'etait la largeur hauteur intérieur.
0
Utilisateur anonyme
10 nov. 2006 à 23:06
quand j'ai di que la boucle s'auto incrementait c'estque l'incrementation se trouvaitentre les parametre du for... il n'y a pas besoin de rajouter l"incrementation" apres dans la boucle comme c'est le car avec le while
sinon en effet au for il manque un paramatre: leparametre d'incrementation et n'oublie pas de declarer tes variables.
et pourquoi tu di que mon programme ne fonctionne pas , alors que je ne t'ai donne aucun pprogramme ???
0
widi Messages postés 34 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 16 décembre 2006
16 nov. 2006 à 12:04
Je vous remercie tous de m'aider (excuse Lapinkiller je me suis tromper de pseudo).
Tout mon programme marche comme je veux.
Maintenant je voudrais savoir comment on peut créer un disque en donnant le diametre et la position (ligne, colonne) car je doit l'inserer dans mon cadre.
Je ne veux pa un programme tout fait cela ne vas pa me faire apprndre, mais je voudrais que vous m'indiquiez au moins la direction a prendre car je ne voit pas du tout.
Je vous donne un tit exemple de disque:

#####
#########
###########
#############
#############
###############
###############
###############
###############
###############
#############
#############
###########
#########
#####

ce disque a un rayon de 7,5
Voila j'attend vos reponse merci
enfin la ça marche pas car kan je l'édite ça me mais tout à la ligne si vous voulez un exemple aller a l'adresse
http://cours-info.iut-bm.univ-fcomte.fr/C/1a/2005-2006/projets/projets1A.html
voila bye
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
16 nov. 2006 à 12:30
Salut. Si tu veux garder les espaces, met ton texte entre les balise de code
pour faire un cercle, il faut que tu sache combien de caratères il faut par ligne, et ensuite les retrancher aux espaces du cadre.
Pour savoir combien il faut de caractères, il faut faire un peu de math, en utilisant l'équation anonique du cercle : (x-x0)²+(y-t0)²=R²
(x0,y0) le centre du cercle, R son rayon
0
widi Messages postés 34 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 16 décembre 2006
16 nov. 2006 à 13:23
ouai ms le truc c'est que c'est pas un cercle c'est un disque
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
16 nov. 2006 à 16:34
presque pareil : (x-x0)²+(y-t0)²<R²
0
widi Messages postés 34 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 16 décembre 2006
16 nov. 2006 à 16:53
Et comment tu fai pour attribuer la valeur de la ligne et/ou de la colonne
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297 > widi Messages postés 34 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 16 décembre 2006
17 nov. 2006 à 08:27
très simplement, tu associe un repère à ton cadre.
donc, x0 c'est ta ligne, et y0 ta colonne.
Je ne te cache pas que c'est pas évident à mettre dans le cadre.
le mieux serai peut être d'utiliser une bib qui permet de positionner le curseur et d'écrire en écrasant ce qui a déjà été écrit.
Voir du coté de conio.h
0
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751 > Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023
17 nov. 2006 à 09:46
Je fais amicalement remarquer que la solution figure ci-dessous...
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297 > mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024
17 nov. 2006 à 10:29
Merci, j'avais vue.
Mais il manque la moitié du disque, le disque n'est pas dans le cadre, mais dessous, et on ne peut pas choisir sa position.
Bonne chance
0
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751
16 nov. 2006 à 19:15
#include <iostream>
#include <math.h>

void ecrire_rectangle(unsigned int largeur,unsigned int hauteur){
    std::cout << '+';
    for(unsigned int i=0;i<largeur;++i) std::cout << '-';
    std::cout << '+' << std::endl;
    for(unsigned int j=0;j<hauteur;++j){
        std::cout << '|';
        for(unsigned int i=0;i<largeur;++i) std::cout << ' ';
        std::cout << '|' << std::endl;
    }
    std::cout << '+';
    for(unsigned int i=0;i<largeur;++i) std::cout << '-';
    std::cout << '+' << std::endl;
}

void ecrire_demi_disque(unsigned int rayon){
    for(unsigned int j=0;j<2*rayon;++j){
        for(unsigned int i=0;i<rayon;++i){
            if(sqrt(i*i+(j-rayon)*(j-rayon))<rayon) std::cout << '#';
            else break;
        }
        std::cout << std::endl;
    }
}

int main(){
    unsigned int largeur=10,hauteur=4,rayon=8;
    ecrire_rectangle(largeur,hauteur);
    ecrire_demi_disque(rayon);
    return 0;
}

Amusez vous bien ;)
0
widi Messages postés 34 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 16 décembre 2006
17 nov. 2006 à 11:38
Je vous remercie tous pour votre aide mais je ne connait pas du tout les fctions que vous me proproser, vous connaissez pas un tit site ou il explique un peu tout ça car la je nage et je desespere.
Merci
0
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751
17 nov. 2006 à 14:52
De quelles fonctions parles-tu ? Tu repars bien du code mis en <18> ?

sqrt = racine carrée
http://ww12.maconlinux.net

std::cout = la sortie standard
std::endl = retour chariot
<< = écrire
http://www.cplusplus.com/reference/iostream/

Bonne chance
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
18 nov. 2006 à 11:26
Salut.
J'ai trouvé la réponse dans la nuit.
le mieux c'est de faire ton disque en même temps que le cadre.
quand tu rempli ton cadre avec les espace, tu rajoute un test, si la coordonnée que tu es en train de remplir est dans le disque, alors tu remplace l'espace par un dièse.
0
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751
18 nov. 2006 à 11:34
Ah ben c'est simple pourtant il suffit de miser les deux fonctions que j'ai donné.
dans dessiner rectangle, changer le bloc
    for(unsigned int j=0;j<hauteur;++j){
        std::cout << '|';
        for(unsigned int i=0;i<largeur;++i) std::cout << ' ';
        std::cout << '|' << std::endl;
    }

par :
    for(unsigned int j=0;j<hauteur;++j){
        std::cout << '|';
        for(unsigned int i=0;i<largeur;++i){
          if(dans_disque(xcentre,ycentre,rayon,i,j)) std::cout << '#'
          else std::cout << ' ';
        }
        std::cout << '|' << std::endl;
    }


Pour la fonction "dans_disque" s'inspirer de mon ancienne fonction dessiner_disque + de la formule donnée <16>. Elle teste si pour des coordonnées si on est dans un disque de centre (xcentre,ycentre) et de rayon 'rayon'.

Je peux pas en dire plus parce que sinon ça revient à faire ton sujet à ta place.

Bonne chance
0
widi Messages postés 34 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 16 décembre 2006
28 nov. 2006 à 13:58
Bonjour tout le monde je vous remercie de m'avoir aider mon projet touche à sa fin, une seule question me reste. Des personne m'ont conseillé d'initialiser mes variables je voudrais savoir à quoi sa sert, et comment je peut faire apparaitre cette initialisation dans mon algo (si il faut le faire.)
Voila je vous remerci des que j'ai fini le programme je le mettrai
0
widi Messages postés 34 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 16 décembre 2006
28 nov. 2006 à 20:07
vous pouvez pas m'aider??
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
29 nov. 2006 à 08:46
Salut.
initialisé les variable, ça n'a d'intéret que si ces valeurs ont des chances de ne pas être modifé dans la suite.
En théorie, ecrire int j; c'est strictement équivalent à "int j=0;" (j initialisé à 0) par contre, int *pj;pj= new int; *pj n'est pas initialisé, sa valeur peut être n'importe quoi !!
donc, après ça dépend du contexte/
0