以前の回答を変更して、コメントで試みたと述べたパスカルの三角形を実際に作成します。
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.
両方のdbms_output.put_line
呼び出しはdbms_output.put
である必要がありました 、各*
を印刷していたので 単独で回線上。ただし、a
の前後で毎回改行する必要があります ループなので、dbms_output.newline
を追加しました その終わりに。 temp
もデクリメントしていました b
内 ループ。これは、(n-1)
ではなくゼロであることを意味します。 a
の周りで2回目 ループ;ただし、個別のtemp
は実際には必要ありません。 変数は常に(n-a)+1
と同じです。 および+1
すべての行に余分なスペースを置くだけです。 (a
も作成しました ループ1..n
n
の値を変更したいと思います 後で1か所のみ)。 n := 8
の場合 :
*
***
*****
*******
*********
***********
*************
***************
重要なのは、set serveroutput on format wrapped
ことも必要です。 、それ以外の場合は、b
で生成している先頭のスペース ループは破棄されます。
5
を指定する必要がありますが、プレーンSQLでもこれを行うことができます。 2回、またはバインド変数または置換変数を使用します:
select lpad(' ', 5 - level, ' ') || rpad('*', (level * 2) - 1, '*') as pascal
from dual
connect by level <= 5
PASCAL
------------------------------
*
***
*****
*******
*********
あなたのb
およびc
ループは手動のlpad
を実行しているだけです 本当に。