un peu d'affichage!!

Page 1 sur 2 1, 2  Suivante

Voir le sujet précédent Voir le sujet suivant Aller en bas

un peu d'affichage!!

Message par wico le Ven 9 Nov - 23:09

Ecrire un programme en Pascal qui parmet d'afficher à l'ecran ce figure: exemple pour n=5 on obtien la forme suivante
http://www.servimg.com/image_preview.php?i=1&u=11696810



a+

wico
Nouveau membre
Nouveau membre

Messages : 12
Inscrit le : 09 Nov 2007
Localisation : la terre

Feuille de personnage
Capacité linguistique:
997/1000  (997/1000)

Revenir en haut Aller en bas

Re: un peu d'affichage!!

Message par nabiL le Sam 10 Nov - 2:05

wico a écrit:Ecrire un programme en Pascal qui parmet d'afficher à l'ecran ce figure: exemple pour n=5 on obtien la forme suivante
http://www.servimg.com/image_preview.php?i=1&u=11696810

a+


Très bon exercice qui fait comprendre le fonctionnement des boucles FOR
(les structures itératives). Je te donnerai une indication demain matin.
N'oublie pas de dire Bonjour, Salut tout le monde, Bonsoir, ... Smile Surprised
Nabil - tunis
خير الناس أنفعهم للناس

nabiL
Admin
Admin

Sexe:Masculin
Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: un peu d'affichage!!

Message par nabiL le Sam 10 Nov - 13:28

Salut wico:
Une 1ère version de la solution, que je considère naïve et non très optimisée est la suivante:

Code:
uses wincrt;
var
  i,j,N: integer;

begin

  write('N = ');
  readln(N);

  for i:=1 to N-1 do
  begin
      for j:=1 to N+i do
          if (j>N) then write(' * ') else write('  ');
      writeln;
  end;

  for i:=1 to 2*N do
      write(' * ');
  writeln;

  for i:=1 to N-1 do
  begin
      for j:=1 to 2*N do
          if ((j>i) and (j<=N))  then write(' * ') else write('  ');
      writeln;
  end;

end.


Des commentaires?
Nabil - tunis
خير الناس أنفعهم للناس

nabiL
Admin
Admin

Sexe:Masculin
Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: un peu d'affichage!!

Message par nabiL le Sam 10 Nov - 13:30

Normalement, on peut résoudre tout le problème en deux boucles FOR. Elle devrait être un peu compliquée. Si je trouve le temps, je m'amuserai de te trouver une solution avec uniquement 2 boucles FOR.
Nabil - tunis
خير الناس أنفعهم للناس

nabiL
Admin
Admin

Sexe:Masculin
Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: un peu d'affichage!!

Message par nabiL le Dim 11 Nov - 17:30

Une version plus optimisée (au niveau code source) est prête. Commente d'abord ce que je t'ai proposé.
Nabil - tunis
خير الناس أنفعهم للناس

nabiL
Admin
Admin

Sexe:Masculin
Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: un peu d'affichage!!

Message par manianis le Dim 11 Nov - 22:19

Bon programme Nabil.

manianis
Admin
Admin

Sexe:Masculin
Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: un peu d'affichage!!

Message par nabiL le Dim 11 Nov - 22:28

Merci manianis, wico a posé le problème et nous a quitté confused Wink

voilà une deuxième version plus optimisée:

Code:

uses wincrt;
var
  i,j,N: integer;
  condition: boolean;

begin

  write('N = ');
  readln(N);

  for i:=1 to 2*N-1 do
  begin
        write(i,' : ');
        for j:=1 to 2*N do
        begin
          condition := (i<=N) and (j>N) and (j<=N+i) OR
                        (i>=N) and (j> (i mod N)) and (j<=N);
              if (condition) then
                write(' * ')
              else
                write('  ');
        end;
        writeln;
  end;

end.



Any comments?
Nabil - tunis
خير الناس أنفعهم للناس

nabiL
Admin
Admin

Sexe:Masculin
Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: un peu d'affichage!!

Message par manianis le Dim 11 Nov - 22:39

Je ferais comme même un petit essai :
Code:

program losange;
var i, j, a, n : integer;
begin
    Writeln('Entrer n : '); Readln(n);
   
    a := 0;
    for j:=1 to 2*n-1 do begin
        if (a > n) then a := 0 else a := a + 1;
        for i:=1 to n + a do begin
            if
                (j < n) and (i > n) or
                (j = n) or
                (j > n) and (i > j mod n)
                then Write('*') else Write(' ');
        end;
        Writeln;
    end;
   
    Readln;
end.


Dernière édition par le Dim 11 Nov - 23:05, édité 1 fois

manianis
Admin
Admin

Sexe:Masculin
Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: un peu d'affichage!!

Message par nabiL le Dim 11 Nov - 22:55

Il fonctionne bien ton programme.
Si t'a du temps libre, on peut discuter lequel des programmes est le moins complexe entre terme de Comparaison.

OK?
Nabil - tunis
خير الناس أنفعهم للناس

nabiL
Admin
Admin

Sexe:Masculin
Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: un peu d'affichage!!

Message par manianis le Dim 11 Nov - 22:59

Comme tu veux. Je suis d'accord.

manianis
Admin
Admin

Sexe:Masculin
Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: un peu d'affichage!!

Message par nabiL le Dim 11 Nov - 23:02

Je commence par le 2ème code source...

Le nombre de comparaison qu'il fait c'est exactement

2N x (2N - 1) comparaison (if ... then ...)

Qu'est-ce que tu en penses?

à toi mnt manianis...

Nabil - tunis
خير الناس أنفعهم للناس

nabiL
Admin
Admin

Sexe:Masculin
Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: un peu d'affichage!!

Message par manianis le Dim 11 Nov - 23:06

J'ai fait une petite rectification ci-dessus pour minimiser le nombre d'itérations

manianis
Admin
Admin

Sexe:Masculin
Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: un peu d'affichage!!

Message par nabiL le Dim 11 Nov - 23:13

manianis a écrit:J'ai fait une petite rectification ci-dessus pour minimiser le nombre d'itérations


J'ai remarqué...

Lorsque tu trouves du temps, évalue le nombre de comparaisons de ton code source manianis.
Nabil - tunis
خير الناس أنفعهم للناس

nabiL
Admin
Admin

Sexe:Masculin
Messages : 1906
Inscrit le : 19 Mar 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: un peu d'affichage!!

Message par manianis le Dim 11 Nov - 23:14

pour n = 5 :it = 69
pour n=6 : it = 100
pour n=7 : it = 137
pour n=100 : it= 29804
pour n=1000 : it= 2998004 (9 secondes sur P4 3GHz)

pour n=10000 : it = 299980004

formule : it = (3*N-2)*N+4


Dernière édition par le Dim 11 Nov - 23:34, édité 3 fois

manianis
Admin
Admin

Sexe:Masculin
Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Re: un peu d'affichage!!

Message par manianis le Dim 11 Nov - 23:18

Votre programme en fait :
pour n=5 : 90
pour n=6 : 132
pour n=7 : 182
...
pour n=100 : 39800
pour n=1000 : it = 3998000 (en 14 secondes)

pour n=10000 : it = 399980000

formule : it = (4n-2)*n


Dernière édition par le Dim 11 Nov - 23:35, édité 2 fois

manianis
Admin
Admin

Sexe:Masculin
Messages : 976
Inscrit le : 10 Oct 2007
Localisation : Tunisie

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

Revenir en haut Aller en bas

Page 1 sur 2 1, 2  Suivante

Voir le sujet précédent Voir le sujet suivant Revenir en haut


Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum