ICC Information - Calcul - Communication / Pratique: initiation à la programmation (en C++) / (MT + EL)
Topic | Name | Description |
---|---|---|
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. |
||
2 minor corrections / adding -std=C++11 |
||
09.2021: plus de VM locale |
||
Topic 1 | avec lien zoom pour exo online et dates hors-RLC |
|
mise à jour de la video le 24/9 à 14h |
||
Topic 2 | ||
modif GEANY_1 et GEANY_2: sauvegarder en .cc pour pouvoir configurer les commandes |
||
Topic 3 | ||
|
||
titre plus précis |
||
Topic 4 | ||
titre plus précis |
||
la version 2019-20 corrige la valeur de e obtenue avec double ; il manquait un 5 dans les chiffres non significatifs |
||
Topic 5 | ||
Topic 6 | Question1: la bonne réponse est l'affichage du caractère 'v' car il y a une conversion automatique du type de l'expression qui suit l'instruction return dans le type de la fonction qui est char. Question2: la bonne réponse est l'erreur de compilation causée par l'appel f2(w) car c'est un passage par référence et on lui passe une référence du mauvais type (ref sur double au lieu de ref sur int). le code des deux programmes est fourni dans le fichier archive ci-dessous. |
|
Topic 7 | ||
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 |
||
une ligne manquait à l'exercice 4 mais ça n'était pas le but de l'exercice c'est pourquoi la présente version destinée à l'entrainement contient cette ligne de déclaration de la fonction f(); ceux qui l'ont remarqué ont eu les points de cet exercice. |
||
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. |
||
Topic 8 | 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é". |
||
Topic 9 | 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 |
|
Topic 10 | ||
Avec complément: 1) sur les opérateurs bit à bit |
||
l'exercice 20 sera pour la semaine prochaine (Topic 10) la donnée et le corrigé de l'exercice 20 ont une ligne coupée dans la partie qui initialise le vector de QCM. Voici une version qui initialise directement une variable de type Examen avec les mêmes valeurs initiales. |
||
Topic 11 | ||
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 ; |
||
Cette description (en anglais) est à essayer avec les fichiers utilisés pour les 2 autres approches. L'utilisation en mode ligne de commande est moins familière au début mais elle fonctionne toujours, donc on aura avantage à s'en servir quand DDD ou geany-GDB ne fonctionnent pas correctement, ce qui est déjà arrivé. |
||
Topic 12 | 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. |
||
2021-22 |
||
2020-21, correction coquille exC5 réponse b) la variable b ne change pas et conserve sa valeur de 2. |
||
Topic 13 | ||
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. |
||
Les programmes indiqués en bas des slides sont disponibles dans ce fichier archive, de même que le programme pour le tutoriel de conversion de chaînes. En réponse à une question sur la taille max du buffer d'entrée vous trouverez aussi le programme cin_buffer_size.cc et le fichier texte big_file.txt qui suggère que le système augmente automatiquement la taille du buffer d'entrée selon les besoins. En effet le processeur pourrait être occupé à exécuter une partie du programme pendant que le système remplit le buffer d'entrée avec le contenu d'un fichier redirigé sur l'entrée. Il est très probable que le système ajoute un bloc supplémentaire (de l'ordre de 4KB) chaque fois que le buffer d'entrée arrive à sa taille max. |
||
Topic 14 | ||