Modifier les réponses précédentes pour vous donner le triangle de Pascal, que vous avez mentionné avoir tenté dans un commentaire :
set serveroutput on format wrapped
declare
n number(2):=5;
begin
for a in 1..n loop
for b in 1..n-a loop
dbms_output.put(' ');
end loop;
for c in 1..2*a-1 loop
dbms_output.put('*');
end loop;
dbms_output.new_line;
end loop;
end;
/
*
***
*****
*******
*********
PL/SQL procedure successfully completed.
Vos deux dbms_output.put_line
les appels devaient être simplement dbms_output.put
, car cela imprimait chaque *
sur une ligne à part entière. Mais vous avez besoin d'un saut de ligne après chaque fois autour du a
boucle, j'ai donc ajouté un dbms_output.newline
à la fin de ça. Vous décrémentiez également temp
à l'intérieur du b
boucle, ce qui signifiait qu'elle était nulle au lieu de (n-1)
pour la deuxième fois autour du a
boucle; mais vous n'avez pas vraiment besoin d'un temp
séparé variable du tout car c'est toujours la même chose que (n-a)+1
et le +1
met juste un espace supplémentaire sur chaque ligne. (J'ai aussi fait le a
boucle 1..n
car je suppose que vous voulez changer la valeur de n
plus tard à un seul endroit). Avec n := 8
:
*
***
*****
*******
*********
***********
*************
***************
Mais surtout, vous devez également set serveroutput on format wrapped
, sinon les espaces de début que vous générez dans le b
boucle sont ignorées.
Vous pouvez également le faire en SQL brut, bien que vous deviez fournir le 5
deux fois, ou utilisez une variable de liaison ou de substitution :
select lpad(' ', 5 - level, ' ') || rpad('*', (level * 2) - 1, '*') as pascal
from dual
connect by level <= 5
PASCAL
------------------------------
*
***
*****
*******
*********
Votre b
et c
les boucles font juste un lpad
manuel vraiment.