Programmer en C

Bonsoir,

quelqu'un aurait-il des cours (en pdf par exemple) pour débuter en C?

je souhaite apprendre à utiliser des bibliothèques graphiques et la souris... (waitclic() par exemple)

Merci d'avance,

F.D.
«1

Réponses

  • Si tu souhaites faire du graphique je ne peux que te recommander d'utiliser le C++. D'ailleurs même pour le reste, à moins de vouloir programmer des microcontrôleurs il vaut mieux partir sur du C++. Je sais que ça ne répond pas à ta question, mais pour vouloir faire explicitement du C il vaut mieux avoir de bonnes raisons.

    Le site du zéro possède beaucoup de bons tutoriaux aussi bien sur le C, que le C++, que la programmation graphique : http://www.siteduzero.com/

    Sinon la bible du développeur c'est : http://www.developpez.com/
    Tu y trouveras des cours, des tutoriaux, des FAQ, un forum où poser tes questions, ...
  • Tu seras peut être intéressé par le paragraphe "Programmation avec sorties graphiques sous Linux" de la page que j'ai écrite:
    http://www.iecn.u-nancy.fr/~garet/linux/
    (ça ne concerne pas que Linux)
    Des gens plus au courant te conseilleront sans doutes des bibliothèques, plus évoluées, genre gtk et compagnie,mais je n'ai jamais trouvé de doc simple qui ne m'impose pas de passer par l'apprentissage de plein de concepts plus ou moins compliqués.
  • Par ailleurs pour les bibliothèques graphiques, le choix est super vaste, au moins en C++.

    Ca dépend vraiment beaucoup de ce que tu veux faire, 2D ou 3D, contraintes de performance ou non, librairie bas niveau ou haut niveau, portabilité du code, temps d'apprentissage à y consacrer, ... ?
  • Bonsoir,
    Je ne sais pas si on peut "débuter" par les applications graphiques, c'est donc un peu au hasard que je proposerai: un cours et un tutoriel.
  • J'ai appris le C par ici
    Après je ne sais pas si c'est le meilleur tuto
  • Bonjour,

    merci pour toutes vos références.
    J'ai installé code-blocks hier soir et souhaite l'utiliser pour produire des programmes C/C++?

    Pour situer : je suis prof de maths (agrégé) en lycée, je tripotte Scilab depuis une dizaine d'années, LaTeX depuis pareil. J'ai un deug Maths/info où j'ai appris de l'algorithmique et du Turbo-Pascal.
    J'ai envie de me mettre au C/C++ après avoir vu les trucs super sympas que les élèves produisaient en ISN avec 1 an de cours derrière eux, j'estime, en toute modestie, pouvoir apprendre deux ou trois bricoles pour me mettre à un niveau équivalent ...

    Merci encore pour vos références,

    Amicalement,

    F.D.
  • Tu as appris le Pascal ? Tu peux très bien l’utiliser à la place du C. Ce langage n’est pas mort, en fait.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • D'accord avec Nicolas.

    Ca peut valoir le coup de jeter un oeil au tandem Free Pascal/Lazarus.

    http://fr.wikipedia.org/wiki/Lazarus
  • @ FrançoisD,
    Ne nous dispersons pas, je maintiens que ton problème ne sera pas tant le choix d'un langage mais
    1> la gestion des bibliothèques graphiques, i.e. Gtk.
    2> la configuration du système de développement.
    Perso je ne connais pas "Code-Blocks" et je développe mes programmes C++ ou C/Gtk sur mon vieux et fidèle Emacs avec un Makefile à peu près compréhensible.
  • Bonjour,
    Dans une situation similaire à celle de FrançoisD, j'ai décidé d'apprendre à programmer en C il y a trois mois.
    Je ne sais si commencer par le C++ est une meilleure idée mais comprendre et manipuler des pointeurs ainsi que l'allocation de mémoire m'a amusé. Programmer en C n'est pas si compliqué lorsqu'on a déjà programmé en Pascal(je suis sans doute dans l'erreur, mais lorsque je vois un programme en Java j'ai peur).
    Plus concrètement, j'ai appris le C (les bases disons) avec un livre excellent mais ancien (acheté il y a 10 ans et pas ouvert depuis) :
    Langage C de WILLMS chez Micro Application; je ne sais s'il est encore disponible. Il doit exister d'autres très bons ouvrages. Sinon le tutoriel C sur le site du Zéro est très bien aussi.

    Ensuite produire des graphiques simples est devenu une priorité. J'ai mis du temps à trouver une bibliothèque graphique assez simple pour commencer (tracer une droite en SDL c'est déjà compliqué quant à GTK +cairo (ou autre) ça demande apparemment un certain investissement en temps d'apprentissage). La semaine dernière j'ai découvert EZ-DRAW qui répond parfaitement à ce que je veux faire pour commencer :
    EZ-DRAW
    (il existe une version pour C++).
    Elle permet de s'initier en douceur à la programmation graphique évenementielle (NB : j'utilise des mots nouveaux pour moi...).
    Je passerai à GTK/cairo par la suite.
    voilà, si cette expérience peut aider...

    Simon

    ps: dans ma ville les élèves en ISN programment en Python.
  • Ca a l'air sympa, cet ez-draw.
    As tu testé la version C++ ?
    Je dis ça, car le C pur, de mon point de vue, c'est quand même assez galère pour les entrées/sorties. Même si on ne fait pas de trucs de folie avec la programmation objet, le C++ est plus pratique.
  • Oui ez-draw est très sympa, assez simple (*) et, si j'ai bien compris, basée sur des idées que l'on peut mettre à profit pour utiliser GTK, Qt ou autres par la suite.
    Quant à la version C++, je ne l'ai pas testée car je n'ai pas (encore) appris le C++.

    Simon

    (*) après quelques heures à comprendre les principes de base sur les très bonnes démo et le tutoriel, j'ai pu l'utiliser pour tracer des courbes de fonctions (dont l'expression mathématique est compilée par un programme d'analyse que j'ai conçu il y a 2 mois (là j'ai transpiré...)) avec la possibilité de zoomer sur une sélection faite à la souris et pourtant je ne crois pas avoir un talent inné pour la programmation
  • Quand j'ai programmé http://www.logique.jussieu.fr/~chalons/automatep.exe

    j'ai été obligé de passer par les API windows pour afficher les images directement à l'écran. Au lieu de modifier un pixel, je modifais un byte de mémoire interne sinon trop long (puis j'affichais de tps en tps tout le ruban à l'écran. Un accès direct aux pixels semble un peu "interdit" de nos jours (à vitesse immédiate j'entends)

    (C'est un simulateur de machines de Turing:

    1,3 permettent de contrôler la vitesse d'exécution
    0,space réinitialise (l'un en effaçant le rubant l'autre enle laissant tel quel
    + et - controlent le nombre d'états

    puis je me rappelle plus des autres touches :D )

    edit: enter réinitialise en efféaçant le ruban; 9 envoie de la neige; 8 et 2 controle le nombre de couleurs (le cardinal de l'alphabet).
    Aide les autres comme toi-même car ils sont toi, ils sont vraiment toi
  • ez-draw (suite) : je viens de voir qu'en bas de la page citée plus haut, il y avait une version écrite en GTK :
    ez-draw GTK

    Simon
  • Bonjour à tous,

    Je me permets de proposer la bibliothèque allegro http://alleg.sourceforge.net/ qui est une bibliothèque très basique pour faire des applications graphiques simples.

    C'est a priori pour faire du jeu, donc plutôt orienté dessin et images que interface graphique (j'entends par interface graphique des boutons, des menus, des zones de textes, etc...). Des modules simples de la bibliothèque permettent de récupérer les évènements souris et clavier facilement. La doc et les premiers tutos sont normalement assez simple à utiliser.

    Bonne continuation et bon courage ;)
  • Julia is the future. La facilité du langage est proche de R ou Matlab, et la puissance est comparable au C. Y'a déjà des packages développés et ce n'est que le début, avec un futur très prometteur.
  • Merci pour tous vos commentaires,

    je vais m'y coller et je vous montrerai ce que j'arrive à faire.

    (mes deux premiers défis : un morpion avec IA et un échec sans IA).

    Amicalement,

    F.D.
  • Franchement, quelle mauvaise idée de se mettre au C en 2013.
    À toi de voir FrançoisD, si tu veux faire aussi bien que tes élèves en 1 an, ou si tu veux faire mieux en 1 mois.
  • Steven Neutral a écrit:
    Franchement, quelle mauvaise idée de se mettre au C en 2013.
    Absolument d'accord, il aurait fallu le faire bien avant.
    Ceci dit l'intérêt d'un langage ne dépend pas seulement de sa modernité ou de critères liés au contexte socio-temporel, mais surtout de la richesse de ses bibliothèques.
    Le lisp, malgré les critiques "Lot of Insipide Stupid Parenthesis" a bien survécu au McCarthysme alors que plus personne ne parle de notre "Langage Sans Emploi" hexagonal.
    Je ne parlerai même pas du Fortran ... toujours bien vivant.
  • Braun a écrit:
    mais surtout de la richesse de ses bibliothèques
    Karpinski a écrit:
    The tool of choice for linear algebra tends to be Matlab. The tool of choice for statistics tends to be R

    Julia est écrit en C, il ne risque pas de le tuer. Je pense que le "the C for scientists" dans le titre de l'interview de Karpinski, veut signifier qu'il faut laisser le C aux développeurs, pas aux utilisateurs.

    Pas compris ta remarque sur LISP.
  • @SN: je ne comprends pas très bien le positionnement de Julia. Tu le compares au C, mais est-ce que ce n'est pas plutôt un concurrent de Scilab ou R ?
  • Ahah ! Tu as vu les perfs ??
    Pour certaines choses, Julia peut aller 400 fois plus vite que R.
    Il a été comparé au C sur plusieurs petites choses : jusque maintenant, au pire il va 2 fois moins vite que le C.

    Mais en le faisant tourner avec un multiprocesseur on peut même dépasser les perfs du C : http://dmbates.blogspot.be/2012/05/simple-gibbs-example-in-julia.html

    Julia c'est la puissance du C avec la convivialité du R, et bien plus encore !
  • FrançoisD a écrit:
    je suis prof de maths (agrégé) en lycée
    Steven Neutral a écrit:
    Julia peut aller 400 fois plus vite que R
    Et tu crois vraiment que c'est ça qui va le faire arriver plus vite à la retraite?
    Je ne suis pas certain que dans l'enseignement la vitesse soit le premier critère.
  • L'enseignement de quoi ? Je répondais à aléa.

    Pour ma part j'utilise uniquement R ou presque. Il y a deux limitations principales : la vitesse et la manipulation de gros tableaux de données. On peut espérer que dans quelques années certains bons packages de R seront implémentés dans Julia (si Douglas Bates a commencé à s'y mettre, et ce malgrè son grand âge, c'est pas pour des prunes), ainsi la programmation sera toujours aussi simple et ces limitations n'auront plus lieu (et même si Julia allait 10 fois moins vite que le C, ça me suffirait amplement).
  • @christophe c

    Tu veux faire ton interface graphique en C parce que tu as besoin de la puissance du C ? Avec le pacage gWidgets de R tu fais des interfaces graphiques en Gtk-Cairo très facilement.
    Avec Julia c'est pas encore documenté : http://julialang.org/blog/2013/05/graphical-user-interfaces-part2/ (mais même si peu documenté je serais pas étonné que ce soit déjà plus simple qu'en C)
  • Bonjour,
    Vous utilisez quelle biblio/librairie pour faire du calcul matricielle en C?
  • Bonjour,
    Serait-ceci auquel tu fais allusion? matrice.h une fois.
  • Je ne sais pas pourquoi tout le monde parle du C alors que dans les faits il est bien plus contraignant que le C++.

    En C++ tu as Eigen comme bonne librairie d'algèbre linéaire.

    Par ailleurs je suis d'accord avec Braun, ce qui fait la richesse d'un langage c'est en grande partie ses librairies.
  • ce qui fait la richesse d'un langage c'est en grande partie ses librairies.
    C'est pourquoi j'utilise R : The number of R packages is growing exponentially

    Vous savez générer ça avec du C (en à peine deux pages de code)? :
    <iframe src="http://glimmer.rstudio.com/winston/stocks/&quot; style="overflow:auto; border: none; width: 1000px; height: 400px"></iframe>
  • Un truc génial qui est en train d'exploser en ce moment c'est les librairies Javascript pour faire des graphiques interactifs.
    Vous voyez, je ne connais absolument rien en html et Javascript, et pourtant avec des packages R je crée des applications ouebbes et des graphiques Javascript, fingers in the noise. Julia aussi aura de tels packages. La philosophie actuelle des développements d'outils informatiques est à la combinaison des outils existants.
    Et pendant que les élèves de Braun termineront leur morpion après 1 an de labeur, il y en a qui s'amuseront bien et qui pourront ajouter sur leur CV des compétences recherchées sur le marché de l'emploi :D

    <iframe src="http://glimmer.rstudio.com/winstontest/shiny-jsdemo/&quot; style="overflow:auto; border: none; width: 1000px; height: 400px"></iframe>
  • Je n'ai jamais critiqué R, enfin si, beaucoup même, mais pas sur ce forum :P
    Mais puisqu'on me tend la perche ^^

    R est assez (très) mal foutu au niveau de la syntaxe, surtout quand on est habitué à un langage tel que le C++ ou le Java. Par ailleurs les structures de données sont assez "difficiles" à comprendre entre les tableaux, les frames, ... On ne peut pas mélanger les deux facilement, et la doc explique plutôt mal à mon goût comment les utiliser. En C++ au moins je sais exactement ce que je peux faire avec un tableau natif, ce qu'il représente, comment il est fait et stocké en interne, et au besoin je peux créer mes propres classes.

    Néanmoins pour quelqu'un qui est habitué à la syntaxe, ce qui selon moi demande sûrement beaucoup plus de temps en R qu'en C++ qui a des structures natives plus simples à manipuler, il est certain que R est très puissant (pour faire des stats évidemment) par le nombre de ses packages.

    Évidemment on gagne en contrepartie de ce qu'on perd, R a selon une moi une syntaxe alambiquée, mais en contrepartie il permet de faire beaucoup de choses en beaucoup moins de lignes de code car il a déjà des structures adaptées. J'ai toujours préféré repartir de mes structures, ou au moins pouvoir lire le code que j'utilise dans une librairie pour comprendre comme c'est fait en interne.

    Ce que j'exprimais là est un avis personnel, quelqu'un qui a toujours fait du R sans maîtriser d'autres langages aura nécessairement un avis contraire au mien, et je le respecte. Vice versa, je ne maîtrise pas R, je l'ai utilisé forcé et contraint :D, donc mon jugement a peu de valeur.
  • Oh skyffer vraiment pas d'accord.

    1) La syntaxe de R est très intuitive, surtout pour un mathématicien :
    > f <- function(x) x^2
    > f(2)
    [1] 4
    > composé <- function(f,g) function(x) f(g(x))
    > composé(f,f)(2)
    [1] 16
    

    2) Les packages de R ne se résument pas aux statistiques.

    3) Le langage R a effectivement des problèmes pour les concepteurs de package (moi je n'ai jamais été contraint par ces problèmes). D'où la dernière slide de la présentation de Bates :
    What does Julia offer that R doesn't ?

    One language providing flexibility and efficiency
  • skyffer3 a écrit:
    Je ne sais pas pourquoi tout le monde parle du C alors que dans les faits il est bien plus contraignant que le C++.
    Tout le monde, je ne sais pas, mais ici tout simplement par ce que FrançoisD qui a ouvert le fil et gérgér un peu plus tard ont posé des questions précises sur le C et pas autre chose...
    Amicalement
  • Oui, mais on parle bien de R et de Julia, alors pourquoi pas de C++ :P
  • On n'est pas sur un site question/réponse, mais sur un forum de discussion.
    FrançoisD a écrit:
    J'ai envie de me mettre au C/C++ après avoir vu les trucs super sympas que les élèves produisaient en ISN avec 1 an de cours derrière eux
    Si certains ont envie de discuter sur le fait qu'il y autre chose que le C/C++ pour faire des "trucs sympas" je ne vois pas en quoi c'est off-topic.
  • Ben tiens j'avais même pas fait gaffe, en plus il a dit C/C++ !
  • Ah? je trouvais que ça trollait dur! :P

    Pour résurmer : je n'ai pas programmé autre chose qu'un petit peu de Scilab depuis plusieurs années et j'ai envie d'essayer de reprendre des bases.
    Je disais C ou C++ comme j'aurais dit autre chose. Je n'ai pas particulièrement envie de faire des maths avec ça (l'envie baisse de jour en jour).

    Merci en tout cas de tout ce que vous avez mis dans la discussio n pour me conseiller :)

    Amicalement,

    F.D.
  • Mieux que le morpion, le mot mystérieux !

    <iframe src="http://dl.dropboxusercontent.com/s/9wcmxyvramz312p/d3nwtest.html&quot; style="overflow:auto; border: none; width: 1000px; height: 400px"></iframe>
  • Il y a python aussi qu'est assez simple d'approche, avec une bonne masse de bibliothèques. Si tu veux des trucs "sympas", pygame permet de créer des jeux vidéos assez facilement. Pour le calcul scient, la bibli numpy remplace allègrement scilab. En connexe, on peut citer sage qui est un mix de pleins d'outils de maths commandés en python.
    Plus orienté "jeux vidéos", certains élèves d'ISN cette année ont fait un projet avec "Processing 2.0", ça a l'air très simple d'accès et on peut facilement faire des ptis jeux.
  • @aléa:
    In short, because we are greedy.

    We are power Matlab users. Some of us are Lisp hackers. Some are Pythonistas, others Rubyists, still others Perl hackers. There are those of us who used Mathematica before we could grow facial hair. There are those who still can’t grow facial hair. We’ve generated more R plots than any sane person should. C is our desert island programming language.

    We love all of these languages; they are wonderful and powerful. For the work we do — scientific computing, machine learning, data mining, large-scale linear algebra, distributed and parallel computing — each one is perfect for some aspects of the work and terrible for others. Each one is a trade-off.

    We are greedy: we want more.

    We want a language that’s open source, with a liberal license. We want the speed of C with the dynamism of Ruby. We want a language that’s homoiconic, with true macros like Lisp, but with obvious, familiar mathematical notation like Matlab. We want something as usable for general programming as Python, as easy for statistics as R, as natural for string processing as Perl, as powerful for linear algebra as Matlab, as good at gluing programs together as the shell. Something that is dirt simple to learn, yet keeps the most serious hackers happy. We want it interactive and we want it compiled.

    ...
  • Bonjours
    L'alliance php5 et DHTML aussi qui permettent de coder assez vite.
    Il y a plein de paramètres à prendre en compte pour choisir le langage de programmation utilisé pour fabriquer un logiciel ou exécuter un processus.

    Le gros défaut de C est qu'il est un peut brouillon, il faut coder en ayant la tète dans le guidon.
  • Les 2 inconvénients du C sont la complexité d'utilisation liée à sa permissivité et la séquentialité qui ne le rendent pas un langage optimal pour des machines massivement parallèles (or il n'y a pas de langage universel pour ce type de machines combinant les calculs procéduraux et le déclaratif).
    Si le C est utilisé dans les règles de l'art, ce n'est pas un langage posant de souci de codage; mais ses failles de sécurité en fonctionnement sont limitées justement par ces règles contraintes à l'environnement, garantissant la validité des expressions (ex: MISRA en automobile et aéronautique).
  • FrançoisD écrivait : http://www.les-mathematiques.net/phorum/read.php?15,847453,847453#msg-847453
    [Inutile de recopier le message initial. Un lien suffit. AD]

    Pourquoi du C ? C= vitesse, proche du métal. Si tu veux t'amuser à faire de la prog graphique, je te conseille plutôt Python. Beaucoup plus abordable que du C si tu es débutant. Ne parlons même pas du C++.
  • nicolas.patrois écrivait : http://www.les-mathematiques.net/phorum/read.php?15,847453,847527#msg-847527
    [Même remarque. Un lien suffit. AD]

    Non mais il est en soins palliatifs. Il est très peu utilisé en France. Il est encore assez utilisé dans les pays de l'Est.
  • Évidemment chacun a son dada quand il s'agit d'un langage de programmation.

    Mais par pitié arrêtez ce mythe du "le C est difficile", "le C++ encore plus difficile", ... Voilà comment décourager un débutant alors qu'il n'y a là rien de compliqué.
  • Bonjour,

    D'accord, Skyffer3, le C nest pas particulièrement difficile, et le C++ non plus, il y a seulement des feignants et des gens qui acceptent de travailler :D.

    Cordialement,

    Rescassol
  • C'est pas ça Rescassol. C'est que tu peux travailler autant et faire mieux. Le C est un langage de développeur, pas d'utilisateur.
  • Je ne connais pas beaucoup de langage d'utilisateur qui ne sait qu'utiliser le clickodrome. :D
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • S'il y avait un langage où on peut universellement travailler moins pour faire plus, tout le monde l'utiliserait ...

    Je ne sais pas ce que c'est la différence entre un langage de développeur et un langage d'utilisateur.

    Pour moi à un besoin donné correspondent des langages adaptés. En prenant en considération les langages déjà appris et les futurs besoins, on peut trouver un langage à utiliser pour une personne donnée.

    Faire mieux que le C ne veut rien dire, ça dépend pour quoi. Dans la majeure partie des utilisations il sera difficile de faire mieux que le C++. Faire aussi bien oui, mais faire mieux faut vraiment taper dans du spécifique (genre applis web par exemple). D'où l'intérêt d'apprendre le C++, très souvent il permettra de faire aussi bien qu'un autre langage, mais le C++ permettra d'aborder plein de problèmes alors que d'autres langages seront plus limités en terme d'applications.

    Je rappellerais juste une dernière chose. On ne mesure pas le "travail" à fournir pour coder au nombre de lignes de code ... Ça me rappelle un ami qui voulait me prouver à quel point il était plus facile de coder je ne sais plus quel algo en R. Le gars a mis trois fois plus de temps à faire marcher son code sous R que ça ne m'aurait pris à le coder en C++, et pourtant mon code aurait sûrement pris trois fois plus de lignes ... Je me doute que quelqu'un qui s'y connaît bien en R aurait moins peiné que lui, mais ne mesurons pas la difficulté d'un code à son nombre de lignes. Y a certaines lignes en R je mets 2 minutes à comprendre ce qu'elles font; en C++ c'est direct.

    Edit : y a pas de langages durs ou faciles, c'est vrai même pour l'assembleur. Ce qui est difficile c'est de concevoir et de comprendre une architecture.
  • skyffer3 a écrit:
    Pour moi à un besoin donné correspondent des langages adaptés.
    Plus ou moins, au risque de radoter un peu, le noyau du langage n'est pas tout.
    D'autre part, toujours en enfonçant les portes ouvertes, il vaut mieux un langage un peu généraliste que l'on connaît bien qu'un langage plus spécifique mal maîtrisé.
    Par contre j'admets volontier que pour des applications graphiques sur les machines actuelles C++ ou Python présentent de réels avantages, je dirais même plus il me semble que certaines bibliothèques C "virtualisent" de facto des modèles C++.
Connectez-vous ou Inscrivez-vous pour répondre.