Journal Des idées de programme C

Posté par  .
Étiquettes : aucune
0
4
août
2003
Je suis en train d'apprendre le C. J'aimerais bien faire un ti programme, mais je n'ai aucune idée de quoi faire donc je fait appel à votre imagination.
Pour info je fais du C depuis un mois donc pas un truc trop dur ni trop simple non plus (il faut qu'il y ait un petit défit). Mes connaissances en C :

- les pointeurs
- les tableaux à x dimensions
- malloc(), realloc()
- fonctions sur les chaines de caracteres (strlen, fgets ....)
- interface en GTK+1.2 (bah oui à l'ecole ils n'ont pas le 2 donc autant aprendre celui dont je me servirai )

Voila c'est a peu pres tout.

Sinon, mon projet pour le mois de septembre : ecrire un ti shell unix avec les différentes fonctions et tout... (une fois que j'aurais vu les listes chainés etpi 2-63 autres truc). D'apres un copain qui l'a fait c'est pas si compliqué et hyper instructif donc c'est ce qui me motive, mais je n'ai pas encore le niveau.

Merci de m'avoir lu et peut etre de m'avoir répondu.

PS : Si en plus le programme à un interet quelconque, ca serait encore mieux
  • # Re: Des idées de programme C

    Posté par  . Évalué à 2.

    Faire un shell, c'est rapide
    Larry Wall : page 161 du Camel Book :
    perl -e'while (<>) { eval; print $@; }'
    • [^] # Re: Des idées de programme C

      Posté par  . Évalué à 0.

      Par shell je sous entendait (bon c'est vrai c'etait pas clair) reecriture de ls, cp, mv, completion apres appuis sur tab ...
      • [^] # Re: Des idées de programme C

        Posté par  . Évalué à 1.

        ls, cp et mv ne sont pas integre au shell !

        On a eu un projet que j'ai trouve interessant : un correcteur d'orthographe c'est pas complique et tu fais le tour du C :)
        • [^] # Re: Des idées de programme C

          Posté par  . Évalué à 1.

          Oui je sais mais par shell je voulais re shell + commande auxquelles il fait appel.
          Sinon l'idée du correcteur orthographique est pas mauvaise, mais leprobleme (parce qu'il y en a un) c'est que je suis dyslexique (enfin un peu) et tres mauvais en ortho, donc je pense que ca serait pas terrible ...
          • [^] # Re: Des idées de programme C

            Posté par  . Évalué à 3.

            Non pas besoin d'etre une star en orthographe !

            Tu recuperes une liste de tous les mots (ce se trouve sur le net), tu parcours cette liste, et tu crees un arbre avec les lettres, de sorte a regrouper part prefixe :

            Ex :
            Telepherique
            Telephone
            Television

            T -> E -> L -> E -> P -> H -> E -> R -> I ...
            ------------------------------------O -> N -> E
            -----------------------V -> I -> S ->I ....

            Ensuite pour voir si un mot est correcte, il suffit de parcourir l'arbre :
            Telegraphe (pas dans l'arbre, donc il existe pas !)

            T : ok
            E : ok
            L : ok
            E : ok
            G : pas ok, il faut soit un P soit un V !

            Le fait d'avior un arbre permet d'aller tres vite.

            J'espere que c'est clair, un schemas serait plus adapte.
          • [^] # Re: Des idées de programme C

            Posté par  . Évalué à 1.

            euh ben les commandes auxquelles il fait appel ca dépend de ce que tape l'utilisateur :)


            --
            le petit chieur 2000
      • [^] # Re: Des idées de programme C

        Posté par  . Évalué à 1.

        Ouais, et alors ? Ca marche avec le shell de Larry Wall !

        perl -e'while (<>) { eval; print $@; } '
        system "touch a"
        rename "a","b"
        exec "ls"

        1_simple.c 5_entry.c b
        open(I,"1_simple.c") ; while (<I>) { print ; if ($.>10) { break;} }
        #include <gtk/gtk.h>

        int main (int argc, char *argv[])
        {
        GtkWidget *window;

        gtk_init (&argc, &argv);

        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_widget_show (window);

        gtk_main ();

        return 0;
        }


        Plus sérieusement faire un shell, ce n'est pas réécrire des commandes,
        c'est découper ta ligne en mots , les regrouper en instructions puis en pipes, ensuite c'est des coups de fork() && exec ()
        Puis on modifie la table des descripteurs de fichiers pour que les pipe marchent.
        Tu peux utiliser glib pour avoir un type liste chaîné tout près,
        et la bibliothèque Gnu ReadLine | TermLine je ne sais plus pour avoir
        une gestion sympa de l'historique ( Flèches, Ctrl-A, Ctrl-E, Ctrl-R, Ctrl-K )

        La complétion avec Tab, je n'ai pas géré ça quand j'ai fait mon projet, mais c'est une bonne idée.

        C'est vrai que c'est très instructif.
      • [^] # Re: Des idées de programme C

        Posté par  (site web personnel, Mastodon) . Évalué à 1.

        les commandes ls, cp, mv, ne font pas parties du shell....

        j'ai écris un petit shell en mini projet en cours cette année, il gérait &&, &, <, >, >>, 2>, |, ||, * et ? dans le basename (merci fnmatch), le multipipe (n pipes), les jobs, changement de prompt...., il manquait pas grand choses pour les alias. J'avoue que c'était rudimentaire mais ca marchait bien dans l'ensemble mais pas trop eu le temps de m'attarder, je l'ai pondu en à peu près 35-40 heures réparties sur un long week-end (du vendredi soir au dimanche soir)...

        il fonctionnait grâce à un automate à ETATS, bien pratique pour ce genre de truc, un conseil : ne pas tenter le découpage de la ligne de commande pour en extraire des tâches... je m'y suis aventuré et c'est galère....

        J'avais regardé les sources de bash, et csh... j'ai pas tout compris....

        le fait est qu'il faut en autre maitriser le pipe, avoir compris dup, dup2, les descripteurs de fichiers, l'execution de processus (execvp).

        De plus, pour la complétion, je ne me suis pas embêter, j'utilisais readline et history de Readline....

        mais il y'a plein trucs à gérer, pour que ce soit fonctionnel car quand je le lançait, il héritait des variables d'environement du shell qui l'éxécutait (pour moi bash), j'avais même essayé de le mettre dans mon /etc/passwd mais impossible de se loguer, peut être que certaines variables d'envrironnement etait manquantes, mais pas trop eu le temps de chercher à l'époque...

        bon courage et c'est vrai que ce sera un bon projet d'initiation au C et à au fonctionnement interne des unices ....
        • [^] # Re: Des idées de programme C

          Posté par  . Évalué à 1.

          Je débute également en C et je dois avouer que je galère pas mal ! Vous n'auriez pas des bouts de code (ou du code en entier) d'un mini shell ? Voire d'un mini-mini shell ? Ca me permettrait de mieux en comprendre le principe (les grandes lignes surtout) et de pouvoir en développer un par moi-même ensuite. (je suis pas très à l'aise avec le langage C) Merci à vous. :)
          • [^] # Re: Des idées de programme C

            Posté par  . Évalué à 1.

            sash est un miniminiminishell, donc il gere pas grand chose, et il utilise les libs a outrance.... mais ca peut etre sympa pour commencer ;)
            ---> emerge sash ;)
  • # Re: Des idées de programme C

    Posté par  . Évalué à 1.

    Si tu peux faire un interface graphique au programme froggyhome ce qui serait excellent !

    http://www.barbier.net/frogd/fr/(...)

    Sachant qu'il ne lui manque plus que cette fonctionalitée.

    Et je ne suis pas sûr qu'il faille acheter le péripherique puisque les données sont enregistrées dans /usr/local/etc/frogd.log il me semble

    Voilà !
  • # L-systeme

    Posté par  . Évalué à 2.

    Le premier truc que j'ai fait (par moi-meme) en apprenant le C c'etait de tracer des fractales en mode texte; Mandelbrot bien sûr, mais bon algorithmiquement c'est zero, et des L-Systems. (enfin, "premier truc" en C, avant je faisais la meme chose en pascal... et en basic...)

    C'est un tracé fractal basé sur la modification répétée d'une chaine de texte à partir d'une chaine initiale et de regles de transformation; suivi, apres le nombre d'itérations voulues, de l'affichage lui-même. Tres efficace pour simuler des plantes. Tiens hop, un "I feel lucky" : http://mariefrance.hellot.free.fr/mfh/plantes.html(...)

    Oui, c'est tres "LOGO-attitude" :) Mais avec ça tu devrais justement utiliser pas mal de mallocs et de pointeurs, implementer une pile pour gérer les "[" et "]" des L-systems, et te poser la question: "recursif ou itératif ?" pour la conception des certains trucs. Et puis le résultat d'un machin graphique devrait être plus gratifiant (et quand ça marche pas, ça se voit tout de suite) :)

    Pour l'affichage, soit tu le fais en graphique, soit à la barbare en mode texte avec - | \ / + et X si l'angle de base du L-systeme le permet :)
    • [^] # Bot IRC

      Posté par  . Évalué à 1.

      Couc !

      Pour ma part, ce que j'ai fait en apprenant le C, c'est un bot irc. On trouve sans doute encore sur le net un squelette tres simple de bot (un petit fichier qui gere la connexion et l'envoi recpetion des chaines de message, si tu veux eviter de te pencher sur la partie reseau du programme).

      Apres les possiblites sont infinies, et au final tu maitrises bien le traitement de chaines :)

      J'avais pour ma part avoir ete tres fier de creer la possiblite de lancer un vote, tout le monde votait sur le channel, et suivant le resultat du vote, une personne se faisait bannir / kicker / priver de la parole sur le channel suivant le vote lancé.

      Luzerne, alias Bret, qui avait créer #avalon a une epoque

      PS : sinon tu trouves quantite de bot irc sur le net, qui font tout et plus :) Paske lire le code des autres c bon aussi pour apprendre a programmer.
  • # Re: Des idées de programme C

    Posté par  (site web personnel) . Évalué à 2.

    Tu peux te reprogrammer une bibliothèque de gestion de liste chainée, simple, double, circulante.
    Et puis après les arbres binaires. D'ailleurs, à ce propos il y a un joli exercice dans le Kernigan & Ritchie sur les B-Tree.
    sinon... table de hashage, etc... enfin toute les structures de donnée, avec un mois de C, c'est le plus marrant à faire.
    • [^] # Re: Des idées de programme C

      Posté par  . Évalué à 1.

      tu peux en effet faire de la compression/crypto de base ...
      representation d'image par un B-tree, compression decompression de texte (essayer de faire la cryptanalyse ...). Les exos du K&R ca va un moment, mais ca t'apprend pas vraiment a faire du design de code C propre, a construire des bibliotheques de maniere intelligente....

      ecrire un shell c'est essentiellement analyser la ligne de commande et rediriger les entrees sorties; apres c'est de l'exec/fork, mais c'est plus du systeme que tu as besoin de connaitre ...
  • # Re: Des idées de programme C

    Posté par  . Évalué à 3.

    Tu peux faire un clone de OpenOffice, mais plus rapide (si possible compatible avec Gnumeric et KWord)
  • # Re: Des idées de programme C

    Posté par  . Évalué à 1.

    Pour ton mini-shell (que j'ai eut a faire aussi ya pas longtemps), c'est pas si facile d'etudier la grammaire d'une commande. Je pense notamment aux redirections et aux pipes. Si tu veux faire un shell propre, je peux te conseiller de faire appel au couple Flex/Bison, qui sont respectivement un analyseur synthaxique et un anallyseur grammatical.

    C'est evidement un peu ardu a maitriser, surtout quand on débute, mais depuis que je les utilise, je ne peux plus m'en passer !!
  • # Re: Des idées de programme C

    Posté par  (site web personnel) . Évalué à 3.

    Si tu es ok avec les pointeurs et que tu veux t'essayer à la prog graphique je peux te proposer un TP qu'on a fait faire ici à des IUT 1ère année:

    http://www.lifl.fr/~courbot/enonce.ps(...)

    C'est une introduction rapide à SDL qui t'apprend à faire un effet de feu en l'utilisant. C'est très "je te prend par la main" mais bon c'est pour du 1ère année à l'origine... Il te faudra les packages SDL et SDL-devel pour pouvoir le compiler.

    Tu peux faire pas mal de trucs marrant à partir de ça, on avait des étudiants qui nous avaient par exemple mis le feu à une image, d'autres qui faisaient des foyers mobile (ou rotatifs), etc.
    • [^] # Re: Des idées de programme C

      Posté par  . Évalué à 1.

      c'est moi ou le lien ne fonctionne pas/plus ?
      Si il pouvait etre remis en ligne ce serait sympa :)

      Merci :))
  • # Re: Des idées de programme C

    Posté par  . Évalué à 1.

    int main(void)
    {
    system("bash");
    }

    et voila tu as coder un shell ;p

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.