CYCLE 6 : FONCTIONS Faire un programme en C avec des FONCTIONS 1- A quoi servent les FONCTIONS ? 2- Comment écrire un programme avec FONCTIONS ? 3- Comment le CPU exécute ce programme ?
CYCLE 6 : FONCTIONS Faire un programme en C avec des FONCTIONS 1- A quoi servent les FONCTIONS ?
3 Des fonctions pour optimiser la longueur du code
4 int main() {int choixOp ; float a, b; do// boucle de reprise générale du menu {printf("\n\t1- addition\n\t2-soustraction"); printf("\n\t3- multiplication\n\t4-division\n\t\t5-Sortir"); scanf(“%d",&choixOp); if(choixOp==1) // addition {do // Saisie validée des opérandes { printf("\n\n Donnez les opérandes : "); scanf(“%f%f",&a,&b); if (a>50. || b>50.)printf("\nErreur de saisie"); } while ((a>50. || b>50.); printf("\n\nAddition : %.2f\n",a+b); } else if(choixOp==2) // soustraction { do // Saisie validée des opérandes {printf("\n\n Donnez les opérandes : "); scanf(“%f%f",&a,&b); if (a>50. || b>50.)printf("\nErreur de saisie"); } while ((a>50. || b>50.); printf("\n\nSoustraction : %.2f\n",a-b); } else if(choixOp==3) // multiplication {do // Saisie validée des opérandes { printf("\n\n Donnez les opérandes : "); scanf(“%f%f",&a,&b); if (a>50. || b>50.) printf("\nErreur de saisie"); } while ((a>50. || b>50.); printf("\n\nMultiplication : %.2f\n",a*b); } else if(choixOp==4) // division { do // Saisie validée des opérandes { printf("\n\n Donnez les opérandes : "); scanf(“%f%f",&a,&b); if (a>50. || b>50.) printf("\nErreur de saisie"); } while ((a>50. || b>50.); if (b!=0)printf("\n\nDivison : %.2f\n",a/b); elseprintf("\nErreur"); } else if(choixOp==5) {} else{printf("\nErreur choix menu");} } while (choixOp != 5); } FONCTION MAIN() : TROP longue TROP répétitive
5 int main() {int choixOp ; float a, b; do// boucle de reprise générale du menu {printf("\n\t1- addition\n\t2-soustraction"); printf("\n\t3- multiplication\n\t4-division\n\t\t5-Sortir"); scanf(“%d",&choixOp); if (choixOp==1) // addition {SaisirValidee(&a,&b); printf("\n\nAddition : %.2f\n",a+b); } else if (choixOp==2) // soustraction {SaisirValidee(&a,&b); printf("\n\nSoustraction : %.2f\n",a-b); } else if (choixOp==3) // multiplication { SaisirValidee(&a,&b); printf("\n\nMultiplication : %.2f\n",a*b); } else if (choixOp==4) // division {SaisirValidee(&a,&b); if (b!=0)printf("\n\nDivison : %.2f\n",a/b); elseprintf("\nErreur"); } else if (choixOp==5) { } else {printf("\nErreur choix menu"); } } while (choixOp != 5); } FONCTION MAIN() : Longueur optimisée Plus lisible Mieux pour les tests int main() {int choixOp ; float a, b; do// boucle de reprise générale du menu {printf("\n\t1- addition\n\t2-soustraction"); printf("\n\t3- multiplication\n\t4-division\n\t\t5-Sortir"); scanf(“%d",&choixOp); if (choixOp==1) // addition {SaisirValidee(&a,&b); printf("\n\nAddition : %.2f\n",a+b); } else if (choixOp==2) // soustraction {SaisirValidee(&a,&b); printf("\n\nSoustraction : %.2f\n",a-b); } else if (choixOp==3) // multiplication { SaisirValidee(&a,&b); printf("\n\nMultiplication : %.2f\n",a*b); } else if (choixOp==4) // division {SaisirValidee(&a,&b); if (b!=0)printf("\n\nDivison : %.2f\n",a/b); elseprintf("\nErreur"); } else if (choixOp==5) {} else {printf("\nErreur choix menu");} } while (choixOp != 5); }
6 Des fonctions pour optimiser la longueur du code Chaque fonction réalise une des tâches du programme et contient ses propres données et instructions. Les fonctions rendent le code source plus court : – traitements répétitifs écrits une seule fois dans une fonction. – fonctions réutilisables par simple appel.
7 Des fonctions pour structurer le code
Julien et Mathéo s’échangent des s à partir de leur ordinateurs. Mais que se passe-t-il entre le moment où Julien clique sur envoyer et le moment où Mathéo voit s’afficher le message dans sa boîte mail ? Simulateur de transmission numérique entre 2 ordinateurs
Chaîne de transmission numérique COMPRESSION CRYPTAGE BINARISATION CODAGE CANAL DECODAGE CANAL CONVERSION TEXTE DECOMPRESSION DECRYPTAGE SAISIE TEXTE AFFICHAGE TEXTE
10 Des fonctions pour structurer le code Les fonctions structurent le code source : – Le programme est décomposé en parties : chaque fonction réalise un traitement. – chaque fonction a ses propres données locales (variables/const). Un bon programme est modulaire : il est structuré avec des fonctions.
11 Pourquoi faire des fonctions ?
CYCLE 6 : FONCTIONS Faire un programme en C avec des FONCTIONS 2- Comment écrire un programme avec FONCTIONS ?
13 Comment écrire une fonction dans un programme en C ? /* PROTOTYPE DE LA FONCTION : SA DECLARATION void NomFonction(void); */ void AfficherAide(void); int main() {... /* APPEL DE LA FONCTION : NomFonction(); */ AfficherAide(); } /* DEFINITION DE LA FONCTION void NomFonction(void) { } */ void AfficherAide(void) { // DECLARATIONS DONNEES LOCALES // INSTRUCTIONS de la FONCTION }
14 Exemple : Afficher l’aide d’un jeu void AfficherAide(void); int main() { // Affichage de l’aide du jeu AfficherAide(); }... /* Affichage de la fenêtre d’aide */ void AfficherAide(void) { printf("\n\t\t\tAide du jeu de Mastermind"); printf("\n\t\t\t \n\n\n\n"); printf("Blablabla…"); }
/* Affichage de la fenêtre d’aide */ void AfficherAide(void) { printf("\n\t\t\tAide du jeu de Mastermind"); printf("\n\t\t\t \n\n\n\n"); printf("Blablabla…"); } 15 Précisions sur les fonctions Fonction : traitement privé Peut posséder ses propres données, appelées données locales. est une suite d’instructions, réalisant une tâche simple.
Précisions sur les données locales des fonctions Une fonction ne peut pas utiliser les données déclarées dans une autre fonction : données déclarées dans une fonction : données locales visibles seulement par les instructions de leur fonction. toute autre fonction ne peut pas les utiliser. Des variables locales de différentes fonctions ont un espace mémoire distinct, même avec le même nom.
CYCLE 6 : FONCTIONS Faire un programme en C avec des FONCTIONS 3- Comment le CPU exécute un programme avec des fonctions?
18 Exécution séquentielle avec redirection dans les fonctions CPU commence au début de la fonction principale (main) : Il exécute les instruction une par une, dans l’ordre où elles se présentent (séquentiellement), en suivant leur logique (aiguillage si instruction alternative, rebouclage si instruction itérative). Si le CPU rencontre un appel de fonction : Il met en attente l’exécution de la fonction appelante (ex. main()). L’exécution est redirigée vers la fonction appelée ; cette fonction appelée est exécutée du début à la fin, séquentiellement. Lorsque l’exécution de la fonction est terminée, le CPU reprend l’exécution de la fonction appelante à l’endroit où elle était arrêtée (ex. main()). Arrivé à la fin du main(), il sort du programme.
/* Affichage de la fenêtre d’aide */ void AfficherAide(void) { printf("\n\t\t\tAide du jeu de Mastermind"); printf("Blablabla..."); } void AfficherAide(void); int main() { // Affichage de l’aide du jeu AfficherAide(); } 19 Illustration avec un exemple