Swift: File séquentielle -4-

Copie & Concaténation

Les deux algorithmes présentés dans cet article prennent des éléments sur une ou plusieurs files pour modifier ou construire une ou plusieurs autres files. Tous ces algorithmes sont construits à partir du shéma de programme de parcours dans une file séquentielle.

Création par copie d’une file séquentielle

Ce problème consiste à créer, à partir d’une file dite « directrice » une autre file identique. L’algorithme est dirigé par une énumération de la file directrice au cours duquel on construit la nouvelle file en prenant chaque élément pour les ranger dans la nouvelle file

func CreationCopie (file: File_Entier) -> File_Entier {    
    let file = [Entier]()
    var file2 = CreationFile([Entier]())
    Premier(file)
    while (!Dernier(file)) {
        collection2 = Ranger(file2, element: Prendre(file))
        Avancer(file)
    }
    return file2
}
Création par copie d’une file séquentielle avec incrément

Ce problème consiste à créer, à partir d’une file dite « directrice » une autre file dont chaque élément est incrémenté d’une valeur choisie. On verra dans la suite de l’étude de Swift que cette problématique est solutionnée de façon très simple à l’aide de la fonction intégrée dans Swift « map »

func CreationCopieAvecIncrement(file: File_Entier
                               ,increment: Entier) -> File_Entier {
    var file2 = CreationFile([Entier]())
    Premier(file)
    while (!Dernier(file)) {
        file2 = Ranger(file2, element: Prendre(file) + increment)
        Avancer(file)
    }
    return file2
}
Concaténation de deux files

On veut construire une file à partir des éléments de 2 files. Une première file directrice copie range tous ses éléments dans la nouvelle file, puis la seconde file devient directrice et range tous ses éléments à la suite de la file nouvellement créée.

func Concatenation (file1: File_Entier, file2: File_Entier) -> File_Entier {
   
    var file = CreationFile([Entier]())
    Premier(collection1)
    while !Dernier(collection1) {
        file = Ranger(file, element: Prendre(file1))
        Avancer(file1)
    }
    Premier(collection2)
    while !Dernier(file2) {
        file = Ranger(file, element: Prendre(file2)
        Avancer(file2)
    }
    return file
}