owned this note
owned this note
Published
Linked with GitHub
---
tags: Enseignement, Info 111, FAQ
---
# Foire Aux Questions, Amphi Info 111 Semaine 3
Ceci est un document partagé. Vous pouvez tous l'éditer.
Consignes:
- Lire les documents de cours et faire les feuilles d'exercices de TD de la [Semaine 3](http://nicolas.thiery.name/Enseignement/Info111/Web/Semaine3/).
- Vous pouvez au choix travailler sur papier ou utiliser JupyterHub pour télécharger les documents (si le service est disponible).
- En cas de question: vérifier si la réponse n'est pas disponible ci-dessous. Sinon, si la question est courte, la poser dans le chat. Si elle est longue, l'écrire ci-dessous avec votre nom, et me mettre une notification dans le chat. Lorsque «ça ne marche pas» donner des détails (messages d'erreurs, ...) pour que je puisse analyser le problème. Vous pouvez aussi poser des questions à l'oral.
## Organisation
### Le TD3 est il à faire sur feuille?
Oui, les exercices de TD sont a priori à faire sur feuille. Mais puisque vous êtes devant votre ordinateur, vous pouvez aussi les faire sous jupyter si vous préférez.
### À partir de quel TP sera-t-il noté?
Cela dépendra de votre enseignant. Il vous préviendra
lorsque les TP seront notés.
## Questions sur l'utilisation de JupyterHub
### Je ne peux pas me connecter a JupyterHub
> "500 : Internal server error"
Ce n'est hélas pas surprenant: Le serveur n'est pas encore dimensionné pour 200 personnes simultanément. Je vais voir si je peux l'alléger, mais en attendant, consultez les documents sur la page web, et faites les exercices sur papier.
### quand j'essaye de me connecter sur le serveur jupyter je suis redirigée automatiquement sur la meme page
Essayer les contournement proposés en dessous du bouton. Notamment de se connecter dans une fenêtre en navigation privée.
### Le noyau se crash; j'ai essayé de le relancer plusieurs fois mais en vain.
Bien refermer les feuilles précédentes avec le menu "Fichier -> Fermer et arrêter"
### Lancement de Jupyter sous JupyterHub
> Lorsque j'essaye d'ouvrir le notebook en tapant "info-111 jupyrer notebook" et lorsque j'utilise les liens qui me sont proposés , ils ne me redirige vers aucune page existante.
Sous JupyterHub, jupyter est déjà lancé. Pas besoin de le relancer. Juste retourne dans l'onglet contenant le navigateur de fichiers.
## Questions sur téléchargement et soumissions
### Échec de `info-111 submit Semaine3 XXX`
> J'ai une problème d'échec de la soumission, ''info-111 submit Semaine3 MI3'' ne marche pas.
Pour ceux qui s'y sont pris en avance (bravo!) et ont téléchargé 'Semaine3' pendant le week-end, avant dimanche 18h environ: Il y avait un bug dans ce que j'avais déposé: vous avez récupéré *tout* le matériel du cours avec les solutions ce qui n'est pas très utile. Pour corriger cela, regarder les instructions en errata de:
https://nicolas.thiery.name/Enseignement/Info111/Web/Semaine3
### Téléchargement d'archive
> Auparavant, il était possible de télécharger les Semaine2.zip et Semaine3.zip directement sur votre site Internet. Ce n'est plus d'actualité ?
Non, en effet. C'est plus robuste d'utiliser la commande info-111.
### Transfert du travail entre salle de TP et JupyterHub
> Bonjour, pendant le tp de la semaine dernière (dans les salles nautilus), après avoir finit le TP j'ai utilisé la commande usuelle pour le soumettre (info-111 submit Semaine2 MI4), mais quand je me connecte sur jupytercloud en distanciel, le dossier Semaine2 est bien là, mais toutes les modifications que je lui ait apporté ont disparues. Est ce que je dois recommencer Semaine2 depuis le début et le soumettre en distanciel, ou (de préférence) est ce qu'il y aurait un moyen de récupérer mon travail ?
Est-ce que, depuis JupyterHub, tu as bien fait, après le TP, un
info-111 fetch Semaine2
Si oui et que tu ne vois pas tes modifications, donne moi un lien vers ton dépôt sur gitlab (ou ton login) pour que j'aille voir.
> C'était bien çainf le problème, j'avais oublié de faire le "fetch". Merci.
Parfait!
## Questions de C++
### à quel moment faut t'il mettre les points virgules dans les lignes de codes
En C++, il faut en principe mettre un ; systématiquement à la fin de chaque instruction. Exception: dans Jupyter, il n'est pas nécessaire de mettre un ; à la fin d'une cellule.
### Dans la commande cout y a t il une limite de caracteres ecrivables entre les guillemets?
De mémoire, Je ne crois pas. Mais pour que ça reste lisible,
c'est pas plus mal de couper en petit bout qui tiennent dans une ligne.
### Que veut dire " std::string resultat;"
Cela déclare une variable 'resultat' qui est de type "std::string": c'est à dire une chaîne de caractères;
du texte en langage courant.
Mais pourquoi l'on ajoute std:: en plus du type ici ?
C'est un détail technique:
Techniquement, c'est parce que string est déclarée dans la bibliothèque standard de C++ qui s'appelle `std`.
Au lieu d'être dans le cœur du langage comme int ou double. On verra les détails à la fin du semestre. Pour le moment, infovous pouvez le prendre comme incantation magique.
### `#include <iostream>` est donc la bibliothèque de c++??
C'est en effet une (petite) partie de la bibliothèque de c++?
Donc si l'on veut utiliser une commande venant de la bibliothèque C++ on devra toujours le précéder de std ou ce n'est pas nécessaire ?
### Cela signifie quoi indentation
"indentation" est défini dans la feuille sur les if imbriqués. Est-ce que tu le retrouves?
### Est ce que «cout» c'est l'équivalent de print en python ?
Oui!
### À quoi sert le `#include<iostream> ...`
Par défaut, le langage C++ vient avec le strict minimum pour écrire des programmes. Beaucoup de fonctionalités sont définies dans des bibliothèques. Ici la bibliothèque standard.
Je vous raconterais cela plus en détail à la fin du semestre. Pour le moment, vous avez juste à savoir qu'il faut mettre cette incantation magique avant d'utiliser `cout`.
### Que faut-il choisir entre cout<< x<<end et return x ?
> La seule différence que je vois et que l'un renvoie uniquement la variable et l'autre la variable et son type mais dans ce cas est-ce qu'on doit en préferer un ?
C'est une très bonne question sur laquelle nous reviendrons la semaine prochaine. Les deux sont en fait très différents dès que l'on veut faire autre chose du résultat que de l'afficher.
Pour le moment: si tu es dans une fonction, le plus probable est que c'est d'un return dont tu as besoin.
> Mais en soit dans une fonction où le seul but est d'afficher le résultat les deux se valent où bien on préfère utiliser return du coup ?
Oui, si le rôle de ta fonction est en effet explicitement d'**afficher** une valeur plutôt que de la **calculer**, alors `cout` est le bon outil.
### Affichage de booléens
> Quand j'affiche un boolean en faisant ``cout << le_boolean;`` j'obtiens un 1 ou un 0 et non true ou false, est-ce normal, dois-je modifier le code (exercice 2)?
Voici mon code:
```c++
bool exo2(int heure)
{
return (heure >= 10 && heure <= 12) || (heure >= 14 && heure <=19);
}
```
Dans Jupyter, cela devrait afficher true/false.
Si c'est dans un programme compilé, true et false sont affichés comme 0 et 1
> Merci pour votre réponse, je ne suis pas passé par jupyter mais par g++.
Parfait, ça explique cela :-)
### Déclarations multiples de variables dans une cellule
> Peut-on déclarer plusieurs variables dans la même cellule?
Oui! Il faut juste bien mettre un `;`après chaque déclaration, comme après chaque instruction.
int a, b;
float c;
> Si `int a; int b` n'est pas du C++, qu'est ce que c'est alors ?
C++ valide:
int a, b;
int a; int b;
C++ invalide:
int a, int b;
### Déclaration multiples de fonction dans une cellule
> Pourquoi pour max3 ça marche, mais pour float le fonction marche pas?
int max3(int a, int b, int c){
....
}
double max3( double a, double b, double c ){
...
}
input_line_26:3:44: error: function definition is not allowed here
Interpreter Error
C'est bien du code C++ valide. Mais il y a une limitation actuellement avec C++ dans Jupyter: chaque fonction doit
être définie dans une cellule séparée.
## Nouvelles questions
Comment peut-on sauter une ligne de façon élégante en C++ ?
```cpp
int exo6isPrime(int n)
{
for (int i = 2; i <= n / 2; i++)
if (n % i == 0)
return false;
return true;
}
int exo6isPrimeFixed(int n)
{
if (n == 0 || n == 1) // ça double la taille du programme :(
return false;
else
return exo6isPrime(n);
}
void exo6ListPrimes(int n)
{
cout << 2;
for (int i = 3; i <= n; i = i + 2)
if (exo6isPrime(i))
cout << i;
}
```
La dernière fonction fait une bouillie de tous les nombres (car il n'y a pas de saut de ligne).
Pour faire un saut de ligne:
cout << endl;
> Merci. Est-il possible de faire les deux sur une même ligne (de code cette fois-ci) ?
Oui:
cout << 1 << endl;
> Merci.
### Problème de soumission
>[name=Bahri Manitas]
```
(info-111) manitas@LAPTOP-TS2PP50M:~/Info111$ info-111 submit ProgImperative/Semaine3 InfoMath1
[SubmitApp | WARNING] No nbgrader_config.py file found (rerun with --debug to see where nbgrader is looking)
[SubmitApp | CRITICAL] Unwritable directory, please contact your instructor: /public/info-111/exchange
[SubmitApp | ERROR] nbgrader submit failed
info-111: exécution de: submit ProgImperative/Semaine3 InfoMath1
[SubmitApp | WARNING] No nbgrader_config.py file found (rerun with --debug to see where nbgrader is looking)
[SubmitApp | CRITICAL] Unwritable directory, please contact your instructor: /public/info-111/exchange
[SubmitApp | ERROR] nbgrader submit failed
```
D'après le message, je fais l'hypothèse que tu travailles sur ton portable, avec une installation des logiciels datant de l'année dernière. Comme la procédure de soumission a changé, il
faudrait mettre à jour lesdits logiciels. Le plus simple est probablement de refaire l'installation (la partie a propos de conda).
Il faudra aussi créer le répertoire ProgImperative, et lancer
info-111 depuis celui-ci.
> D'accord, je vous remercie. Et j'avais créé le répertoire ProgImperative mais la commande info-111 ne s'execute que dans le repertoire Info111 sinon j'ai le message d'erreur suivant qui s'affiche.
```
(info-111) manitas@LAPTOP-TS2PP50M:~/Info111/ProgImperative$ info-111 submit Semaine3
Vous devez être dans le sous-répertoire Info111 de votre répertoire pour lancer cette commande
```
### Problème pour afficher la variable tarif
std::string tarif;
int age;
age=20;
if (age <11) {
tarif ="efant";
}else if (age <27){
tarif ="jeune";
}else if (age>=60){
tarif ="senior";
}else {
tarif = "plein tarif";
}
tarif
Ce programme m'affiche le message d'erreur suivant :
In file included from input_line_11:1:
/home/laof/miniconda3/envs/info-111/include/xcpp/xmime.hpp:35:30: error: no viable overloaded '='
...bundle["text/plain"] = cling::printValue(&value) + "\ntype: "+type(value);
~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
input_line_87:2:2: note: in instantiation of function template specialization
'xcpp::mime_bundle_repr<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > >' requested here
mime_bundle_repr(*(*(std::string**)0x7ffccd2556a0));
^
/home/laof/miniconda3/envs/info-111/include/nlohmann/json.hpp:16469:17: note: candidate function not viable: no known conversion from 'basic_string<char,
std::char_traits<char>, std::allocator<char> >' to
'nlohmann::basic_json<std::map, std::vector,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >, bool, long, unsigned long, double, std::allocator,
adl_serializer>' for 1st argument
basic_json& operator=(basic_json other) noexcept (
### Fonction bool
Je suis en train de faire l'exercice 6 du TD3 mais lorsque j'essaye ma fonction bool, il y a un message d'erreur.
"input_line_14:14:1: warning: control may reach end of non-void function [-Wreturn-type]"
Voici mon code :
bool premier(int n) {
int k = 2;
while (k < n) {
if ((n % k) == 0 ) {
return false;
}else {
return true;
}
}
}
> Ta fonction n'est pas une fonction void (je suppose), elle doit donc retourner quelque chose (un boolean apparemment), ce message te précise qu'il se pourrait que tu sortes de la fonction sans avoir retourné de valeur. Cela arriverait si k était supérieur à n par exemple. Essaye de rajouter un return après ta boucle while.