Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在oracle pl/sql中打印pascal三角形_Oracle_Stored Procedures_Plsql_Oracle11g_Oracle10g - Fatal编程技术网

在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循环。这是一个很好的机会,可以展示当一

如何在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循环。

这是一个很好的机会,可以展示当一个人不知道如何继续时,如何以逻辑方式处理问题。没有人在这里为你们做作业,但我们可以给你们一些解决问题的建议,然后在我们看到你们的想法时提供帮助

从期望的最终结果开始,然后反向工作,找出如何获得期望的结果。您希望输出是什么?像这样的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 ****