Haskell程式列印金字塔星形圖案


在Haskell中,我們可以使用mapM和ForM函式來列印金字塔形狀的星形圖案。金字塔星形圖案是星形或其他符號以金字塔形狀排列的設計或佈局。它是透過列印多行星形或符號來建立的,從頂部開始向下移動。每一行比前一行多一個符號,從而產生三角形的視覺效果。該圖案通常是對稱的,每行中的星形或符號數量等於行號,並且每行的中間垂直對齊。

演算法

  • 步驟1 − 使用mapM_函式定義金字塔函式

  • 步驟2 − 程式執行將從main函式開始。main()函式控制整個程式。它被寫成main = do。在main函式中,傳遞一個數字,該數字表示要列印金字塔星形圖案的範圍。

  • 步驟3 − 初始化名為“n”的變數。它將儲存要列印金字塔星形圖案的整數範圍。

  • 步驟4 − 函式呼叫後,使用'putStrLn'語句將結果列印到控制檯。

在這個例子中,定義了一個名為pyramid的函式,它接受一個整數n作為引數,並使用mapM_列印buildPyramid函式生成的列表中的每個元素。buildPyramid函式接受n作為引數,並生成一個表示金字塔圖案的字串列表。它使用列表推導式為金字塔的每一行生成一個字串,方法是連線兩個字串。

示例1

在這個例子中,使用mapM_函式定義了pyramid函式來列印金字塔星形圖案。

pyramid :: Int -> IO ()
pyramid n = mapM_ putStrLn $ buildPyramid n
   where
      buildPyramid :: Int -> [String]
      buildPyramid n = [replicate (n-i) ' ' ++ replicate (2*i-1) '*' | i <- [1..n]]

main :: IO ()
main = do
   let n = 5
   pyramid n

輸出

    *
   ***
  *****
 *******
*********

示例2

在這個例子中,定義了一個名為pyramid的函式,它接受一個整數n作為引數,並使用forM_函式迭代範圍[1..n]。傳遞給forM_的函式是一個匿名函式(也稱為lambda函式),它接受一個引數i,並使用putStrLn列印透過連線兩個字串生成的字串。

pyramid :: Int -> IO ()
pyramid n = mapM_ putStrLn $ buildPyramid n
   where
      buildPyramid :: Int -> [String]
      buildPyramid n = [replicate (n-i) ' ' ++ replicate (2*i-1) '*' | i <- [1..n]]

main :: IO ()
main = do
   let n = 5
   pyramid n

輸出

    *
   ***
  *****
 *******
*********

示例3

在這種方法中,定義了一個名為printTriangle的函式,它接受兩個引數:一個整數n表示行數,一個整數i表示當前行。該函式檢查i是否大於n,如果是,則該函式在不執行任何操作的情況下返回。如果i不大於n,則該函式使用putStrLn函式列印一行i個星號,然後呼叫自身並將i加1。這種遞迴方法持續進行,直到i大於n,此時函式返回。

drawLine :: Int -> Int -> IO ()
drawLine n k = do
   let spaces = replicate (n - k) ' '
   let stars = replicate (2 * k - 1) '*'
   putStrLn (spaces ++ stars)

drawPyramid :: Int -> IO ()
drawPyramid n = mapM_ (drawLine n) [1..n]

main :: IO ()
main = do
   let n = 5
   drawPyramid n

輸出

    *
   ***
  *****
 *******
*********

結論

在Haskell中,要列印金字塔星形圖案,我們可以使用MapM_或forM_函式,或者可以使用遞迴函式。

更新於: 2023年4月20日

161次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.