我正在尝试使用f#创建一个N x M乘法表程序,其中n和m值由用户指定,并且该表被计算并存储在2D数组中并显示在控制台上。
任何帮助以使我的数组以类似于以下格式显示的方式将不胜感激:
而不是我程序中的那个
我的源代码是
open System
let func() =
let multiplication n m = Array2D.init n m (fun n m -> n * m)
printf "Enter N Value: "
let nValue = Console.ReadLine() |> System.Int32.Parse
printf "\nEnter M Value: "
let mValue = Console.ReadLine() |> System.Int32.Parse
let grid = multiplication nValue mValue
printfn "\n\n%A" grid
func()
我也想知道如何使我的值从1而不是0开始。
由于我是F#的初学者,因此非常感谢任何帮助。
最佳答案
您要做的就是将n和m加1,然后再将它们相乘,例如
let multiplication n m = Array2D.init n m (fun n m -> (n + 1) * (m + 1))
但是,这里确实有一些括号疯狂,您可以将其重构如下:
let myMultFunction n m = (n + 1) * (m + 1)
let multiplication n m = Array2D.init n m myMultFunction
格式化有点棘手,使用for循环有点作弊,而且不是F#,但是考虑到我们使用的是本质上不起作用的2d数组,我想我可以偷偷摸摸了;)
printfn "A multiplication table:"
printf " "
for col in 0 .. mValue - 1 do
printf "%d\t" (col + 1)
printfn ""
for row in 0 .. nValue - 1 do
for col in 0 .. mValue - 1 do
if col = 0 then
printf "\n%d| " (row + 1)
printf "%d\t" grid.[row, col]