Mis à jour le lundi 30 octobre 2017
  • 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

Ce cours existe en livre papier.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

J'ai tout compris !

TP : Une mini-calculette

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Il est temps de mettre la théorie de côté et de passer à la pratique. C’est par la pratique que l’on apprend le mieux.

Pour cela, je vous ai concocté un petit TP qui vous permettra de réaliser une mini-calculette toute simple qui réalisera l’opération de deux nombres. Ce qui vous permettra de mettre en évidence les notions apprises dans les précédents chapitres :

  • Variables et opérateurs

  • Conditions

  • Boucles

  • Fonctions

Les tableaux ne seront pas mis en évidence ici, mais je vous promets que dès la deuxième partie vous aurez l’occasion de les pratiquer. :)

L’énoncé

Pour réaliser ce TP, vous allez être lâché dans la nature. Je vais vous fournir plusieurs pistes et conseils afin de vous mettre sur la bonne voie et ce sera à vous de réaliser seuls ce que je vais demander ci-dessous. Rassurez-vous, je vais vous demander quelque chose de vraiment très simple. Une correction sera fournie plus bas aussi. Le but pour vous étant de réussir le TP sans avoir regardé la correction.

Principe du programme

Voici la façon dont j'aimerais que vous réalisiez le programme :

  • On affiche un menu numéroté qui permettra de dire le type d’opération que l’on souhaite (addition, soustraction, multiplication, division et modulo).

  • On demande à l’utilisateur ce qu’il souhaite en lui demandant d’entrer le numéro du menu correspondant. S’il ne rentre pas un numéro appartenant au menu, alors on lui redemande tout simplement jusqu’à ce qu’il rentre un numéro compris dans ce menu.

  • A la suite de cela, on lui demande d’entrer un premier nombre, puis un deuxième et on réalise l’opération.

  • On affiche le résultat de l’opération.

C’est tout simple, ce n’est pas une calculatrice très élaborée j’en suis conscient. Mais ça vous suffira à pratiquer les précédentes notions apprises. :p

Voici ce que vous devrez pouvoir obtenir à la fin de votre programme (trace d'exécution) :

--- Menu ---
1. Addition
2. Soustraction
3. Multiplication
4. Division
5. Modulo

Que voulez-vous ? (de 1 à 5) 9

--- Menu ---
1. Addition
2. Soustraction
3. Multiplication
4. Division
5. Modulo

Que voulez-vous ? (de 1 à 5) 2

Entrez le premier nombre : 1
Entrez le deuxième nombre : 1

Le résultat de l'opération est : 0

Program ended with exit code: 0

Demander à l’utilisateur d’entrer un nombre

C’est gentil tout ça, mais tu ne nous a pas appris comment faire pour demander à l’utilisateur d’entrer un nombre !

C'est exact ! Et ça tombe bien parce que on sort tout juste du chapitre sur les fonctions. Il faut savoir que Swift intégre par défaut des fonctions. C'est-à-dire qu'elles ne sont pas écrite dans votre code, mais pourtant vous pouvez quand même les utiliser. Il y a juste à les appeler avec les paramètres adéquats.

Swift nous propose ici une fonction permettant de demander à l'utilisateur de rentrer des informations. Il s'agit de la fonction  readLine()  qui ne prend aucun paramètre. Cependant, cette fonction nous retournera un String. Et ce que l'on veut, c'est traiter des nombres entiers pour notre programme. Je vous propose donc de créer une nouvelle fonction qui fera la même chose mais nous convertira notre chaîne de caractère en un nombre automatiquement. 

Je vous ai dit que la fonction retournait un String. Ce n'est pas vrai en soit. Elle retourne ce qu'on appelle un String optionnel. Je ne vous en dirais pas plus pour l'instant sur les optionnelles, mais un chapitre y sera consacré plus tard dans le cours. Contentez-vous donc de copier/coller ce code tout en haut de votre fichier. :) 

// Fonction permettant de demander à l'utilisateur d'entrer un nombre et de le convertir en entier
func input() -> Int {
    let strData = readLine();
    
    return Int(strData!)!
}

Cette fonction retournera donc comme vous pouvez le voir unInt . Votre calculatrice ne pourra alors que réaliser des opérations sur des nombres entiers. Utilisez les notions vues dans le précédent chapitre pour vous servir de la fonction.‌

Par exemple :

var nombreEntre: Int
nombreEntre = input()

Lorsque que vous écrirez ce genre de code, lors de l’exécution de votre programme vous pourrez alors cliquer dans la console quand votre programme sera arrivé à ce que j’ai écrit ci-dessus. Pour quenombreEntre  puisse prendre une valeur et que l’exécution du programme se poursuive, cliquez dans la console, entrez un nombre et appuyez sur la touche Entrée. Rien de compliqué vous voyez !

C’est tout ! Pour le moment…

Allez, j’en dis pas plus sinon je vais devoir écrire le programme à votre place. Et ce n’est pas du tout le but ici ! 

Prenez le temps de réfléchir, de relire les précédents chapitres si besoin. Vous n’y arriverez peut-être pas du premier coup et ce ne sera pas grave. Mais c’est grâce aux erreurs et surtout à la pratique que l’on apprend le mieux. Evitez un maximum de regarder la solution que je vais présenter ci-dessous. Dites-vous que si vous avez réussi à faire ce que j’ai demandé, alors vous avez réellement compris la première partie de ce cours. Et moi, je n’ai qu’à vous féliciter !

Tenez-vous à l’extrait de ce que vous pouvez obtenir en console pour réaliser le programme, ça vous aidera.

La correction

Re-salut ! J’espère que si tu lis ces lignes, c’est parce que tu as réussi le TP ! Ou tout du moins, j’espère vraiment que tu te seras investi dedans. 

Je vais vous fournir ma correction, mais il existe sûrement plusieurs façons de réaliser le programme. Ma méthode n’est donc pas forcément la seule et la meilleure ! Tant que votre programme réalise vraiment ce que j’ai demandé, c’est tout aussi bien !

Ma solution

// Fonction permettant de demander à l'utilisateur d'entrer un nombre et de le convertir en entier
func input() -> Int {
    let strData = readLine()
    
    return Int(strData!)!
}

// Déclaration des variables utiles pour le TP
var nombre1: Int
var nombre2: Int
var operateur: Int // Comprendra un nombre correspondant au menu (par exemple 1 pour une Addition)
var resultat: Int

// On boucle tant que l'utilisateur n'a pas rentré un nombre compris entre 1 et 5
repeat {
    // On affiche tout d'abord le menu
    print("--- Menu ---")
    print("1. Addition")
    print("2. Soustraction")
    print("3. Multiplication")
    print("4. Division")
    print("5. Modulo")
    print("")
    
    // On demande à l'utilisateur ce qu'il souhaite
    print("Que voulez-vous ? (de 1 à 5) ")
    operateur = input()
    print("") // Permet de réaliser un saut de ligne
    
    // Pour réaliser l'opération, il est nécessaire d'avoir entré un nombre qui correspond au menu
    if (operateur > 0 && operateur < 6) {
        // L'utilisateur rentre le premier nombre
        print("Entrez le premier nombre : ")
        nombre1 = input()
        
        // L'utilisateur rentre le deuxième nombre
        print("Entrez le deuxième nombre : ")
        nombre2 = input()
        
        switch operateur {
        case 1: // Addtion
            resultat = nombre1 + nombre2
            
        case 2: // Soustraction
            resultat = nombre1 - nombre2
            
        case 3: // Multiplication
            resultat = nombre1 * nombre2
            
        case 4: // Division
            resultat = nombre1 / nombre2
            
        case 5: // Modulo
            resultat = nombre1 % nombre2
            
        default:
            resultat = 0 // On ne devrait pas entrer dans ce cas normalement, mais si jamais, on indique à 0 le résultat.
            print("Une erreur est survenue.")
        }
        
        // Enfin, on affiche le résultat
        print("")
        print("Le résultat de l'opération est : \(resultat)")
        print("")
    }
} while operateur < 1 || operateur > 5

Explications

J’ai tâché de commenter un maximum pour vous permettre de comprendre au mieux mon code.

Les variables

Ici, seules quatre variables sont nécessaires. 

  • nombre1  etnombre2  qui seront les deux nombres à utiliser pour réaliser l’opération.

  • operation  qui permettra de connaître le type d’opération à réaliser.

  • resultat qui permettra de stocker la valeur du résultat. On aurait pu s’en passer si à chaque cas duswitch , on affichait directement le résultat. Je trouvais cela un peu lourd pour ma part, c’est comme vous le voulez ! Au final, je n’ai qu’un seulprint()  pour afficher le résultat.

La boucle

J’ai choisi ici de réaliser une bouclerepeat… while . Une bouclewhile  aurait aussi pu fonctionner, mais on est absolument sûr de demander une fois à l’utilisateur ce qu’il souhaite.

Pour ce qui est de la condition de la boucle, on a juste à regarder si ce que l’utilisateur a entré pour le type d’opération est bien compris entre 1 et 5. Ce qui a été rentré est stocké dans la variableoperation . De ce fait, on réalise une condition pour savoir si le nombre est inférieur ou égal à 1 OU supérieur ou égal à 5. Si la condition est respectée, alors c’est que l’utilisateur n’a pas entré un nombre compris entre 1 et 5 et on doit donc lui redemander : on re-boucle.

Une fois qu’on est sûr du type d’opération à réaliser, alors on peut demander à l’utilisateur de nous fournir les deux nombres souhaités pour réaliser l’opération.

Grâce auswitch , vous allez pouvoir tester la valeur de la variableoperation  pour affecter une valeur àresultat  selon le type demandé. Le casdefault  est nécessaire, car il faut couvrir toutes les valeurs possibles deoperation . Normalement, avec notre condition, on ne rentrera jamais dans ledefault . ;) 

Il faut aussi donner une valeur àresultat , sinon, si on rentre dans ce cas,resultat  n’aura aucune valeur et quand on voudra l’afficher, on n’aura rien du tout à lui fournir, car aucune valeur n’aura été associé à la variable. Et ça, Xcode vous le signalera de toute façon. 

Une fois leswitch  fini, on a plus qu’à afficher le résultat grâce à unprint() .

Améliorations possibles

Heureusement, il est tout à fait possible d’améliorer cette mini-calculette ! Je vais vous présenter diverses améliorations possibles, mais pour cette fois, je ne présenterais pas de corrections. Ce sera à vous de vous débrouiller tout seul. N’oubliez pas, c’est de cette façon que vous progresserez le mieux.

Voici une liste d’améliorations possibles à implémenter à votre programme :

  • Demander si l’utilisateur veut réaliser un nouveau calcul. On devra donc retenir ce que l’utilisateur souhaite et selon son choix, on déciderait alors si oui ou non on re-boucle sur presque tout votre programme pour à nouveau réaliser un calcul.

  • Réaliser un compteur qui permettrait alors grâce à l’amélioration ci-dessus, de savoir combien de calculs l'utilisateur a réalisé.

  • Implémenter une méthode qui permet de calculer le carré d’un nombre. Ca ferait un nouveau point dans notre menu. Seulement ici, ce n’est plus deux nombres qu’il faut, mais un seul pour pouvoir associer une valeur à la variable résultat. On pourrait lui demander tout de même d’entrer un deuxième nombre et ne pas en tenir compte par la suite, mais ça ferait un peu bizarre quand même. Ce que je vous propose pour vous éviter des erreurs, c'est d'utiliser une condition juste avant d'entrer le deuxième nombre. Si on a demandé à réaliser le carré, alors lenombre2  est égal aunombre1 . Sinon, on demande à l'utilisateur d'entrer un deuxième nombre. Le carré serait alorsnombre1 * nombre2 .

Ces trois points devraient vous permettre de pratiquer encore un moment. Vous pouvez et je vous encourage, fournir d’autres améliorations pour cette calculatrice aussi. Je vous souhaite bon courage pour réaliser tout cela en tout cas. :)

 

Exemple de certificat de réussite
Exemple de certificat de réussite