/** * Beispiel aus * * - Algorithmen und Datenstrukturen für Dummies * - von Andreas Gogol-Döring und Thomas Letschert * - Verlag Wiley-VCH; Oktober 2019 * - Kapitel 3, Daten und ihre Struktur * * @author A. Gogol-Döring, Th. Letschert */ import Foundation struct AuD_03_02_FArray { static func FArray1(n: Int) -> [Int] { var a: [Int] = Array(repeating: 0, count: n+1) a[0] = 1 for i in 1 ... n { a[i] = a[i - 1] * i } return a } static func FArray2a(n: Int) -> [(Int, Int)] { var a: [(Int, Int)] = Array(repeating: (0, 0), count: n+1) a[0] = (0, 1) for i in 1 ... n { a[i] = (i, a[i-1].1 * i) } return a } static func FArray2(n: Int) -> [(Int, Int)] { var a: [(Int, Int)] = Array(repeating: (0, 0), count: n+1) a[0] = (0, 1) for i in 1 ... n { switch a[i-1] { case (_, let x) : a[i] = (i, x * i) } } return a } struct Record { var v: Int var f: Int } static func FArray3(n: Int) -> [Record] { var a: [Record] = Array(repeating: Record(v: 0, f: 0), count: n+1) a[0] = Record(v: 0, f: 1) for i in 1 ... n { a[i] = Record(v: i, f: a[i-1].f * i) } return a } static func FArray3a(n: Int) -> [Record] { var a: [Record] = Array(repeating: Record(v: 0, f: 0), count: n+1) a[0] = Record(v: 0, f: 1) for i in 1 ... n { switch (a[i - 1].v, a[i - 1].f) { case (let vv, var ff): a[i] = Record(v: i, f: i * ff) } } return a } static func run () { print(FArray1(n: 10).map( { v in v.description } ).joined(separator: ",")) print(FArray2(n: 10) .map( { (v: (Int, Int)) in "[\(v.0.description), \(v.1.description)]" } ) .joined(separator: ",") ) print(FArray2a(n: 10) .map( { (v: (Int, Int)) in "[\(v.0.description), \(v.1.description)]" } ) .joined(separator: ",") ) print(FArray3(n: 10) .map( { (v: Record) in "[\(v.v.description), \(v.f.description)]" } ) .joined(separator: ",") ) print(FArray3(n: 10) .map( { (v: Record) in "[\(v.v.description), \(v.f.description)]" } ) .joined(separator: ",") ) } }