Haskell程式列印半菱形星號圖案


我們可以使用遞迴和複製函式在Haskell中建立一個半菱形星號圖案。半菱形星號圖案是由星號(*)排列成半菱形形狀的圖案。它通常透過以金字塔形狀列印一系列星號來建立,從第一行的一個星號開始,第二行兩個星號,依此類推,直到中間行包含最大數量的星號。從那一行開始,星號的數量減少,直到最後一行只有一個星號。

演算法

  • 步驟1 - 使用replicate/遞迴函式定義printRow函式

  • 步驟2 - 程式執行將從main函式開始。main()函式控制整個程式。它寫成main = do。在main函式中,傳遞一個數字,以此數字為上限列印半菱形星號圖案。

  • 步驟3 - 初始化名為“n”的變數。它將儲存要列印半菱形星號圖案的上限整數。

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

示例1

在這個例子中,printRow是一個遞迴函式,它接受兩個引數n和i,分別表示圖案的大小和當前行。如果i等於0,它返回一個換行符。如果i小於等於n div 2,它返回一個字串,該字串包含等於n div 2 - i的空格,後跟一個星號,後跟一個換行符,然後遞迴呼叫printRow,其中i - 1作為更新的行號。否則,它返回一個字串,該字串包含等於i - n div 2的空格,後跟一個星號,後跟一個換行符,然後遞迴呼叫printRow,其中i - 1作為更新的行號。

module Main where

printRow :: Int -> Int -> String
printRow n i
   | i == 0    = "
" | i <= n `div` 2 = " " ++ replicate (n `div` 2 - i) ' ' ++ "*" ++ "
" ++ printRow n (i - 1) | otherwise = " " ++ replicate (i - n `div` 2) ' ' ++ "*" ++ "
" ++ printRow n (i - 1) printPattern :: Int -> String printPattern n = printRow n (n - 1) main :: IO () main = putStr (printPattern 8)

輸出

   *
  *
 *
*
 *
  *
   *

示例2

在這個例子中,printRow函式接受兩個引數n和i,分別表示圖案的大小和當前行。它返回一個字串,該字串包含等於n div2 - abs (ndiv 2 - i)的空格,後跟一個星號和一個換行符。

printPattern函式接受一個整數n作為引數,並返回一個字串,該字串透過連線printRow在範圍[0..n - 1]中每一行的結果建立。

module Main where

printRow :: Int -> Int -> String
printRow n i = replicate (n `div` 2 - abs (n `div` 2 - i)) ' ' ++ "*
" printPattern :: Int -> String printPattern n = concat [ printRow n i | i <- [0..n - 1]] main :: IO () main = putStr (printPattern 8)

輸出

*
 *
  *
   *
    *
   *
  *
 *

結論

在Haskell中,要列印半菱形星號圖案,我們可以使用replicate、div和遞迴函式。

更新於:2023年4月6日

113 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.