在oracle pl/sql中打印pascal三角形
如何在Oracle中使用Pl/SQL函数打印带“*”的pascal三角形,我希望用最少的代码行编写。有人能帮我吗? 这就是我试过的在oracle pl/sql中打印pascal三角形,oracle,stored-procedures,plsql,oracle11g,oracle10g,Oracle,Stored Procedures,Plsql,Oracle11g,Oracle10g,如何在Oracle中使用Pl/SQL函数打印带“*”的pascal三角形,我希望用最少的代码行编写。有人能帮我吗? 这就是我试过的 begin for i in 1..5 loop dbms_output.put_line(''); for j in 1..i loop dbms_output.put('*'); end loop; end loop; end; 我的答案是两个for循环来打印一个三角形,但我正在尝试使用Lpad和Rpad函数完成一个for循环。这是一个很好的机会,可以展示当一
begin
for i in 1..5 loop
dbms_output.put_line('');
for j in 1..i loop
dbms_output.put('*');
end loop;
end loop;
end;
我的答案是两个for循环来打印一个三角形,但我正在尝试使用Lpad和Rpad函数完成一个for循环。这是一个很好的机会,可以展示当一个人不知道如何继续时,如何以逻辑方式处理问题。没有人在这里为你们做作业,但我们可以给你们一些解决问题的建议,然后在我们看到你们的想法时提供帮助 从期望的最终结果开始,然后反向工作,找出如何获得期望的结果。您希望输出是什么?像这样的4排
*
* *
* * *
* * * *
你注意到一个重复出现的模式吗?循环模式表示需要某种类型的循环。如果用另一个字符替换前导空格,可能会出现另一个重复模式:
XXX*
XX* *
X* * *
* * * *
所以,在另一个循环模式中循环模式。前导空格的数量与行中“*”的数量之间的关系是什么?根据行的不同,可能需要进行一两次计算。这就是我想要透露的全部,因为任务的重点是让你去弄清楚
希望这能为解决一个问题提供一点启示,而不必付出太多。首先,我尝试用三个四个循环绘制pascal三角形,它工作正常。这是答案
Declare
inc number := 4;
BEGIN
FOR Outter IN 1 .. inc LOOP
FOR Inner IN 1 .. inc - Outter LOOP
dbms_output.put(' ');
END LOOP;
FOR Inner IN 1 .. Outter LOOP
dbms_output.put('*');
END LOOP;
dbms_output.put_line(' ');
END LOOP;
END;
这是PL/SQL中的一个匿名块,我也有一个四循环的答案,正如我所期望的那样,它正确地打印了pascal三角形
DECLARE
row_num_ NUMBER := 5;
BEGIN
FOR i IN 0..row_num_ LOOP
DBMS_OUTPUT.PUT_LINE(' ' || LPAD(' ', row_num_ - i, ' ') || RPAD('*', 2 * i - 1, '*'));
END LOOP;
END;
感谢朋友们的大力支持
declare v_str varchar2(10) := '*'
begin
for i in 1..5 loop
v_str:= rpad(v_str, i, '*');
dbms_output.put_line(v_str);
end loop;
end;
如何使用程序获得金字塔形状? 以下代码可以实现这一点:
declare
s2 varchar2(38);
s3 varchar2(38);
m number(10):=6;
l number(10);
s1 varchar2(38);
a varchar2(38);
b varchar2(38);
begin
l:=((m*2)/2)+1;
for r in 0..m
loop
s2:=trim(both ' ' from s3)||' '||r;
a:=lpad(s2,l+r+1,'*')||' '||'';
b:=rpad(a,(m*2)+r+1,'*');
s1:=b;
dbms_output.put_line(s1);
s3:=trim(both '*' from s1);
end loop;
end;
/
然后我们将得到以下结果:
****** 0 ****
******0 1 ****
*****0 1 2 ****
****0 1 2 3 ****
***0 1 2 3 4 ****
**0 1 2 3 4 5 ****
*0 1 2 3 4 5 6 ****
还有,在后面的新闻中,如何用8051Assember编写一个记帐包,一个用面向对象COBOL编写的操作系统,以及几乎所有用Pascal编写的程序包:-非常欢迎您使用。但如果这样做,你肯定应该展示你迄今为止所做的努力。这不仅会证明你在这里不是希望我们做你的工作。但这也有助于确定你的实际水平,以及你可能遇到的真正困难;否则,你可能无法理解或从任务中学习。当然,很容易找到我以前的答案,但请先自己试试!好的,谢谢Gary演示pascal三角形,事实上我希望打印的像第一个一样,但它必须是奇数,比如1,3,5,7。我期待着Lpad和Rpad PL/SQL函数中的解决方案……好的,谢谢Alex,我喜欢这里的答案。还有……这和我的答案是一样的!我链接到的*8-在给出答案时,最好解释一下为什么你的答案是唯一的答案。
declare
s2 varchar2(38);
s3 varchar2(38);
m number(10):=6;
l number(10);
s1 varchar2(38);
a varchar2(38);
b varchar2(38);
begin
l:=((m*2)/2)+1;
for r in 0..m
loop
s2:=trim(both ' ' from s3)||' '||r;
a:=lpad(s2,l+r+1,'*')||' '||'';
b:=rpad(a,(m*2)+r+1,'*');
s1:=b;
dbms_output.put_line(s1);
s3:=trim(both '*' from s1);
end loop;
end;
/
****** 0 ****
******0 1 ****
*****0 1 2 ****
****0 1 2 3 ****
***0 1 2 3 4 ****
**0 1 2 3 4 5 ****
*0 1 2 3 4 5 6 ****