वास्तव में आपको पास्कल का त्रिकोण देने के लिए पिछले उत्तरों को संशोधित करना, जिसका आपने उल्लेख किया था कि आप एक टिप्पणी में प्रयास कर रहे थे:
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
. के आसपास फंदा; लेकिन आपको वास्तव में एक अलग temp
. की आवश्यकता नहीं है वेरिएबल बिल्कुल भी जैसा कि हमेशा (n-a)+1
. जैसा ही होता है और +1
बस हर लाइन पर एक अतिरिक्त जगह डालता है। (मैंने a
. भी बनाया है लूप 1..n
जैसा कि मुझे लगता है कि आप n
. का मान बदलना चाहते हैं बाद में केवल एक ही स्थान पर)। n := 8
. के साथ :
*
***
*****
*******
*********
***********
*************
***************
महत्वपूर्ण रूप से हालांकि आपको set serveroutput on format wrapped
, अन्यथा प्रमुख स्थान जो आप b
. में उत्पन्न कर रहे हैं लूप को छोड़ दिया जाता है।
आप इसे सादे SQL में भी कर सकते हैं, हालांकि आपको 5
. की आपूर्ति करने की आवश्यकता है दो बार, या बाइंड या प्रतिस्थापन चर का उपयोग करें:
select lpad(' ', 5 - level, ' ') || rpad('*', (level * 2) - 1, '*') as pascal
from dual
connect by level <= 5
PASCAL
------------------------------
*
***
*****
*******
*********
आपका b
और c
लूप सिर्फ एक मैनुअल lpad
कर रहे हैं सच में।