ICC Information - Calcul - Communication / Pratique: initiation à la programmation (en C++) / (MT + EL)
Topic outline
-
ICC - Pratique: Programmation C++ pour étudiants de Microtechnique et Electricité
Le cours est combiné avec le MOOC de Coursera: "Initiation à la Programmation (en C++)"Lien vers le site moodle ICC-Théorie
Ronan Boulic EPFL-IIG
5 assistants doctorants (TA) et 15 assistants-étudiants
Cours hybride le vendredi 8h15-9h en présentiel au CE6avec streaming et gestion des questions/réponses (pendant chaque cours)sur le Webinaire Zoom https://epfl.zoom.us/j/62881602653Exercices le vendredi de 15h15 à 17hen présentiel : votre affectation de salle de TP est la même que pour la théorieMeeting zoom seulement pour les personnes qui ne sont pas autorisées en présentielSupport optionnel en semaine dès le 30 septembre:jeudi 8h-9h (BC 07 et 08) et vendredi 9h-10h (CO 020 et 021)-
Lire le tutoriel ci-dessous pour vous connecter avec le login gaspar. Vocabulaire: une question est un "Topic" ; elle contient un sujet court et informatif, elle appartient à une des "catégorie" prédéfinies (sélectionner dans menu) et on peut y ajouter des "tags" eux aussi prédéfinis pour faciliter les recherches ultérieures.
-
S'inscrire pour pouvoir suivre ce MOOC dès la seconde semaine du semestre ; l'heure hebdomadaire en auditoire sera effectuée en classe inversée, ce qui requiert d'avoir suivi la leçon et les quizzs du MOOC avant l'heure de la classe inversée.
-
Automne : cours vendredi 8-9h, TP vendredi 15-17hOrganisation du cours en relation avec le MOOC "Initiation à la Programmation en C++"
-
MOOC semaine 1 / classe inversée sur les variables et expressions
-
Dans la version conv0 il y a une "erreur_sémantique" ce qui veut dire que le compilateur produit un exécutable mais celui-ci ne donne pas les résultats attendus. En effet le compilateur a correctement traduit la sous-expression 5/9 par une division entière parce que les deux opérandes sont des constantes littérale entières. Or pour ce problème nous avons besoin de la division des nombres à virgule. Elle est obtenue dans l'autre version conv.cc en indiquant qu'un des opérandes est de type nombre à virgule flottante. Ce type étant plus fort que le type entier, le second opérande entier est automatiquement converti en type double et l'opération donne un résultat de type double. Cette fois le résultat est correct.
-
MOOC semaine 2 / classe inversée sur les instructions if et switch
-
MOOC semaine 3 / classe inversée sur les instructions for et while ( + switch et opérateur ternaire )
-
MOOC semaine 4 / classe inversée sur les fonctions (1): portée, paramètres, conception d'une fonction
-
MOOC semaine 4 (encore) / classe inversée sur les fonctions (2): récursivité, surcharge, valeur par défaut, coût calcul
-
Cours : MOOC semaine 5 / classe inversée sur la notion de vector
Exercices: pas d'exercices du fait de l'examen => la série 7 est décalée à la semaine 8
Début du mini-projet: calendrier, donnée, démo
examen en contrôle continu le 5 novembre 14h15-16h45
Tous les documents "papier" sont autorisés: livre, notes personnelles, tout document imprimé (cours, séries, etc...)LES APPAREILS ELECTRONIQUES SONT INTERDITS, EN PARTICULIER LES CALCULATRICESVotre salle d'examen est indiquée dans le fichier pdf ci-dessous
Vous resterez à la même place pour les 2 composantes de l'examen.-
C'est la note "TOTAL adjusted" qui sera additionnée aux autres notes du cours ICC pour le calcul de la moyenne finale. Ce qui est indiqué dans la colonne de droite (Adjusted virtual) indique à quoi correspondrait votre note actuelle si elle était traduite en "note SAC".
-
seuls les exercices 1 et 3 sont au programme de l'examen du 5 novembre
-
Ce serveur web permet de téléverser et tester votre projet de la même manière que pour le rendu final sur moodle.
A partir de ce fichier archive, l'autograder compile votre projet et l'exécute sur les fichiers publics et les fichiers non-publics. Vous pouvez voir le détail de l'exécution des fichiers publics dans le feedback sur la page web par l'autograder.
Dans la colonne de droite vous avez des liens pour télécharger les fichiers de test et récupérer les quelques déclarations de constantes C++ pour les messages d'erreurs (error.txt).
Important: l'autograder détruit les fichiers archives reçus après avoir fait tourner les tests ; il ne peut pas être utilisé comme outil pour soumettre la version finale de votre projet. Vous disposez dans la colonne de droite d'un lien vers le site moodle qui sera utilisé pour téléverser la soumission finale du projet (le lien n'est pas encore public).
-
ouvrir avec geany ou notepad (windows)
-
SpeakUp1: la bonne réponse est D car le tableau est vide ; l'accès avec tab[0] produit un comportement indéterminé.
SpeakUp2: la bonne réponse est C même si l'exécution affiche effectivement 5 car cette valeur est rangée en dehors de l'espace réservé pour ce tableau de un seul élément ; il doit donc être accédé avec l'indice 0 et pas l'indice 1.
-
Demo de l'exécution du projet (slides et video en Topic7 après la donnée).Cours : MOOC semaine 6 / classe inversée sur les notions de array et de string (seulement)Exercices : série7 sur le MOOC semaine 5
-
Question SpeakUp: la bonne réponse est D car l'offset de l'élément mat[0][3] est 3 et cela correspond à l'emplacement mémoire de mat[1][0] qui contient la valeur 'D'. C'est donc ce caractère 'D' qui est affiché.
Question annexe: aurait-on le même comportement si mat était un vector ? Réponse: non, car les éléments d'un vector à deux indices sont rangés différemment en mémoire comparé à un array à deux indices. Cela sera détaillé quand nous aurons vu les pointeurs.
Certaines méthodes travaillant sur les strings seront illustrées dans un cours ultérieur car le temps était dédié au projet en priorité aujourd'hui.
-
avec le code définissant une constante VERBOSE pour l'affichage optionnel (utile pour la mise au point du projet)
-
Il n'y a pas d'exercice complémentaire cette semaine, donc pas de "série7 corrigé".
-
-
MOOC semaine 6 (encore) / classe inversée sur la notion de structure (struct) + complément sur les opérateurs bit à bit
exercices: série8 sur les string (première partie du MOOC6)
-
SpeakUp n&&p : la bonne réponse est B correspondant au booléen VRAI
SpeakUp n¦¦p: la bonne réponse est aussi B correspondant au booléen VRAI
SpeakUp !n : la bonne réponse est D correspondant au booléen FAUX
-
-
MOOC semaine 7 1ière partie / classe inversée sur les pointeurs
exercices: série9 sur les structures
-
MOOC semaine 7 : Suite sur les pointeurs (allocation dynamique) et compléments
-
La bonne réponse est D. L'explication détaillée est dans le slide qui suit la question: en résumé, le symbole * s'applique seulement à la première variable déclarée b. Si on veut que c soit aussi déclarée comme pointeur il faut écrire. int* b, *c ;
-
Cours standard indépendant du MOOC: consolidation et analyse / TP sur les pointeurs et les chaînes à-la-C
-
Question SpeakUp: le code de sizeofPointer.cc est disponible dans le fichier archive plus bas. La bonne réponse est D car, sur une machine donnée, un pointeur occupe toujours le même nombre d'octets quel que soit l'objet pointé.
-
Attention: il y a une petite erreur dans la video au sujet de sizeof("1") car cet opérateur calcule la longueur totale de cette chaine-à-la-C et affiche 2 puisqu'il compte aussi le caractère de fin de chaine '\0'. L'indication de 8 n'est donc pas correcte pour cet exemple, même si le type d'une chaîne à-la-C est bien de type char*.
PS1: les slides sont correctes
PS2: un message sur Discourse parle des liens entre string et les chaines à-la-C.
-
-
Cours standard indépendant du MOOC: entrées-sorties
second examen en contrôle continu du 17 décembre de 15h15 à 17h45
Tous les documents "papier" sont autorisés: livre, notes personnelles, tout document imprimé (cours, séries, etc...)LES APPAREILS ELECTRONIQUES SONT INTERDITS, EN PARTICULIER LES CALCULATRICESVotre salle d'examen est éventuellement différente de celle du 5 novembre: vérifiez sur le document pdf ci-dessousVous resterez à la même place pour les 2 composantes de l'examen.-
Question SpeakUp : la bonne réponse est bien B ; ça ne peut pas être C car il y a un bon gros bug avec le pointeur ligne 17. La réponse D n'est pas correcte parce que le texte "test2" est dans le buffer de sortie et il n'apparait pas dans le terminal à cause du bug qui stoppe le programme. Pour éviter cette mauvais inteprétation il faut systématiquement ajouter endl après tout message de debugging.
Slide5: il y a aussi affichage du contenu du buffer de sortie en fin d'exécution (normale) du programme et si on appelle la méthode flush sur cout.
-
Cours : fin du cours Topic13, feedback sur le projet / révision pointeurs et divers
Rendu mini-projet vendredi 24 décembre à midi
pour 2021-22, le vendredi après-midi est férié.
-
Le fichier archive doit seulement contenir :1)Votre unique fichier source dont le nom est donné par votre numéro SCIPER et l’extension est .cc. Par exemple pour Monsieur X de numéro SCIPER 123456, le nom de fichier source est 123456.cc. Vous êtes responsables de vérifier que l’upload s’est bien passé en le téléchargeant (download) dans votre compte et en examinant que tout est bien présent. Vous pouvez toujours faire un nouvel upload jusqu’à la date limite.2)Un rapport en format pdf d’au maximum 2 pages écrit avec un traitement de texte.Ecrivez votre Nom et Prénom en haut de la première page du rapportRecommandation finale: chaque année nous avons plusieurs cas de personnes qui se trompent au moment du téléversement ; donc, vérifiez que le programme que vous venez de fournir (upload) est le bon en le récupérant de moodle (download) pour vérifier et être sûr que c'est la bonne version.