Swift: File séquentielle -7-

Insertion dans un file
Insertion par valeur d’un élément dans une file

L’élément après lequel on veut effectuer l’insertion est connu par sa valeur. Le programme suivant, conforme au schéma d’algorithme Insertion, retourne la nouvelle collection.

func InsererApres(file: File_Entier
                 ,valeur: Entier
                 ,valeurAinserer: Entier) -> File_Entier {
   var trouve = false
   var nouvelleCollection: File_Entier = InitialiserCollection()
 
   Premier(file)
   Premier(nouvelleCollection)
   while (!trouve) && (!Dernier(file)) {
      nouvelleCollection = Ranger(nouvelleCollection, element: Prendre(file))
      trouve = Egal(valeur,element: Prendre(file))
      Avancer(file)
   }
   if trouve {
      nouvelleCollection = Ranger(nouvelleCollection, element: valeurAinserer)
      while !Dernier(file) {
         nouvelleCollection = Ranger(nouvelleCollection, element: Prendre(file))
         Avancer(file)
      }
   }
   return nouvelleCollection
}

Une version un peu différente, version pure Swift, est une Fonction booléenne qui passe en argument inout la nouvelle collection si l’insertion est possible.

func InsererApres   (file: [Int]
                    ,valeur: Int
                    ,valeurAinserer: Int
                    ,inout file1: [Int]) -> Bool {
    var element : Int = 0
    var trouve = false
    var index = 0
    let nombreElement = file.count
    var nouvelleCollection = [Int]()
    
    while (!trouve) && (index < nombreElement) {
        element = file[index]
        nouvelleCollection.append(element)
        trouve = (valeur == element)
        index += 1
    }
    if trouve {
        nouvelleCollection.append(valeurAinserer)
        while index < nombreElement {
            element = file[index]
            nouvelleCollection.append(element)
            index += 1
        }
        file1 = nouvelleCollection
    }
    return trouve
}
Insertion par position d’un élément dans une file

Ce programme permet d’insérer un nouvelle élément dans une file après une position donnée. Comme dans les programmes précédents, une nouvelle file est créée si la position donnée existe.

func InsererPosition(file: File_Entier
                    ,valeur: Entier
                    ,position: Entier) -> File_Entier {
   var index : Entier = 1
   var nouvelleCollection = CreationFile([Entier]())
 
   Premier(file)
   Premier(nouvelleCollection)
   while (Infer(index,element: position)) && (!Dernier(file)) {
      index = PlusUn(index)
      nouvelleCollection = Ranger(nouvelleCollection, element: Prendre(file))
      Avancer(file)
   }
   if Egal(index,element: position) {
      nouvelleCollection = Ranger(nouvelleCollection, element: valeur)
      while !Dernier(file) {
         nouvelleCollection = Ranger(nouvelleCollection, element: Prendre(file))
         Avancer(file)
      }
   }
   return nouvelleCollection
}