si paraze j'avais compris pour le topic, je repondais à sa question sur les exo
Bon, on arrête la discussion ici, je ne parlais pas des exercices du tutoriel, mais des exercices de ce topic. Ou alors j'ai sauté un épisode. On est à la limite du HS, merci.
Dans le but d'augmenter la visibilité des règles et de la FAQ, j'ai enlevé ce sujet des post-its.
Cependant, il y a un (gros !) lien qui permet de le retrouver dans le post-it de bienvenue pour les nouveaux membres. Je vous conseille d'ajouter ce post à vos bookmarks. Je pense qu'il sera suffisamment vivant pour rester une grande partie du temps en première page.
Bonne continuation !
GuilOooo
J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
C'est dommage de ne plus l avoir en post it il finira a mon humble avis aux oubliettes. Même si pas beaucoup de monde poste leur solution les débutants comme moi jette un œil...... Alors les nouveaux?
Je pense qu'un topic fermé où seul les modos (et ceux ayant un grade plus élevé) posterai dedans pour mettre les exos (à peut près comme dans la FAC C = que l'info' importante, pas de messages inutiles) aurait bien sa place dans les post-it.
Et ce topic servirai d'échange, de lieu de discutions autour des exos présentés.
Ne vous inquiétez pas pour autant. J'ai bien l'intention de maintenir ce topic en vie et régulièrement en première page.
Je bûche actuellement pour écrire une série de 52 exercices : 26 en SDL et 26 en console. C'est ambitieux, je verrai jusqu'où je tiendrai. Une fois que je les aurai, je serai donc en mesure d'envoyer un exercice par semaine aux organisateurs de ce topic.
Par contre, je ne compte pas fournir de solutions. Il y aura donc toujours une discussion à avoir.
J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
Il y a eu un topic exo SDL il y a quelques années... avec 3 exos (assez marrant mais extrèmement simple et rapide à réaliser).
J'espère vraiment que les exos SDL ne seront pas tous aussi simple que ceux présentés il y a un bon bout de temps.
Tu comptes faire des exercices de quel genre (je ne parle pas de la SDL) ? Plutôt orientés algo ou "langage" (genre les trucs de Mateo), voire un peu type prog' système ?
Je vais d'équilibrer entre « points du langage » et « algo ». Par contre, je vais éviter la programmation système, car ça risque de poser problèmes entre linuxiens et windowsiens. Enfin, pour la difficulté, je vise des trucs assez ouverts, avec un exo de base costaud, mais abordable, et des améliorations possibles « vers l'infiniiiii » comme tu dis.
Si vous avez des idées d'exos, n'hésitez surtout pas à les mentionner ici ou à me contacter. Votre aide ne sera sans doute pas de trop.
Le premier en date est de faire un SGBD ultra-minimaliste, qui stocke les données dans des fichiers textes. On doit pouvoir faire SELECT et INSERT INTO, avec des conditions WHERE de la forme {colonne}{opérateur}{colonne} et une syntaxe plus rigide que SQL.
J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
Je bûche actuellement pour écrire une série de 52 exercices : 26 en SDL et 26 en console. C'est ambitieux, je verrai jusqu'où je tiendrai. Une fois que je les aurai, je serai donc en mesure d'envoyer un exercice par semaine aux organisateurs de ce topic.
Chapeau pour l'initiative Et après les 52 exercices, il y aura quoi?
Citation : GuilOooo
Si vous avez des idées d'exos, n'hésitez surtout pas à les mentionner ici ou à me contacter. Votre aide ne sera sans doute pas de trop.
J'avais pensé il y a pas longtemps à un exercice consistant à reproduire un éditeur de texte en ligne de commande du type ed. L'idée est de faire travailler les listes chaînées qui sont la structure principale de l'éditeur (chaque noeud représente une ligne de texte) ainsi que les fichiers. Histoire de ne pas faire trop compliqué, on se contenterait d'implémenter les commandes de bases: ajout/suppression de texte et enregistrement.
J'avais pensé il y a pas longtemps à un exercice consistant à reproduire un éditeur de texte en ligne de commande du type ed. L'idée est de faire travailler les listes chaînées qui sont la structure principale de l'éditeur (chaque noeud représente une ligne de texte) ainsi que les fichiers. Histoire de ne pas faire trop compliqué, on se contenterait d'implémenter les commandes de bases: ajout/suppression de texte et enregistrement.
Super, je note ça. J'ai tendance à faire des exercices trop difficiles, mais celui-ci a l'air bien. Merci !
EDIT : J'essaie de mettre un peu la liste en forme avant de vous la faire parvenir.
EDIT 2 : tenez. Je ne sais absolument pas dans quelle mesure ces exercices sont réalisables, adaptés au public du SdZ, ou quoi. Les énoncés seront naturellement très détaillés, afin de guider les gens pour les exercices les plus difficiles.
Console pure, aspect « algorithmiques »
Pour tous les algorithmes, une petite mise en situation sera écrite.
Facile
Les exercices d'algo sont faciles lorsqu'il suffit d'implémenter un algorithme bien connu, trouvable sur wikipédia, pour les résoudre. Solver de sudoku
En console. Brute-force envisageable.
Solver de labyrinthe
Algorithme de Dijkstra ou A*.
Solveur de 2-SAT
Brute-force ou méthode classique (on ne demande pas un algo polynomial),
Mise en situation : un groupe de gens vont s'installer dans la nouvelle rue du village. Certains ne veulent pas être du même côté de la rue que d'autres...
Solveur du problème du voyageur de commerce
Petites instances, algo factoriel envisageable,
Mise en situation : le voyageur de commerce, pardi.
Recherche d'une sous-chaîne dans une chaîne
Algo rapide, probabiliste (Knuth-Morris-Prat ?),
Mise en situation : cherche un gène dans une séquence ADN.
Problème du flot maximal
N'importe quel algo,
Mise en situation : on veut transférer des données d'un point A à un point B sur le réseau, comment maximiser le débit ?
Filtre de bloom
Pour des chaînes de caractères,
Les fonctions de hachage sont fournies, sauf quelques unes,
Mise en situation : vérificateur orthographique.
Problème du trajet à l'aéroport
Voir le livre « Learn yourself some Haskell »
Projet complet
Ceci vise à faire implémenter un algorithme en trois étapes. Il faudra parfois chercher des points d'algorithmique par soi-même. Analyseur d'expressions mathématiques simples
Analyseur qui parse une expression comprenant des nombres, + \- / * ^ et « x », une variable,
La priorité des opérateurs doit être la bonne,
Pour aller plus loin : gérer les parenthèses,
Calcule ensuite le résultat (si on donne une valeur pour la variable x),
Il est cependant important (pour d'autres exercices) de produire un arbre de syntaxe.
Structure pour gérer les nombres arbitrairement grands et précis
Code une structure de données pour gérer tous les nombres, quelque soit le nombre de chiffres,
Gère les opérations + \- / * et ^,
Permet de convertir une chaîne en nombre et un nombre en chaîne,
Utilise l'analyseur précédent pour faire des calculs précis.
Évaluateur de polynômes
Grâce aux deux entrées précédentes, implémenter l'algorithme randomisé disant si un polynôme est nul ou non.
Simulateur de canon
L'utilisateur entre l'angle avec le sol formé par le canon, l'accelération initiale, et la masse du boulet,
le programme répond à combien de mètres le boulet est tombé.
Analyseur d'unités
Modifier l'analyseur d'expressions pour qu'il comprenne les valeurs avec unités, du genre 30km,
Faire un programme qui donne l'unité totale d'une expression, si elle existe.
Il manque une idée dans cette section.
Console pure, applications pratiques
Facile
Les exos « facile » sont accessibles à ceux en cours de lecture de la partie 2 du cours, pour pratiquer. Les notions allant au-delà du cours seront rappelées. Chronomètre
L'utilisateur appuie sur « entrée » pour démarrer le chrono,
Il appuie à nouveau pour arrêter,
Grâce à time.h, on affiche le temps écoulé le plus précisément posssible,
Pour aller plus loin : gérer les tours, afficher le chrono en temps réel, etc.
Les fonctions de time.h seront introduites dans l'énoncé. Un test de vitesse
Demande à l'utilisateur de recopier une phrase dans la console,
Mesure le temps mis pour recopier,
Calcule des statistiques sur la vitesse de frappe,
les phrases de test sont stockées dans un fichier.
Un crypteur de fichier
Lit l'entrée standard, écrit une version cryptée sur la sortie standard,
Plusieurs algos possibles : Rot13 pour les débutants, DES pour les cadors,
Possibilité d'écrire dans un fichier.
Un logiciel d'envoi de mails (protocole SMTP)
Demande un expéditeur, un destinataire, un objet et un contenu dans la console,
envoie la requête à la machine indiquée après le '@' dans l'adresse de l'expéditeur (pas de MX ni rien).
Cet exo est facile car la partie « réseau » sera guidée. On pourra même imaginer simplement écrire la bonne requête sur la sortie standard.
Moyen
Les exercices « moyen » sont destinés à ceux qui ont fini la partie 2 du cours, et qui cherchent à pratiquer pour progresser et aller plus loin. Calculateur de masse molaire
Étant donnée la formule brute d'une molécule et un fichier comprenant la masse molaire de chaque élément, calcule la masse molaire de la molécule.
Visualisateur de fichier maildir
Montre un mail (encodés comme dans un mbox ou un mdir) sous une forme jolie,
Vire les en-têtes et décode les séquences d'échappement, style =E42,
Pour aller plus loin : parse certaines en-têtes (expéditeur, objet, etc).
(Dé)codeur de Base64
Lit l'entrée standard,
écrit l'équivalent (dé)codé en base64 sur la sortie standard.
La commande Unix « wc »
Lit l'entrée standard.
Compte le nombre de caractères, de mots & de lignes qui passent.
Affiche le résultat sur la sortie standard.
Un mini-cowsay
Lit un fichier texte dans lequel un dessin en ascii-art est stocké,
Demande à l'utilisateur de taper une phrase dans la console,
Affiche la phrase, dans une bulle, au dessus du dessin en ascii-art,
Pour aller plus loin : centrer le dessin par rapport à la bulle.
Commande Unix « units »
Demande à l'utilisateur de rentrer un nombre et une unité,
Demande ensuite de rentrer une autre unité,
Donne la valeur dans la nouvelle unité si pertinent,
Les échelles de conversion sont stockées dans un fichier,
Échelles affines seulement (ax+b).
Difficile
Les exercices difficiles sont destinés à ceux qui veulent aller plus vraiment loin. Ils ressemblent plus à des projets complets qu'à de petits exercices. Recoder printf et scanf
Niveau basique : utilisation d'un tableau de pointeurs, le format est du genre "%d", "%f" ou "%s",
Amélioration : gérer les formatteurs multiples, séparés par une chaîne,
Amélioration : faire une fonction variadric,
Recoder l'éditeur ed
Seulement les commandes ouvrir un fichier, enregistrer, ajouter/supprimer une ligne.
Un mini SGBD
Stockage dans des fichiers texte, un fichier/table, une ligne/entrée
Un seul type de données : chaîne (suite de caractères alphanumériques, pas de ponctuation)
Requêtes SELECT {col} FROM {table} WHERE {col}{opérateur}{col}, INSERT INTO {table} VALUES {val},{val},... et ALTER TABLE {table} SET {col}={val} WHERE {col}{opérateur}{col},
Syntaxe ultra-simplifiée et très rigide par rapport à SQL,
Requêtes de 200 caractères max (pour simplifier les entrées/sorties).
Un mini proxy HTTP
Ignore tous les en-têtes qui ne sont pas indispensables,
Requête réponse ultra-simplifiée,
Pas de requêtes de plus de 2000 caractères.
Un nano-serveur DNS
Correspondances IP <-> nom stockées dans un fichier
Aucune interrogation d'un autre serveur.
Testeur de Regex
Lit une regex et une phrase sur l'entrée standard,
Teste si la phrase match la regex,
Syntaxe regex ultra-simplifiée.
SDL
Facile
Les exercices faciles permettent de pratiquer les différentes fonctions de base de la SDL, de SDL_Image et SDL_TTF. Il n'y a pas - ou très peu - de gestion des événements à faire. Une jolie animation
L'animation est encore à décider,
J'imaginais un truc dans le style « visualisation spectrale » ou « écran de veille »,
S'inspirer du post de Knarf2 sur CodArt ?
Un quizz graphique
Les questions & réponses sont lues dans un fichier,
On affiche la question et les réponses,
l'utilisateur doit cliquer sur la bonne réponse le plus vite possible,
attribution de points en fonction de la rapidité,
peut être entièrement statique (facile) ou animé (moyen) avec un chrono, etc.
Visualisateur de polices
Montre tous les caractères affichables avec une police passée en argument de ligne de commande.
Montre à aïguilles
Affiche l'heure système sur une montre à aiguilles,
Utiliser des images avec transparence + SDL_Gfx pour la rotation
Ou bien tracer les aiguilles pixel par pixel.
Planisphère
Afficher un planisphère (fourni en .png),
Indiquer dessus, en fonction de l'heure système, les zones du globe où il fait jour,
Idée : éclaircir la zone de jour et assombrir la zone de nuit (travail pixe/pixel),
Se baser sur l'heure du système.
Jeu de l'assome-rat (wak-a-rat)
Afficher un (ou plusieurs) rats aléatoirement sur l'écran,
Le joueur doit cliquer dessus le plus vite possible,
Plus il est rapide, plus il gagne de points.
Jeu 1... 2... 3... Soleil !
Le joueur clique sur la case de départ (à gauche de l'écran) pour commencer,
Il doit alors cliquer sur la case de fin (à droite de l'écran) pour gagner,
Mais interdiction de bouger la souris quand le loup se retourne !
Pour aller plus loin : mode gaucher (inverser gauche/droite dans le jeu au choix).
Balle rebondissantes
Afficher des balles rebondissantes, entre elles et sur le bord de l'écran,
Coordonnées et impulsions initiales aléatoires.
Moyen
Jeu M. Patate
On peut choisir un fond parmi plusieurs,
Ensuite, le fond est dessiné, et l'utilisateur peut placer des éléments dessus (œil, oreille, nez),
Idée : faire de ce programme un éditeur de smileys.
Équivalent de Paint
Outils pour tracer une ligne à main levée, tracer une ligne droite, gommer,
Sélection parmi une liste de couleurs prédéfinie,
Pour aller plus loin : outils avancés : certes, spray, etc.
Jeu de hasard (black-jack)
Un jeu de black-jack simple en SDL.
Possibilité de simplifier les règles ou enlever les animations au besoin.
Afficheur de dessins
Lit une description géométrique dans un fichier : « carré(0,0,14,28); cercle(0,4,5); ... »
Affiche la figure correspondante dans une fenêtre SDL,
Pour aller plus loin : gérer des formes plus compliquées,
Encore plus loin : faire un éditeur, en lien avec le paint.
Afficheur d'avatars du SdZ
L'utilisateur entre un pseudo,
Le programme va chercher l'avatar du membre avec une requête HTTP,
Puis il affiche le résultat,
Utilisation de fichiers temporaires (tmpname etc),
Utilisation éventuelle d'une bibliothèque pour la requête HTTP.
Affichage d'une fractale
On a l'embarras du choix.
Hash visuel
Faire programmer une fonction de hachage simple, dont le résultat soit une image et non une suite de bits.
Permettre à l'utilisateur de hacher un fichier et d'afficher le résultat à l'écran.
Éventuellement utiliser une vraie fonction de hachage, puis convertir le résultat en dessins.
Jeu de la vie
Touche espace pour lancer/arrêter la simulation,
Clic sur une case la [dés]-active,
Optionnel : pouvoir changer la vitesse de simulation (avec '+' et '-').
Difficile
Raycaster
Lit un plan stocké dans une image monochrome (noir=mur, blanc=passage),
Permettre à l'utilisateur de se ballader dans le monde ainsi défini, en 3D, avec une hauteur de mur constante,
Rendu effectué grâce à la technique du Raycasting (Doom, Duke Nukem 3D).
NB : à ne pas confondre avec le raytracing. Émulateur de terminal
Permet d'entrer une commande (SDL_TTF),
Exécute la commande grâce à system(),
Affiche le résultat de la commande dans la fenêtre,
Gère le scrolling,
Passer par une matrice de caractères avant le rendu.
Interface pour le solveur de labyrinthes
Permet à l'utilisateur de dessiner un labyrinthe 2D (tiles taille constante),
Appelle le solveur déjà codé pour trouver une solution.
Plotter
Trace la courbe d'une fonction dans une fenêtre SDL,
Possibilité de stocker les valeurs prises par la fonction dans un fichier,
En utilisant l'analyseur d'expressions, permettre de plot n'importe quel polynôme.
Il manque six idées pour la SDL
J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
Peut-être que mon post ne sert à rien et qu'il va être supprimé, mais je ne peux m'empêcher de fournir les remerciements les plus sincères à GuillOoo. Toutes ces idées d'exercices, ça a l'air génial ! Franchement, chapeau bas, parce que sinon le topic tombait en ruine...
Édit : juste une petite critique à propos de l'émulation de terminal. D'une part, on entre plus ou moins dans la prog système, ce qui engrange conflits entre linuxiens et windowsiens... D'autre part, tu parles de system. Pour Windows , ok, il suffit juste de s'en sortir avec de la compilation conditionnelle. Mais pour Linux, system est une fonction qui comporte de grosses failles de sécurité..
Ce ne sont que des idées en l'air. Je pense qu'au moins la moitié des exercices que tu vois là seront irréalisables, trop compliqués, pas assez intéressants...
Quant à system, le but n'est pas de faire un programme ultra-sécurisé. Je vais au plus simple -- on pourrait faire de la compilation conditionnelle, utiliser fork & exec, mais ça deviendrait franchement lourd. L'essentiel sera de bien expliquer dans l'énoncé qu'il s'agit d'un jouet, et pas d'un programme qu'on utiliserait dans la vraie vie.
J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
Personnellement, je trouve que les idées sont intéressantes. C'est vrai que certains exercices sont compliqués, et le titre du sujet étant "Exercices pour débutants en c"...
Ce qui m'embête avec system, c'est que j'explique (là : http://www.siteduzero.com/tutoriel-3-385546-executer-un-programme.html#ss_part_3) qu'il ne faut jamais l'utiliser, et après on leur demande de l'utiliser dans les exos...
Au passage, c'était mon idée de Tp pour le tuto sur la prog système !
Dans le pire des cas, nous pouvons recoder « notre » fonction system, et la distribuer dans l'énoncé, en disant d'utiliser celle-ci plutôt que celle de la lib standard. Après, on s'arrange à coups de ifdef et de prog système louche.
Oui, j'ai grapillé des idées un peu partout. Merci à toi !
J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
Dans le pire des cas, nous pouvons recoder « notre » fonction system, et la distribuer dans l'énoncé, en disant d'utiliser celle-ci plutôt que celle de la lib standard. Après, on s'arrange à coups de ifdef et de prog système louche.
Ce qui m'embête avec system, c'est que j'explique (là : http://www.siteduzero.com/tutoriel-3-385546-executer-un-programme.html#ss_part_3) qu'il ne faut jamais l'utiliser, et après on leur demande de l'utiliser dans les exos...
Il ne faut pas diaboliser cette fonction non plus, elle est potentiellement dangereuse si le programme est exécuté avec les privilèges d'administration. Pour un exercice du type recoder un shell de manière simple, elle suffit amplement.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.