De vorige antwoorden aanpassen om je de driehoek van Pascal te geven, waarvan je in een opmerking zei dat je het probeerde:
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.
Zowel uw dbms_output.put_line
oproepen moesten gewoon dbms_output.put
. zijn , want dat was het afdrukken van elke *
op zijn eigen lijn. Maar je hebt wel een regeleinde nodig na elke keer rond de a
loop, dus ik heb een dbms_output.newline
. toegevoegd aan het einde daarvan. Je verlaagde ook temp
binnen de b
lus, wat betekende dat het nul was in plaats van (n-1)
voor de tweede keer rond de a
lus; maar je hebt niet echt een aparte temp
nodig variabele, want dat is altijd hetzelfde als (n-a)+1
en de +1
zet gewoon een extra spatie op elke regel. (Ik heb ook de a
. gemaakt loop 1..n
aangezien ik aanneem dat je de waarde van n
. wilt wijzigen later op slechts één plaats). Met n := 8
:
*
***
*****
*******
*********
***********
*************
***************
Cruciaal is echter dat je ook set serveroutput on format wrapped
, anders de voorloopspaties die u genereert in de b
loop worden verwijderd.
U kunt dit ook in gewone SQL doen, hoewel u de 5
. moet opgeven twee keer, of gebruik een bind- of vervangingsvariabele:
select lpad(' ', 5 - level, ' ') || rpad('*', (level * 2) - 1, '*') as pascal
from dual
connect by level <= 5
PASCAL
------------------------------
*
***
*****
*******
*********
Uw b
en c
loops doen gewoon een handmatige lpad
echt.