Exercice Corrigé Langage Swift – Partie 4

Avec des exercices corrigés en langage Swift, vous pratiquerez divers concepts du langage Swift. Vous commencerez par des exercices du langage Swift de base à des exercices plus avancés. La solution est fournie pour chaque exercice. Vous devez essayer de résoudre chaque problème par vous-même avant de vérifier la solution. Si vous avez des questions concernant chaque problème, nous vous encourageons à les poster sur notre forum.
 
 
Utiliser l’éditeur Swift pour résoudre les exercices : (Cliquez sur l’onglet input si vous souhaitez entrer des valeurs, cliquez sur Run pour exécuter votre programme, le résultat sera affichée sur l’onglet output).
 

Exercice 1:

Créez une fonction qui prend une chaîne et renvoie le nombre de voyelles qu’elle contient.
 
Exemple:

countVoyel("WayToLearnX") ➞ 4

countVoyel("Paris") ➞ 2

countVoyel("Jack") ➞ 1
Solution:

import Foundation

// Déclare une fonction appelée "countVoyel"
// qui reçoit une chaîne de caractères "str".
// La fonction retourne un entier représentant
// le nombre de voyelles présentes dans la chaîne.
func countVoyel(_ str: String) -> Int {
    
    // Convertit la chaîne de caractères en une collection
    // de valeurs Unicode.
    return str
        .unicodeScalars
        
        // Filtre les caractères pour conserver uniquement
        // ceux qui appartiennent à l'ensemble "aeiou".
        .filter(CharacterSet(charactersIn: "aeiou").contains)
        
        // Compte le nombre de voyelles trouvées.
        .count
}
 

Exercice 2:

Créez une fonction pour calculer le déterminant d’une matrice 2 x 2.

[[a, b], 
 [c, d]]

Le déterminant de la matrice ci-dessus est: ad – bc:

Exemple:

det([
  [1, 1],
  [2, 3]
]) ➞ 1

det([
  [6, 4],
  [2, 3]
]) ➞ 10

det([
  [2, 4],
  [4, 2]
]) ➞ -12
Solution:

// Déclare une fonction appelée "det"
// qui reçoit une matrice d'entiers "matrix".
// La fonction retourne un entier représentant le déterminant.
func det(_ matrix: [[Int]]) -> Int {
    
    // Récupère l'élément situé à la première ligne
    // et à la première colonne.
    let a = matrix[0][0]
    
    // Récupère l'élément situé à la première ligne
    // et à la deuxième colonne.
    let b = matrix[0][1]
    
    // Récupère l'élément situé à la deuxième ligne
    // et à la première colonne.
    let c = matrix[1][0]
    
    // Récupère l'élément situé à la deuxième ligne
    // et à la deuxième colonne.
    let d = matrix[1][1]
    
    // Calcule le déterminant d'une matrice 2 × 2
    // avec la formule :
    // det = (a × d) - (b × c)
    return a * d - b * c
}
 

Exercice 3:

Créez une fonction qui prend un tableau de nombres et renvoie un nouveau tableau, trié par ordre croissant (du plus petit au plus grand).
 
Exemple:

sort([6, 8, 1, 3, 7]) ➞ [1, 3, 6, 7, 8]

sort([-1, 9, 3, -9, -8, 8]) ➞ [-9, -8, -1, 3, 8, 9]

sort([]) ➞ []
Solution:

// Déclare une fonction appelée "sort"
// qui reçoit un tableau d'entiers optionnel.
// Le paramètre peut donc contenir un tableau ou être nil.
// La fonction retourne toujours un tableau d'entiers.
func sort(_ tab: [Int]?) -> [Int] {
    
    // Vérifie si "tab" contient un tableau.
    // Si le tableau existe, "sorted()" le trie dans l'ordre 
    // croissant.
    // Si "tab" vaut nil, "?? []" retourne un tableau vide.
    return tab?.sorted() ?? []
}
 
 

Exercice 4:

Créez une fonction qui prend deux chaînes et renvoie TRUE si la première chaîne se termine par la deuxième chaîne, sinon retournez FALSE.
 
Exemple:

checkEnd("WayToLearnX", "X") ➞ true

checkEnd("Alex", "ox") ➞ false

checkEnd("Hello", "lo") ➞ true
Solution:

// Déclare une fonction appelée "checkEnd"
// qui reçoit deux chaînes de caractères "str1" et "str2".
// La fonction retourne une valeur booléenne.
func checkEnd(_ str1: String, _ str2: String) -> Bool {
    
    // Vérifie si "str1" se termine par "str2".
    // Retourne true si "str2" est présente à la fin de "str1",
    // sinon retourne false.
    return str1.hasSuffix(str2)
}
 

Exercice 5:

Un palindrome est un mot qui s’écrit de la même manière après l’inversion de ce dernier. ‘ada’ est un palindrome. Écrivez une méthode qui vérifie si une chaîne est un palindrome.

Exemple:

isPalindrome("NON") ➞ true

isPalindrome("TOTO") ➞ false

isPalindrome("SOS") ➞ true

isPalindrome("SELLES") ➞ true
Solution:

// Déclare une fonction appelée "isPalindrome"
// qui reçoit une chaîne de caractères "str".
// La fonction retourne une valeur booléenne : true ou false.
func isPalindrome(_ str: String) -> Bool {
    
    // Inverse l'ordre des caractères de la chaîne avec "reversed()".
    // Convertit ensuite le résultat en String.
    // Compare la chaîne inversée avec la chaîne originale.
    // Retourne true si elles sont identiques,
    // sinon retourne false.
    return String(str.reversed()) == str
}
 

Exercice 6:

Créez une fonction qui prend deux chaînes comme arguments et renvoie le nombre de fois où la première chaîne (le caractère unique) est trouvée dans la deuxième chaîne.
 
Exemple:

count("l", "Hello") ➞ 2

count("e", "Welcome to WayToLearnX") ➞ 3

count("X", "WayToLearnX") ➞ 1
Solution:

// Déclare une fonction appelée "count"
// qui reçoit un caractère sous forme de chaîne "c"
// et une chaîne de caractères "str".
// La fonction retourne un entier.
func count(_ c: String, _ str: String) -> Int {
    
    // Parcourt tous les caractères de la chaîne "str".
    // "$0" représente le caractère courant.
    // Convertit le caractère en String puis le compare avec "c".
    // "filter" conserve uniquement les caractères correspondants.
    // "count" retourne le nombre de caractères trouvés.
    return str.filter { String($0) == c }.count
}
 
 

Exercice 7:

Créez une fonction qui ne renvoie que des chaînes avec des caractères uniques.
 
Exemple:

uniqueChar(["xxy", "xyy", "xyz", "yzz", "yyz"]) ➞ ["xyz"]

uniqueChar(["111", "222", "333", "123"]) ➞ ["123"]

uniqueChar(["abb", "bba", "aaa", "bbb"]) ➞ []
Solution:

// Déclare une fonction appelée "uniqueChar"
// qui reçoit un tableau de chaînes de caractères "arr".
// La fonction retourne un tableau de chaînes de caractères.
func uniqueChar(_ arr: [String]) -> [String] {
    
    // Crée un tableau vide qui contiendra
    // les mots dont tous les caractères sont uniques.
    var res = [String]()
    
    // Crée un ensemble vide de caractères.
    // Un Set ne peut pas contenir deux fois le même élément.
    var s = Set<Character>()
    
    // Parcourt chaque mot du tableau.
    for words in arr {
        
        // Parcourt chaque caractère du mot.
        for char in words {
            
            // Ajoute le caractère dans l'ensemble.
            // Si le caractère existe déjà, il ne sera pas ajouté 
            // une deuxième fois.
            s.insert(char)
        }
        
        // Compare le nombre de caractères uniques
        // avec le nombre total de caractères du mot.
        // S'ils sont égaux, tous les caractères sont uniques.
        if s.count == words.count {
            
            // Ajoute le mot au tableau des résultats.
            res.append(words)
        }
        
        // Réinitialise l'ensemble pour analyser le prochain mot.
        s = []
    }
    
    // Retourne le tableau contenant les mots
    // dont les caractères sont tous uniques.
    return res
}
 

Exercice 8:

Créez une fonction qui prend un tableau de nombres compris entre 1 et 10 et renvoie le nombre manquant.
 
Exemple:

NbrNotExist([1, 2, 4, 5, 6, 7, 8, 9, 10]) ➞ 3

NbrNotExist([7, 9, 1, 2, 3, 4, 5, 6, 8]) ➞ 10

NbrNotExist([5, 9, 3, 1, 4, 7, 2, 6, 10]) ➞ 8
Solution:

// Déclare une fonction appelée "NbrNotExist"
// qui reçoit un tableau d'entiers "tab".
// La fonction retourne un entier.
func NbrNotExist(_ tab: [Int]) -> Int {
    
    // Crée un tableau contenant les nombres
    // de 1 à 10.
    var nbrs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    // Parcourt chaque nombre du tableau "tab".
    for i in tab {
        
        // Supprime de "nbrs" tous les éléments
        // qui sont égaux à la valeur actuelle "i".
        nbrs = nbrs.filter { $0 != i }
    }
    
    // Retourne le premier nombre restant dans "nbrs".
    // Le "!" force le déballage de la valeur optionnelle.
    return nbrs.first!
}
 

Exercice 9:

Créez une fonction qui supprime les premier et dernier caractères d’une chaîne.
 
Exemple:

deleteFirstLast("WayToLearnX") ➞ "ayToLearn"

deleteFirstLast("Alex") ➞ "le"

deleteFirstLast("sos") ➞ "o"
Solution:

// Déclare une fonction appelée "deleteFirstLast"
// qui reçoit une chaîne de caractères "str".
// La fonction retourne une chaîne de caractères.
func deleteFirstLast(_ str: String) -> String {
    
    // Crée une copie de la chaîne reçue.
    var s = str
    
    // Vérifie que la chaîne contient plus de 2 caractères
    // avant de supprimer le premier et le dernier caractère.
    if s.count > 2 {
        
        // Supprime le premier caractère de la chaîne.
        s.remove(at: s.startIndex)
        
        // Supprime le dernier caractère de la chaîne.
        // "endIndex" représente la position après le dernier 
        // caractère.
        // "index(before:)" permet donc d'obtenir l'index du dernier 
        // caractère.
        s.remove(at: s.index(before: s.endIndex))
    }
    
    // Retourne la chaîne après les suppressions.
    return s
}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *