Промяна на предишните отговори, за да ви даде действително триъгълника на Паскал, който споменахте, че опитвате в коментар:
set serveroutput on format wrappeddeclare n number(2):=5;begin for a in 1..n loop for b in 1..n-a loop dbms_output.put(' '); крайна линия; за c в 1..2*a-1 цикъл dbms_output.put('*'); крайна линия; dbms_output.new_line; end loop;end;/ * *** ***** ****************PL/SQL процедурата е завършена успешно.
И двете ви dbms_output.put_line
извикванията трябваше да бъдат само dbms_output.put
, тъй като това отпечатваше всеки *
на собствена линия. Но имате нужда от нов ред след всеки път около a
цикъл, така че добавих dbms_output.newline
в края на това. Вие също намалявахте temp
вътре в b
цикъл, което означаваше, че е нула вместо (n-1)
за втори път около a
цикъл; но всъщност не се нуждаете от отделен temp
променлива изобщо, тъй като това винаги е същото като (n-a)+1
и +1
просто поставя допълнителен интервал на всеки ред. (Направих и a
цикъл 1..n
тъй като предполагам, че искате да промените стойността на n
по-късно само на едно място). С n :=8
:
От решаващо значение обаче трябва да настроите изхода на сървъра във формат обвит
, в противен случай водещите интервали, които генерирате в b
цикъл се отхвърлят.
Можете също да направите това в обикновен SQL, въпреки че трябва да предоставите 5
два пъти или използвайте свързваща или заместваща променлива:
изберете lpad(' ', 5 - ниво, ' ') || rpad('*', (ниво * 2) - 1, '*') като pascalfrom dualconnect от ниво <=5PASCAL------------------------------ ------ * *** ***** ****************
Вашият b
и c
циклите просто правят ръчно lpad
наистина.