OpenLLM-France/wikimedia huggingface dataset:
# Algorithmique impérative/PGCD
## Problématique

Écrire un algorithme donnant le Plus Grand Commun Diviseur (PGCD) de deux nombres donnés par l'utilisateur. On supposera que l'utilisateur ne donne que des entiers strictement supérieurs à zéro.
Il faudra écrire une fonction, prenant en entrée deux entiers strictement positifs et renvoyant leur PGCD. L'algorithme principal y fera appel.
Question subsidiaire : on considérera que l'utilisateur peut entrer n'importe quels entiers. Tenez-en compte pour que l'algorithme ne commette pas d'erreur et qu'il informe l'utilisateur.

## Aide

Il faut avoir étudié ce problème d'algèbre pour avoir la solution. Elle consiste à appliquer l'algorithme d'Euclide.

## Solution

Pas vraiment de difficulté pour l'algorithme principal. La difficulté étant la fonction implémentant l'algorithme d'Euclide. Le jeu d'assignation à répéter jusqu'à obtenir un reste nul est difficile à visualiser.
Question subsidiaire : il y a trois événements à contrôler :
* Le cas où u=v=0 et où le PGCD n'existe pas et il faut arrêter le programme (ligne 22)
* Le cas où u ou v (ou les deux) est négatif est il faut prendre son opposé (lignes 24 et 25)
Pour la solution sans la question subsidiaire : ôter les lignes 21 à 26 et la 28 de la solution proposée.
# Algorithmique impérative/Polynômes
## Problématique

On souhaite réaliser un programme qui donne les solutions d'un polynôme dont les coefficients sont donnés par l'utilisateur. On peut aborder le problème selon des difficultés croissantes :
* Résoudre dans ℝ les polynômes du premier degré
* Résoudre dans ℝ les polynômes du second degré
* Résoudre dans ℂ les polynômes du second degré
# Algorithmique impérative/Quiz
## Problématique

On cherche à implémenter un programme qui, étant donnée une base de données de questions et de réponses correspondantes posent les questions et demande la réponse à un joueur. Le programme comptabilise les bonnes réponses et donne le score final. Le nombre de questions à poser est demandé au début de la partie, si le nombre donné est nul ou négatif, on choisit un nombre aléatoire entre un et le nombre de questions dans la base de données.
Les réponses seront soit
* vrai/faux
* une réponse en toutes lettres
* une réponse sous forme de nombre
Il est demandé d'implémenter seulement une de ces trois possibilités.
* À chaque question, le score actuel et le nombre de questions restantes est affiché
* On ne demande pas que le programme ne pose pas deux fois la même question au cours d'une même partie, réfléchir tout de même à un moyen de faire cela.

### Données

On suppose ces tableaux remplis, bien évidement la réponse à la question questions[i] est réponses[i]. T est booléen, integer, ou chaine : à vous de choisir et d'assumer ce choix dans l'algorithme.

## Solution
### Implémentation en Pascal

L'auteur vous demande de l'excuser pour la piètre qualité du contenu de la base de données...
# Algorithmique impérative/Recherche
## Problèmatique

Supposons que nous avons déclaré un tableau tab d'entiers comme suit :
Supposons que ce tableau est rempli d'entiers inconnus mais triés dans l'ordre croissant.
Proposez un algorithme qui, étant donné un entier indiqué par l'utilisateur, trouve son indice dans le tableau. On supposera que l'entier indiqué par l'utilisateur est effectivement dans le tableau.

## Aide

Vous remarquerez que ce problème s'apparente au problème de recherche d'un mot dans le dictionnaire. Pensez donc à la méthode que vous employez dans cette situation...

## Solutions
### Solutions moyennes

Voici une solution, qui n'est pas celle attendue. L'algorithme parcourt le tableau du début à la fin et compare l'élément à l'entier indiqué par l'utilisateur. Il s'arrête lorsqu'il est trouvé. Remarquez que la faiblesse de cette algorithme provient du fait qu'il fonctionne même quand le tableau n'est pas trié, il n'exploite donc pas cet avantage trop important pour être négligé.
L'algorithme suivant fonctionne mais à le défaut de continuer à parcourir le tableau même quand l'élément a été trouvé.

### Solution attendue

Voici enfin la solution attendue. Vous étiez peut-être arrivé à cette déduction seul ou en consultant l'aide mais vous avez compris que ce problème s'apparente à celui de la recherche dans un dictionnaire. En effet, on cherche un mot dans un ensemble de mots inconnus mais triés.
Si vous avez déjà cherché un mot dans le dictionnaire, vous avez certainement remarqué que lire le premier, regarder si c'est celui qu'on cherche, puis passer au suivant, et ainsi de suite n'est pas la solution la plus efficace...
La solution est donc l'algorithme de recherche dichotomique (du grec « dichotomie » : « couper en deux »). On ouvre le dictionnaire au milieu et un prend un mot au hasard, si le mot qu'on cherche est avant, recommence avec la première moitié du dictionnaire, s'il est après, avec la deuxième moitié. Dans la bonne moitié on prend un mot au milieu, etc...

#### Traduction en Pascal

Voilà sa traduction en Pascal, le tableau étant rempli à la main :
# Algorithmique impérative/Procédures et fonctions
## Première approche

Les procédures et les fonctions sont des sous-programmes qui permettent une réutilisation du code plus facile. En effet, si par exemple on code l'algorithme de calcul de T.V.A. et qu'on l'utilise à divers endroits du programme, plutôt que de recopier le code à chaque fois, il est préférable de créer un sous-programme de calcul. La recopie a toutefois les inconvénients suivants :
* La recopie du code s'accompagne souvent d'un changement des noms de variables, voire de la valeur de certains paramètres,
* Chaque copie du code augmente la taille des programmes source et compilé,
* La maintenance est plus difficile : s'il faut modifier l'algorithme, il faut modifier toutes les copies sans en oublier une seule.
L'utilisation d'un sous-programme évite tous ces problèmes :
* Les sous-programmes utilisent des variables locales et des paramètres formels, c'est-à-dire qu'on leur passe les valeurs (voire les variables, par adresse ou référence) qu'ils doivent utiliser.
* L'algorithme n'est codé qu'une seule fois, ce qui n'augmente pas la taille du programme.
* La maintenance est facilitée par le point précédent : s'il faut modifier l'algorithme, la modification n'a lieu qu'en un seul endroit.

## Procédure et fonction : quelle différence ?

Une procédure traite les informations qu'on lui passe, mais ne retourne, en général, aucun résultat. En général, cette procédure a un effet de bord.
Une fonction traite les informations qu'on lui passe, et retourne un résultat. Si la fonction n'a aucun effet de bord, on peut la comparer à une fonction mathématique.

### Effet de bord

    un sous-programme avec effet de bord modifie l'état global de l'application. En général, appeler deux fois un même sous-programme avec effet de bord en lui passant les mêmes paramètres ne produit pas le même résultat.
# Algorithmique impérative/Ressources
## Bibliographie

* (français) Daniel Canevet - L'algorithmique et le Pascal - Collection Informatique et communication, Éditions Paris : Delagrave - 1992 - 95 pages - (ISBN 2-206-00698-7)
* (français) Claude Delannoy - Initiation à la programmation - Éditions Eyrolles - 1997 - 192 pages - (ISBN 2-212-08983-X)

## Wikilivres

* Programmation Pascal

## Sur la Wikiversité

* Introduction générale à la programmation. Certaines notions exposées dans ce module dépassent le cadre du présent ouvrage.
* Algorithmique
* Langage Pascal

## Sur Wikipédia

* le langage Pascal

## Liens externes

* Le projet Euler propose une collection de problèmes mathématiques à résoudre à l'aide de l'informatique et notamment de l'algorithmique impérative. Attention, il s'agit là de problèmes bien plus difficiles que ceux qui ont été abordés ici. Le site étant de surcroît en anglais, il est donc à réserver aux courageux.
* Pascal sur developpez.com
* France-IOI : site francophone sur les Olympiades Internationales d'Informatique
# Algorithmique impérative/Menu

Ce problème traite de la création d'une interface graphique rudimentaire dans un environnement textuel (un terminal).

## Problématique

Nous supposons que nous avons déclaré 3 procédures dont les identifiants sont les suivants (peu nous importe ce qu'elles font : le sujet n'est pas ici)
* Procedure_A
* Procedure_B
* Procedure_C
Vous devez créer le programme principal permettant à l'utilisateur de choisir laquelle des trois il veut lancer. Le programme doit avoir les fonctionnalités suivantes :
* Une fois que la procédure choisie par l'utilisateur a été exécutée, le menu est de nouveau proposé.
* L'utilisateur doit pouvoir quitter le programme depuis le menu.
* Le programme doit expliquer à l'utilisateur comment utiliser le programme.
* (optionnel) on suppose que l'utilisateur est distrait et qu'il peut ne pas donner une bonne réponse. Gérez ce cas.

## Première analyse

Voici quelques idées directrices formant une première analyse de la problématique. Chacun de ces points seront analysés dans la section suivante.
* ...permettant à l'utilisateur de choisir... : l'utilisateur doit intervenir. Il va falloir faire intervenir un Lire afin qu'il puisse nous donner son choix.
* ...laquelle des trois... :
* ...le menu est de nouveau proposé : il s'agit d'une répétition.
* ...quitter le programme depuis le menu : une autre possibilité. En fait, l'utilisateur aura le choix entre quatre possibilités : A, B, C ou quitter.
* ...expliquer à l'utilisateur comment utiliser le programme' : on affichera les instructions avec Afficher.

## Analyse approfondie

Voici les réflexions qu'il faut mener sur les questions clés du problèmes.

### Gérer le choix de l'utilisateur

Nous allons représenter le choix de l'utilisateur par un entier. Finalement, l'utilisateur à quatre possibilités pour le menu (entre parenthèse : l'entier que nous allons y associer) :
* Exécuter la procédure A (1)
* Exécuter la procédure B (2)
* Exécuter la procédure C (3)
* Quitter (0)
Nous allons donc lui poser la question "Que voulez vous faire ?", il répondra par un entier en fonction duquel on fera un SÉLECTIONNER.
(optionnel) l'utilisation d'une chaîne de caractères nous permettra de contrôler l'erreur si l'utilisateur entre autre chose que 1,2,3 ou 0. Si on utilise un entier et que l'utilisateur entre "truc" il va y avoir un problème (sur une machine, le programme se bloquera...).

### L'utilisateur retrouve le menu

Pour que l'utilisateur retombe sur le menu, il va falloir utiliser une structure itérative, mais laquelle ? Petite réflexion :
* À priori, on ne sait pas combien de fois l'utilisateur va exécuter une procédure. Cela exclut le POUR.
* REPETER ou TANTQUE ? Le menu va s'afficher au moins une fois ce qui nous laisse penser qu'un REPETER est plus approprié. De plus la situation est bien décrite par la phrase "Afficher le menu jusqu'à ce qu'il choisisse de quitter", ce qui conforme notre choix. Nous utiliserons donc un REPETER.
# Intervention par le loisir

L'intervention par le loisir se veut un recueil dédié aux travailleurs en loisir. Par les fiches d'activités, vous comprendrez bien vite qu'il se cache au-delà du simple plaisir de s'amuser un sens beaucoup plus profond au rôle d'animateur.

# Les projets similaires

En naviguant sur WikiLivres, vous constaterez qu'il existe des projets similaires tels que :
* La boîte à jeux
* Activités pour enfants
Bien que leurs fiches soient intéressantes, ces dernières sont beaucoup plus applicables dans un contexte familial. Quant à ce projet, il s'adresse à des travailleurs qui interviennent par le loisir dans le but de modifier ou de conserver des comportements ou des habitudes de vie.

# Les différentes catégories

* Par clientèle
** Centre d'enfance (enfant entre 0 et 4 ans)
** Animation jeunesse (enfant entre 5 et et 11 ans)
** Animation jeunes ados (enfant entre 12 et 14 ans)
** Animation ados (enfant entre 15 et 17 ans)
** Animation jeunes adulte (entre 18 et 25 ans)
** Animation adulte (25 à 49 ans)
** Animation adulte âgée (50 à 70 ans)
** Animation Quatrième âge (71 à ... ans)
* Activité adapté
** Troubles de la communication
*** Déficience auditive
*** Troubles de langage et de parole
*** Disphasie
** Déficience physique
*** L'ataxie de Friedreich
*** La dystrophie musculaire
*** La paralysie cérébrale
*** La paraplégie et la tétraplégie
** Déficience visuelle
** Santé mentale
** Personnes alités
*** Personnes vivant de démence
# Interfaces graphiques en C++ avec wxWidget

* IHM en C++ avec wxWidget
* Interfaces graphiques en C++ avec wxWidget
* Sommaire
* Introduction
* Un premier exemple
* Intercepter des événements
* Les boîtes de dialogue
* Liens
* Programmation C++
* Exercices en langage C++
* Modifier ce modèle
* Interfaces graphiques en C++ avec wxWidget
* Un livre appartenant à la série Programmation
* et à l'étagère Informatique de Wikilivres.
* Introduction
* Un premier exemple
* Intercepter des événements
* Les boîtes de dialogue
* Modifier
# Interface graphique
## Bibliothèques et API

* C++
** Interfaces graphiques en C++ avec wxWidget
** Programmation Qt
* GTK
** Programmation GTK2 en C
** Programmation GTK2 en Pascal
* Java
** AWT
** Swing
** JavaFX
* Python
** Programmation Python/Tkinter
** PyQt
# Interfaces graphiques en C++ avec wxWidget/Sommaire

* Introduction
* Un premier exemple
* Intercepter des événements
* Les boîtes de dialogue
# Introduction

Wikilivres contient plusieurs livres et tous peuvent avoir un chapitre nommé « Introduction ».
Veuillez préfixer le titre de la page avec le titre du livre et la barre oblique (slash) :
en remplaçant TITRE_DU_LIVRE par le titre du livre.
# Interfaces graphiques en C++ avec wxWidget/Introduction

* IHM en C++ avec wxWidget
* Interfaces graphiques en C++ avec wxWidget
* Sommaire
* Introduction
* Un premier exemple
* Intercepter des événements
* Les boîtes de dialogue
* Liens
* Programmation C++
* Exercices en langage C++
* Modifier ce modèle

## Introduction

WxWidget est une bibliothèque permettant de développer des interfaces graphiques en C++ (il n'existe pas de bibliothèque standard en C++ pour écrire des interfaces homme-machines). De plus, c'est une bibliothèque libre (on peut l'utiliser et la télécharger gratuitement, de plus son code source est disponible pour tout le monde) et multi-plateforme ; elle peut s'utiliser pour Windows, OS X, Linux et Unix (que ce soit en 32 ou en 64 bit), ainsi que pour des applications de mobiles avec Windows Mobile, IPhone SDK et GTK embarqué.
Le site internet officiel de WxWidget est "http://www.wxwidgets.org/"
# Japonais/Méthode/Hiragana

* Cette page sert d'introduction au cours. Il ne contient aucun kana ou kanji et ne présente que des points de vocabulaire et de grammaire basiques.
L'apprentissage du syllabaire Hiragana est un passage essentiel dans l'apprentissage du Japonais. Il est donc recommandé de suivre ce cours attentivement, dès le début de votre apprentissage. Néanmoins, une connaissance des Hiragana n'est pas nécessaire dans toutes les leçons proposées dans ce Wikilivre. En effet, une note présente dans le cours vous montrera quelles leçons nécessitent une connaissance des hiraganas. Prendre une feuille de papier et écrire les hiraganas en les prononçant à voix haute est une excellente façon de les apprendre en un temps minimal. Des feuilles quadrillées vous aideront à garder vos formes correctes et constantes.
Les leçons sont d'une durée approximative de 30 minutes. Il est recommandé de les suivre dans l'ordre, étant donné qu'elles se basent sur les acquis des leçons précédentes.

## Maîtriser le Hiragana

* Introduction
* Leçon 1 : 15 hiraganas.
* Leçon 2 : 15 hiraganas.
* Leçon 3 : 16 hiraganas.
* Leçon 4 : Le signe de voisement.
* Leçon 5 : Le signe de dévoisement.
* Leçon 6 : Les doubles consonnes.
* Leçon 7 : Les voyelles longues.
* Leçon 8 : Les semi-voyelles (1/2).
* Leçon 9 : Les semi-voyelles (2/2).

## Conclusion

Vous devriez maintenant pouvoir lire et écrire les différents hiragana. Afin de vous entrainer, voici un petit poème (Iroha-uta "Le Chant des couleurs", fin du 10e siècle) utilisant chacun des caractères du syllabaire.
いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせす
Le plaisir est enivrant, mais s'évanouit. Ici-bas, personne ne demeure. Aujourd'hui franchissant les cimes de l'illusion, Il n'est plus ni de rêves creux, ni d'ivresse.
Veuillez noter que cet exercice utilise les hiragana ゑ (we) et ゐ (wi) qui ne sont plus en utilisation. Il n'est donc pas nécessaire de savoir les reconnaitre.
L'hiragana ん est le seul caractère du syllabaire qui n'est pas présent dans ce poème. La raison est que ce caractère a été introduit bien après que ce poème a été écrit. Néanmoins, ん peut être ajouté à la fin du poème pour l'apprentissage de la calligraphie et/ou du syllabaire.
# Japonais/Méthode/Hiragana/Introduction

* Cette page sert d'introduction au cours. Il ne contient aucun kana ou kanji et ne présente que des points de vocabulaire et de grammaire basiques.
Durant ces 6 leçons, vous allez apprendre à écrire et à lire chacun des 46 caractères qui composent le syllabaire Hiragana.

## Conseils

Voici quelque conseils qui vous seront utiles pour suivre ce cours:
* Il n'est pas nécessaire, pour une personne vivant en dehors du Japon, de savoir écrire parfaitement les hiraganas. Néanmoins, une bonne connaissance de l'ordre des traits facilite de manière notable la mémorisation des kanjis.
* Il est recommandé de retenir, en plus de la prononciation et de l'ordre des traits, l'ordre dans lequel les hiraganas apparaissent dans le syllabaire afin d'être capable de retrouver simplement des mots dans le dictionnaire.
* Ne tentez pas d'apprendre trop de caractères en un jour. Si vous en apprenez 5 par jour, vous pouvez apprendre les hiraganas en une dizaine de jours. Proportionnellement, si vous en mémorisez une petite dizaine par jour, vous pouvez retenir le syllabaire en 5 jours.
* Ne tentez pas de mémoriser les diphtongues. Elles sont bien plus simples à lire en utilisant les caractères du syllabaire de base.
# Japonais/Modèles

Voici la liste des modèles utilisés dans le wikilivre sur l'enseignement du japonais.
* Modèle:tableau_japonais
* Modèle:glossaires_de_Japonais
* Modèle:grammaire_Japonaise
* Modèle:méthode_de_Japonais
* Modèle:Niveau débutant
* Modèle:Niveau élémentaire
* Modèle:Niveau intermédiaire
* Modèle:Niveau avancé
* Modèle:furigana
# Japonais/Méthode/Katakana

* Cette page sert d'introduction au cours. Il ne contient aucun kana ou kanji et ne présente que des points de vocabulaire et de grammaire basiques.
Fichier:Panneau attention 20.png Une connaissance des Hiraganas est nécessaire si vous voulez suivre les leçons katakanas.
Les katakanas peuvent paraître plus difficiles à apprendre et à distinguer que les hiraganas, mais cela est souvent simplement dû au manque de temps consacré à leur apprentissage. Les katakanas, comme les hiraganas sont un système d'écriture phonétique permettant de retranscrire à l'écrit les sons de la langue japonaise. Il y a donc 46 syllabes, comme pour les hiraganas, et les mêmes règles d'agencements.
L'avantage des katakanas, c'est que vous pouvez les mettre en application tout de suite : pour transcrire votre nom de famille, lire les noms de certains produits quotidiens ou les onomatopées dans les mangas.

## Maîtriser le Katakana

* Leçon 1 : 15 katakanas.
* Leçon 2 : 15 katakanas.
* Leçon 3 : 16 katakanas.
* Leçon 4 : Quelques trucs supplémentaires.
* Leçon 5 : Syllabaire étendu (1/2).
# Japonais/Plus de particules

Retour à la table des matières.

## に - ni - La particule à tout faire

* Introduction
* Base du japonais
* Particules
* Adjectifs
* Verbes
* Pronoms
* La grammaire point par point
* Verbe modal
* Suffixe modal
* Suffixes de politesse
* Mots de liaison
# Japonais/Présentation

* Japonais
* Apprentissage du Japonais
Ce Wikilivre est une introduction à l'ensemble de la langue japonaise. Vous y trouverez des glossaires, une méthode d'apprentissage de la langue et des points de grammaire détaillés.
* これは日本語の表示テストです。
# Japonais/Méthode
## Méthode

| Introduction |
| Débutant | 初心者 |
| Élémentaire | 初級レベル |
| Intermédiaire | 中級レベル |
| Avancé | 上級レベル |
| Exercices |
# Japonais/Participation
## Participation

* Ce wikilivre est encore en cours de rédaction. Vous pouvez suivre les modifications récentes.
* N'oubliez pas de lire les instructions de rédaction.
* Vous pouvez aussi voir la liste des modèles utilisés dans ce livre.
* Une page de discussion générale.
* Une to-do-list pour s'organiser.
# Courte présentation de Gambas

Gambas est un ensemble d'outils gratuits et libres permettant de créer par exemple des :
* applications de type console (des commandes dans le terminal)
* applications graphiques (des fenêtres avec les librairies Qt ou GTK+)
* jeux (avec la librairie SDL)
* applications web tournant côté serveur sur Linux ou Unix (on peut faire un site)
Gambas existe depuis 2000.
Gambas est un langage de programmation orienté objet très proche du BASIC.
Gambas a un compilateur qui produit du bytecode comme Java.
Gambas a une machine virtuelle qui interprète le bytecode lors de l'exécution d'un programme.
Gambas est un environnement de développement (IDE) pensé pour produire rapidement des applications.
Gambas peut être utilisé pour faire des scripts.
Gambas est un logiciel libre diffusé sous la licence GNU GPL, développé principalement à Paris depuis 1999 par Benoît Minisini.
Fin 2016, la version majeure de Gambas est la 3.
Plus d'informations sur la page de Wikipedia
Allez jetez un coup d’œil sur le site officiel de Gambas !
=> Et inscrivez-vous sur le site de la communauté Gambas ! => N'oubliez-pas de vous présenter !
=> Et faites un tour sur ce site. Vous y trouverez des informations utiles et croustillantes.
# Session

Lorsque vous allez à un rendez-vous, vous discutez avec une personne le temps d'un entretien.
Par analogie, la session est la discussion entre deux machines : la vôtre et le serveur (par exemple celui de Wikipédia !
On peut dire que la session commence lorsqu'on interroge la première fois le site et elle se termine lorsque vous fermez votre navigateur ou après un délai d'inactivité.
Ci-dessous, voici un concept important :
Gambas a un objet statique Session qui utilise un cookie pour retrouver les informations de l'utilisateur entre deux requêtes.
Lien ici : https://fr.wikipedia.org/wiki/Session_(informatique)