IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Programme qui affiche un quadrilatère droit


Sujet :

Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut Programme qui affiche un quadrilatère droit
    Comment faire un programme en Pascal qui considère en entrée un entier non nul L et qui affiche en sortie un quadrilatère droit dont les côtés sont de longueur L caractères.

    Je sais qu'il faut utiliser les boucles mais je suis bloqué.
    (pour l'info jvé faire dodo donc je verrai les reponses demain aurevoir)

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 176
    Points
    176
    Par défaut
    Bonjour (oui ça va de soit)

    je ne pense pas qu'on va te faire ton programme pendant que toi tu dors... si tu ne nous en dis pas un peu plus et notamment où tu bloques (un peu plus précisement..)
    Ne pourrais-tu pas nous donner le code de ce que tu as dejà fait (là ou tu es en panne ?)


    voilà bonne journée.

    JoseF

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    Bonjour
    Ok c'était une façon de parler.
    Sinon, quand je le fais j'ai des problèmes d'alignement des caractères, mon rectangle obtenu à l'écran n'est pas en phase, les arêtes sont décalées.

  4. #4
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    bonjour pourquoi tu hesites a nous montrer ce queut as deja fait pour qu'on voit,
    je pense qu'il suffit de revoir ton algo de revoir tes boucles et tes affichages,
    est ce que tu veux c'est ça?
    lire un entier
    exemple L=4
    et on obtient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                      aaaa
                      a  a
                      a  a
                      aaaa
    ce que tu veux obtenir?
    pour commencer montre ce que tu as de ja fait
    on vera

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    ok, et c'est exactement ceci que je veux obtenir pour l'info. Voilà ce que j'ai fait, j'obtiens ainsi 2 côtés du rectangle mais mon souci c'est que lorsque je répète l'opération pour obtenir les 2 autres, tout est décalé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var n,i,long : integer;
    begin
    write('donner n');readln(n);
    i:=1;
    while i<=n do begin
    writeln('*':n);
    i:=1;
    while i<= long do begin
    writeln('*':n);
    i:=i+1;
    end;
     
    end;
    end.

  6. #6
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    tu sûr que tu obtient ce que tu dis
    j'obtien ainsi 2 cotés du recangle mais mon souci c'est que lorsque je repete l'operaion pour obtenir les 2 autres bas tous est decalé
    car ton prog m'a tout l'air de s'embarquer dans une boucle inifie
    d'abord il sert a quoi ta variable long,et quand tu l'utilise non seulement il n'est pas initialisé pas en plus il n'est pas incrementé ni decrémenté
    si tu met dans la boucle et si n=4 tu auras
    en plus c'est pas la peine d'utiliser la boucle while une boucle for est plus adaptée
    voila ce que je trouve moi je ne l'ai pas encore testé mais je pense que ça devrait marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Program aff;
         const car='*';
         var ncar,i:integer;
    begin
        write('Entrer entier:');
        readln(ncar);
        for i:=1 to ncar do
            write(car);
        writeln;
        for i:=1 to ncar-2  do   
             writeln(car,car:n-1);
        for i:=1 to ncar do
             write(car);
        readln;
    end.

  7. #7
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 176
    Points
    176
    Par défaut
    il y a une petite erreur dans le code mais on la trouve facile
    writeln(car,car:n-1);

    voila un programme bien indenté et qui fonctionne !

    une chose est sûre, en posant les bonnes questions (et en français) et avec le code, celà permet d'avancer dans la résolution des problèmes !

    Dans le monde du travail c'est pareil !

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,
    Citation Envoyé par superdj
    (pour l'info jvé faire dodo donc je verrai les reponses demain aurevoir)
    Je n'avais pas encore lu ton post, ce qui fait que j'arrive en retard.

    C'est bien dommage, car je t'aurais volontier demandé où tu habites, histoire de t'ammener les croissants bien frais pour le petit dejeuner.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    je suis bien d'accord avec vous mais le probleme est que se programme est a faire en boucle while .

    et merci pour les croissants

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    Voila mon nouveau programme , mais le pb c'est que j'ai toujour qu'une partie du rectangle , je narrive pas a avvoir qqch de correct pour le rest,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    var n,i : integer;
    begin
    write('donner n');readln(n);
    i:=1;
    while i<= n do begin
    write('*');
    i:=i+1;
    end;
    i:=1;
    while i<=n do begin
     
    writeln('*');
    i:=i+1;
    end;
    end.

  11. #11
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 259
    Points : 2 420
    Points
    2 420
    Par défaut
    Ton pb, si tu regardes ce que tu as écrit, c'est que tu n'as que la première ligne & la première colonne.

    Pas de pb pour faire la deuxième ligne.
    Reste la deuxième colonne.
    Là, tu as deux solutions :
    • tu crées une ligne (varible de type chaîne) du style '* *" qu'il te suffit de répéter autant de fois que nécessaire (dans ta deuxième boucle, à la place des writeln('*'), ce sera parfait).
    • Ou bien tu utilises les fonctions de console (en particulier : gotoxy(ligne, colonne)), ce qui, accessoirement, devrait te permettre de créer ton carré en deux boucles while imbriquées.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    eu je comprend pas se que tu me dit , moi mon idée est de faire u boucle dans une boucle.
    mais l'ideal saerai de pouvoir mettre une commande qui dirai mettre une etoile en premier puis ensuite un nombre d 'espace a definir puis une etoile a la fin , mais je vois pas comment faire

  13. #13
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 259
    Points : 2 420
    Points
    2 420
    Par défaut
    Oui, c'est à peu près ce que je t'ai proposé.
    Sauf que, pour alléger le programme, je suggérais de créer d'abord une variable de type chaîne de caractères qui serait composée de l'étoile de la première colonne, du nombre d'espaces voulu (il te faut évidemment une boucle pour les insérer) & de l'étoile de la deuxième colonne.
    Note que colonne = "barre verticale du carré"

    Ensuite, tu boucles autant de fois que nécessaire pour inclure chaque ligne ainsi composée. Et ça évite les boucles imbriquées.

    Si tu veux faire tout ça caractère par caractère, il te faudra effectivement des boucles imbriquées (trois niveaux, a priori).

    Un conseil, réfléchis à ce que tu dois faire, puis code une des boucles (la plus externe ou la plus interne, peu importe), puis la suivante... jusqu'à la fin.

    Je rappelle que la réflexion préalable est la base de la programmation. Un programmeur incapable d'analyser son pb n'est pas un programmeur, mais un infâme bidouilleur. Il finira peut-être par obtenir ce qu'il veut, mais au prix de trop nombreux essais erratiques, d'un code illisible & rigide (on ne peut plus rien modifier sans risquer de détruire le fragile équilibre de la chose), voire d'un grand nombre de bugs.

    NB : boucles interne & externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while condition1
    begin (** début de boucle externe **)
        while condition2
        begin
            while condition3
            begin (** début de boucle interne **)
            end; (** fin de boucle interne **)
        end;
    end; (** fin de boucle externe **)
    Bon courage

  14. #14
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    bonjour ,
    juste une chose
    il y a une petite erreur dans le code mais on la trouve facile
    Citation:
    writeln(car,car:n-1);
    ou se trouve l'erreur sur cette ligne?
    je pense que ALT a raison il faut analyser ton probleme et savoir ce que tu veux exactement
    tu peux faire ton code simplement apres tout depend de toi
    c'est vrai que tu peux aussi utilser gotoxy(x,y) et avec ça tu ecris ce que tu veux en une seule boucle;
    t'as deja eu trop de solution a toi de choisir et de faire ton code.

  15. #15
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 176
    Points
    176
    Par défaut
    bonjour

    n n'étant pas défini... (ce nest pas une erreur de syntaxe)

    c'est vrai que tu peux aussi utilser gotoxy(x,y) et avec ça tu ecris ce que tu veux en une seule boucle;
    t'as deja eu trop de solution a toi de choisir et de faire ton code.
    mais les solutions ne manquent pas !
    sinon avec des GOTOXY voici un essai (à adapter)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    program carre;
        uses crt;
        var i,n:integer;
    begin
        write('largeur d''un côté ? ');
        readln(n);
        clrscr;
        for i:=1 to n do
        begin    
            gotoxy(i,1);write('*'); 
            gotoxy(1,i);write('*'); 
            gotoxy(i,n);write('*'); 
            gotoxy(n,i);write('*'); 
        end;
        readln;
    end.
    bonne continuation !
    et à toi de voir pour adapter avec les While !

  16. #16
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    oui merci pour l'erreur je ne l'avait pas vu,
    c'est juste la variable "n"
    ton code est simple a le "GOTOXY"
    j'en ai fait un pareil

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    Ok, je veux faire comme tu m'as dit, Alt, tu as bien cerné le problème. Mais maintenant j'ai 2 soucis : le premier est je ne vois pas comment commencer et le second est que j'ai toujours mon problème pour les espaces.
    J'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    var i,n:integer;
     readln(n);
    i:=0
    while i<n do
     
    begin wrtieln('*')
          i:=i+1; 
        while i<n do
        begin
            while i<n do
            begin write('*')
                  i:=i+1;
            end; 
        end;
    end;
    Quelles corrections sont à faire pour qu'il marche ?

  18. #18
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 259
    Points : 2 420
    Points
    2 420
    Par défaut
    l=longueur d'un côté
    i=compteur de boucles
    che=une ligne extrême (première & dernière)
    chi=une ligne intermédiaire

    Initialisations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    che:=''
    chi:=''
    i:=0
    Définition de la chaîne extrême :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while i<l do che:=che+'*'
    définition de la chaîne inter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chi:='*'
    while i<l-2 do chi:=chi+' '
    chi:=chi+'*'
    ensuite tu boucles sur le nombre de lignes en ajoutant une che au début & à la fin.

    Fastoche, non ?
    Temps de réflexion : une à deux minutes.
    Temps de rédaction : environ trente secondes, mise en page comprise.

    Donc, si tu avais réfléchi un tout petit peu, tu serais arrivé à quelque chose de similaire.
    Et surtout ne viens pas me dire que ça ne fonctionne pas !
    Car, il y a évidemment des adaptations à faire, ne serait-ce que dans la syntaxe.

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 65
    Points : 18
    Points
    18
    Par défaut
    et pour l info je met mon pgrm auca ou , mon souci c qu il affiche un carré plein , donc comment lui faire retirer les caré en trop

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    var i,j,n:integer;
        ligne : string;
        begin
    ligne:='';
    readln(n) ;
    i:=0;
    j:=0;
    if n>0 then 
       begin
       while j<n do 
             begin
             ligne:=ligne+'*';
             j:=j+1;
             end;
       while i<n do
             begin
             writeln(ligne ) ;
             i:=i+1;
             end;
     
       end;
    end.

  20. #20
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Bon alors déjà, on va se calmer. Puis je te conseillerais de relire les règles du forum : http://club.developpez.com/regles, car ici on s'exprime en bon français pour le bien être de la communauté. Ensuite, tu n'es pas ici pour qu'on te ponde quelque chose de tout prêt, n'oublie qu'on t'aide bénévolement et que les gens qui passent du temps pour toi le font avec plaisir, donc pas la peine de s'énerver contre eux, c'est le meilleur moyen pour ne plus recevoir d'aide.

    Ceci étant dit (je ne compte pas les balises code (enfin si maintenant)), ALT t'a déjà donné pas mal d'éléments pour te répondre et avec tout ça, tu devrais être capable de trouver en réfléchissant un peu. N'oublie pas qu'on apprend plus en cherchant par soi-même

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Turbo Pascal] Programme qui affiche le jour à partir d'une date
    Par rafikadel dans le forum Turbo Pascal
    Réponses: 22
    Dernier message: 27/03/2020, 19h33
  2. [DOS] Programme qui affiche l'heure exacte
    Par Dayssam dans le forum Contribuez
    Réponses: 3
    Dernier message: 28/12/2010, 11h37
  3. Réponses: 2
    Dernier message: 13/09/2008, 19h49
  4. Programme qui affiche un carré
    Par jskthebest dans le forum x86 16-bits
    Réponses: 1
    Dernier message: 08/05/2008, 20h21
  5. Réponses: 4
    Dernier message: 13/04/2007, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo