Partage
  • Partager sur Facebook
  • Partager sur Twitter

Refonte du cours C

23 février 2017 à 14:23:57

Ksass`Peuk a écrit:

Accessoirement, initialiser les trucs à 0 (que ce soit les pointeurs ou whatever), c'est pas une initialisation, c'est mettre une valeur au pif. Le but d'une initialisation à la base, c'est établir les invariants associés à la variable. Avec derrière une idée de "à partir de l'initialisation, ma valeur respecte telle propriété". Si on fait une initialisation au pif, ça devient "à partir de l'initialisation, ma valeur respecte telle propriété, enfin, sauf si on a pas encore fait la vraie initialisation, auquel cas c'est 0".

Au sens du langage, lorsqu'on donne une valeur lors de la définition, c'est une initialisation.

Après, l'intérêt de l'initialisation, ça ne concerne pas les débutants. Ce qu'ils doivent en revanche savoir et comprendre, c'est qu'on peut écrire char t[6]="hello"; mais pas char t[6];t="hello";

Cela dit, pas besoin d'aller jusqu'aux invariants pour que l'initialisation soit intéressante. Un autre intérêt est de réduire les comportements aléatoires des programmes. Et cela rend les modifications de maintenance moins dangereuses. Je m'explique:

Soit un programme utilisé en production et sous maintenance active.
Une évolution triviale est demandée. Elle ne touche qu'une seule ligne de code:
char hello[] = "hello world"; // avant
char hello[] = "hello, world"; // après
Elle est faite et testée, tout va bien, elle passe en production.
Une fois en production, catastrophe, une fonctionnalité vitale, qui n'a rien à voir et n'a pas été modifiée depuis 10 ans, est cassée.
Comment un changement trivial à l'autre bout du code a-t-il pu cassé une fonctionnalité vitale? Même quand la partie de code modifiée n'est pas exécutée, ça crashe.

  • Partager sur Facebook
  • Partager sur Twitter
24 février 2017 à 15:53:19

Merci aux admins d'avoir épinglé le sujet :)

  • Partager sur Facebook
  • Partager sur Twitter
First solve the problem. Then, write the code. ~ John Johnson
24 février 2017 à 16:12:40

[HS]

PicoDev a écrit:

Merci aux admins d'avoir épinglé le sujet :)


Pour éviter que ce sujet ne comporte trop de messages merci de vous limiter à des contributions uniquement (pas de messages d'encouragements par exemple). 

On ne félicite pas les admins :p

[/HS]

Blague a part, quel serait la méthode pour mettre à jour/refaire le tuto ?

Car si une seul personne s'en occupe, je pense que sa risque d'être compliqué non ?

-
Edité par florent m 24 février 2017 à 16:13:32

  • Partager sur Facebook
  • Partager sur Twitter
24 février 2017 à 19:32:38

[hs] :honte:[/hs]

En fait, M. Nebra nous a simplement dit qu'il y aurait une personne pour refaire un cours C++ et C.  Le seul but de ce sujet est de préparer le terrain en quelque sorte. Je vais essayer ce WE de mettre les première contributions à plat pour y voir un peu plus clair. 

  • Partager sur Facebook
  • Partager sur Twitter
First solve the problem. Then, write the code. ~ John Johnson
25 février 2017 à 17:31:03

Superbe initiative ! C'est avec ce cours que j'ai découvert la programmation et que j'ai commencé à coder. 

Je me souviens par contre que j'avais été un peu frustré parce que j'utilisais Xcode et que la partie installation de la SDL sur Xcode n'était (déjà) plus à jour il y a quelque années.

De plus, on voit souvent un problème des utilisateurs de mac pour utiliser les fichiers, puisqu'il y a une petite manip à faire pour pouvoir les ouvrir. Peut-être faudrait-il l'indiquer sur le tutoriel ?

-
Edité par Poco_ 25 février 2017 à 17:31:40

  • Partager sur Facebook
  • Partager sur Twitter
26 février 2017 à 11:35:43

Ha le cours du langage de programmation C x)

Il faut tous d'abord (comme déjà dis je crois) mettre à jour la SDL (SDL 1.2 --> SDL 2.0) mais j'ai aussi pensé à étudier d'autres bibliothèques graphiques pour donner le choix (au moins 2?) en donnant tous les points positifs/négatifs des deux bibliothèques (je suppose qu'il y en a ;) ) et j'ai pensé à la SDL et Allegro, il me semble que ce n'est pas très loin de la SDL, juste un peu plus haut question niveau (même que la nouvelle version de la SDL à de nouvelles fonctions) puisque j'aurais bien voulu avoir le droit de choisir quelles bibliothèques j'utiliserai :p m'enfin.

Par la suite je crois que si quelqu'un devrait refaire un forum il devrait fusionner la partie 2 et la partie 4 du cours (je me rappel quand j'avais fini la partie SDL j'avais cru que le cours était fini alors qu'il restait une partie xD) mais d'un autre côté ces deux parties semblent un peu distinctes...

Bon bah voilà je crois que c'était les gros points qui m'avaient dérangé... Sinon le cours était bien mais ancien.

  • Partager sur Facebook
  • Partager sur Twitter
26 février 2017 à 14:35:14

Premier jalon

Pour résumer, le public concerné irait du total newbie au deutant confirmé qui désirerait apprendre le C sur une des plateformes classiques windows/linux/mac.
Le tuto devrait pouvoir fournir non seulement un minimum sur l'installation des outils, des rudiments de leur manipulation mais aussi une introduction facile au C. Il faudrait ensuite aborder succinctement quelques notions avancées pour passer relativement rapidement à l'introduction de la création d'une interface graphique, revenir à des notions plus poussées en C puis à des notions plus poussées en GUI. Le tout étant de savoir quoi mettre dans quoi.

Les outils

L'idéal serait évidemment d'avoir «la même chose» sur les 3 plateformes. Il y a plusieurs alternatives :

  • code blocks
    bien installé et bien configuré il fournit un bel ensemble. Apparemment il y a quelques difficultés sous mac.

  • atom/sublim text/ou équivalent nouvelle génération
    ils sont relativement complets, du moins facile à compléter (ligne de commande, gdb, makefiles, ..)
    l'approche sera plus orientée ligne de commande ; ok pour linux et mac mais il faudra choisir quelque chose pour windows comme msys/cygwin/bash par dfaut

  • une image d'un système linux minimal avec des outils préconfigurés
    l'idéal : tout le monde parle de la même chose et part avec les même outils. Idéal sans doute pour commencer mais les utilisateurs windows et mac seront un peu mis à l'écart ... il devront se débrouiller tous seuls pour leur configuration par la suite.

Introduction au C

L'intro devrait être basée sur (au minimum) C99 ou (idéalement) sur C11. On pourra y retrouver par exemple :

  • structure d'un programme (monofichier)
  • étape de la compilation (rudimentaire)
  • exemple avec utilisation direct du debuger
  • survol des contôles de flux
  • présentation rapide de la libc, du préprocesseur
  • explication type natif, variables avec une mention spéciale sur les strings (?)
  • introduction aux fonctions
  • agrégation de types simples dans des structures
  • les tableaux
  • première approche des pointeurs
  • utilisation makefile / bibliothèque tierce

Introduction GUI

La SDL2 semble être préférée car le débutant plus ou moins confirmé peut vite s'éclater à faire des trucs sympas.
Faire deux «parties» une concernant le «jeu» avec SDL2 (ou allegro ?)  une autre plus «classique» pour les applications «bureau» avec GTK+/QT/wxWindows ?
Il faudrait un personne qui s'y connaisse mieux que moi pour essayer de faire un petit plan. 

C avancé

  • les fichiers
  • pointeurs avancés
  • cast et compagnie
  • union
  • conception et modularité (survol)
  • strings (avancé) unicode(?)

GUI avancé

id. Into GUI 

Vers l'infini et au-delà

Cette partie ne concerne pas directement un tuto d'apprentissage du C mais contient des notions pouvant faire l'objet d'autres tutos

  • utiliser un base de donnée
  • les threads
  • mieux programmer → conception et modélisation / algo / prouver ses programmes / assert / ...
  • autres outils : valgrind / profiler / GUI builder / ...
  • FAQ à mettre à jour ...
  • Partager sur Facebook
  • Partager sur Twitter
First solve the problem. Then, write the code. ~ John Johnson
26 février 2017 à 14:57:22

Je vais faire mon casse pied, mais j'insiste sur l'apprentissage au plus tôt de la gestion de erreurs et de leur différenciation (assertion, gestion d'erreur de l'environnement).

  • Partager sur Facebook
  • Partager sur Twitter

Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

26 février 2017 à 15:16:21

Ksass`Peuk a écrit:

Je vais faire mon casse pied, mais j'insiste sur l'apprentissage au plus tôt de la gestion de erreurs et de leur différenciation (assertion, gestion d'erreur de l'environnement).

La gestion des erreurs de l'environnement est essentielle et à mon sens indissociable de l'introduction des fonctions manipulant l'environnement. Les assertions ... je ne sais pas, et je ne suis pas pédagogue. D'un côté tu as certainement raison, pour preuve j'ai récemment interagit avec un admin ayant modifié la faq C sur developpez avec ce code (extrait de la FAQ C) :

...

int main(void) 
{ 
    FILE* f = fopen("data.txt", "r"); 
    assert(f != NULL); 
  
    ...


ça m'a évidemment fait bondir ... donc tu as sans doute raison. Mais comme c'est a priori pour une audience avec peu de culture en programmation je me dis que ça fait de trop ; il vaut mieux dans un premier temps qu'ils assimilent bien le fait de vérifier les erreurs RT (entre autre) quitte à ce qu'il fasse de la «mauvaise» programmation défensive.

Aborder les assertions dans la seconde partie sur C, au moins survoler la notion plutôt que de la reléguer dans un tuto à part ?

Je ne sais pas.

  • Partager sur Facebook
  • Partager sur Twitter
First solve the problem. Then, write the code. ~ John Johnson
26 février 2017 à 21:01:57

Salut !

Super idée que de faire un gros brainstoarming :D.
De mon point de vue de débutant peut-être parler un peu plus en détails du processus de compilation ? Un chapitre ou deux par exemple pourrait être pas mal en abordant les différentes étapes (si possible en passant par la ligne de commande)..

Exemple tout bête : Je ne sais toujours pas quand faut-il privilégier un typedef à un define ? Et en quoi ils se différencient ?  -J'avoue ne pas avoir vraiment cherché par moi même mais c'est dommage que es choses comme cela ne soient pas expliqué dans un cours qui est censé donner de bonnes bases en C.

PS : Dans le message de PicoDev juste au dessus je ne comprends même pas en quoi l'assertion faite est mauvaise ? Alors que ça devrai visiblement me sauter aux yeux :-°

  • Partager sur Facebook
  • Partager sur Twitter
26 février 2017 à 21:47:15

Xenoliss a écrit:

Exemple tout bête : Je ne sais toujours pas quand faut-il privilégier un typedef à un define ? Et en quoi ils se différencient ?  -J'avoue ne pas avoir vraiment cherché par moi même mais c'est dommage que es choses comme cela ne soient pas expliqué dans un cours qui est censé donner de bonnes bases en C.

Dans la partie «présentation rapide de la libc, du préprocesseur» pour ce qu';est un define à quoi il sert.
Dans/après la partie «agrégation de types simples dans des structures» pour ce qui est des ressemblances/différences entre typedef et #define.
À discuter je suppose.

Xenoliss a écrit:

PS : Dans le message de PicoDev juste au dessus je ne comprends même pas en quoi l'assertion faite est mauvaise ? Alors que ça devrai visiblement me sauter aux yeux :-°

 Ce n'est pas l'assertion en soi qui est mauvaise, mais son utilisation. On ne doit utiliser assert que pour vérifier que certains prérequis sont bien remplis, et cela se passe avant tout lors du développement et ne devrait plus avoir lieu dans la phase release. Par exemple si tu défini une fonction

// Attention le paramètre bar ne doit jamais être NULL
void foo(const char *bar);

tu aimerais t'assurer que personne n'appelle ta fonction avec un paramètre NULL. C'est l'occasion de placer une assertion :

void foo(const char *bar)
{
  assert( bar != NULL );
  ...

En mode debug s'il arrive que foo soit appelé avec NULL alors tu as un bug (car ça ne devrait pas être possible) qui est signalé par assert. Tu peux donc corriger le bug.
En mode release tu définis la macro NDEBUG pour désactiver toutes les assertions (ou pas si tu désires les garder). 

En revanche quand il s'agit d'un événement qui intervient au runtime lorsque tu demande une ressource (mémoire, fichier, …) il faut gérer l'erreur qui n'est pas un bug.

En très gros : assert = en mode debug pour aider à trouver des bugs. Je sens K'sass Peuk qui trépigne :)

Les assert ne servent pas qu'à ça mais c'est sans doute une des utilisations les plus simples pour le débutant.

  • Partager sur Facebook
  • Partager sur Twitter
First solve the problem. Then, write the code. ~ John Johnson
26 février 2017 à 23:04:59

Sa n'a pas vraiment de lien avec le C, mais il y a deux problèmes qui représente un bon 80% des problèmes:

- le manque de recherche

- les problèmes de logique d'algo (ils ne comprennent pas ce qu'il ont codé eux même)

Il pourrait être bien de faire un ou deux paragraphes à ce sujet et voir a rediriger sur des liens externes ou bien forcer la recherche lors des tp, même si sa ne résoudra pas le problème sa pourrait potentiellement améliorer les choses.

-
Edité par florent m 27 février 2017 à 13:18:18

  • Partager sur Facebook
  • Partager sur Twitter
27 février 2017 à 13:12:18

A mon sens, juste un exemple avec une calculatrice et des fonctions suffit à montrer la différence entre :

  • problème dû à l'environnement,
  • vérification de contrat.

L'idée du code :

error_t input_integer(int* cell){
  assert(cell && "Cell must not be NULL");

  // ce qu'il faut pour la saisie
}

int division(int num, int div){
  assert(div != 0 && "div cannot be 0");
  return num / div;
}

error_t user_division(){
  int num;
  int div;

  error_t err = input_integer(&num));
  if(err != OK){
    //choisir traitement
  }

  err = input_integer(&div);
  if(err != OK){
    //choisir traitement
  }

  if(div == 0){
    //choisir traitement
  }

  //on sait que div != 0, on a le droit d'appeler "division"
  printf("%d/%d = %d", num, div, division(num, div));

  return OK;
}

int main(){

}

Avec une séparation nette entre ce qu'on ne maîtrise pas : les saisies, et ce qu'on maîtrise : notre code où les propriétés que l'on suppose sont vérifiées.

  • Partager sur Facebook
  • Partager sur Twitter

Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

27 février 2017 à 17:40:11 - Message modéré pour le motif suivant : Message complètement hors sujet


27 février 2017 à 17:48:50

MarouaneEzzeggouti a écrit:

c'est quoi le probleme

Le problème c'est que t'es pas foutu de lire les règles d'un forum et que du coup, tu pollues un topic qui n'a rien à voir avec ton problème.

  • Partager sur Facebook
  • Partager sur Twitter

Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

Anonyme
27 février 2017 à 17:56:06

PicoDev a écrit:

Bonjour à tous.

Suite à la discussion concernant l'état du cours C (Mise à jour du Cours), il serait utile de centraliser les remarques ainsi que les questions fréquentes dans un unique sujet.

Je vous invite donc à le faire vivre pour aider celui qui aura la tâche de s'attaquer à la refonte du cours. N'hésitez pas à laisser :

  • des remarques constructives sur le cours
  • des liens vers les sujets et erreurs soulevés fréquemment par les débutants suivant le cours
  • des points manquants que vous aimeriez y voir abordés
  • des points existants que vous aimeriez voir abordés plus tard 
  • ...

Pour éviter que ce sujet ne comporte trop de messages merci de vous limiter à des contributions uniquement (pas de messages d'encouragements par exemple).

Ce sujet sera épinglé sous peu.

En attendant vos participations,
Pico. 

mises à jour

Premier jalon

Pour résumer, le public concerné irait du total newbie au deutant confirmé qui désirerait apprendre le C sur une des plateformes classiques windows/linux/mac.
Le tuto devrait pouvoir fournir non seulement un minimum sur l'installation des outils, des rudiments de leur manipulation mais aussi une introduction facile au C. Il faudrait ensuite aborder succinctement quelques notions avancées pour passer relativement rapidement à l'introduction de la création d'une interface graphique, revenir à des notions plus poussées en C puis à des notions plus poussées en GUI. Le tout étant de savoir quoi mettre dans quoi.

Les outils

L'idéal serait évidemment d'avoir «la même chose» sur les 3 plateformes. Il y a plusieurs alternatives :

  • code blocks
    bien installé et bien configuré il fournit un bel ensemble. Apparemment il y a quelques difficultés sous mac.

  • atom/sublim text/ou équivalent nouvelle génération
    ils sont relativement complets, du moins facile à compléter (ligne de commande, gdb, makefiles, ..)
    l'approche sera plus orientée ligne de commande ; ok pour linux et mac mais il faudra choisir quelque chose pour windows comme msys/cygwin/bash par dfaut

  • une image d'un système linux minimal avec des outils préconfigurés
    l'idéal : tout le monde parle de la même chose et part avec les même outils. Idéal sans doute pour commencer mais les utilisateurs windows et mac seront un peu mis à l'écart ... il devront se débrouiller tous seuls pour leur configuration par la suite.

Introduction au C

L'intro devrait être basée sur (au minimum) C99 ou (idéalement) sur C11. On pourra y retrouver par exemple :

  • structure d'un programme (monofichier)
  • étape de la compilation (rudimentaire)
  • exemple avec utilisation direct du debuger
  • survol des contôles de flux
  • présentation rapide de la libc, du préprocesseur
  • explication type natif, variables avec une mention spéciale sur les strings (?)
  • introduction aux fonctions
  • agrégation de types simples dans des structures
  • les tableaux
  • première approche des pointeurs
  • utilisation makefile / bibliothèque tierce

Introduction GUI

La SDL2 semble être préférée car le débutant plus ou moins confirmé peut vite s'éclater à faire des trucs sympas.
Faire deux «parties» une concernant le «jeu» avec SDL2 (ou allegro ?)  une autre plus «classique» pour les applications «bureau» avec GTK+/QT/wxWindows ?
Il faudrait un personne qui s'y connaisse mieux que moi pour essayer de faire un petit plan. 

C avancé

  • les fichiers
  • pointeurs avancés
  • cast et compagnie
  • union
  • conception et modularité (survol)
  • strings (avancé) unicode(?)

GUI avancé

id. Into GUI 

Vers l'infini et au-delà

Cette partie ne concerne pas directement un tuto d'apprentissage du C mais contient des notions pouvant faire l'objet d'autres tutos

  • utiliser un base de donnée
  • les threads
  • mieux programmer → conception et modélisation / algo / prouver ses programmes / assert / ...
  • autres outils : valgrind / profiler / GUI builder / ...
  • FAQ à mettre à jour ...

-
Edité par PicoDev hier à 14:36

Picodev ce serait cool de mettre a jour le cours SDL 2.x j'ai l'impression que la formation C sur le site on reste un peu sur notre fin !

Apprendre l'algorithmique, dichotomie etc... plus d'exercice, allez pronfondement dans les pointeur, la gestion de la mémoire exemple la généricité, pointeur de pointeur etc .



  • Partager sur Facebook
  • Partager sur Twitter
27 février 2017 à 20:03:43

florent m a écrit:

Sa n'a pas vraiment de lien avec le C, mais il y a deux problèmes qui représente un bon 80% des problèmes:

- le manque de recherche

- les problèmes de logique d'algo (ils ne comprennent pas ce qu'il ont codé eux même)

Il pourrait être bien de faire un ou deux paragraphes à ce sujet et voir a rediriger sur des liens externes ou bien forcer la recherche lors des tp, même si sa ne résoudra pas le problème sa pourrait potentiellement améliorer les choses.

-
Edité par florent m il y a environ 6 heures

PicoDev a écrit:

Premier jalon

Pour résumer, le public concerné irait du total newbie au deutant confirmé qui désirerait apprendre le C sur une des plateformes classiques windows/linux/mac.
Le tuto devrait pouvoir fournir non seulement un minimum sur l'installation des outils, des rudiments de leur manipulation mais aussi une introduction facile au C. Il faudrait ensuite aborder succinctement quelques notions avancées pour passer relativement rapidement à l'introduction de la création d'une interface graphique, revenir à des notions plus poussées en C puis à des notions plus poussées en GUI. Le tout étant de savoir quoi mettre dans quoi.

....

1)Tu as tous à fait raison florent,mais sa c'est du à des recherches qui nous donne souvent des résultats très complexe qui nous mène à d'autres mots qu'on ne connait pas et d'autres mots etc...

C'est vrai que sa développerai très rapidement nos connaissances mais je me retrouve quelques fois à visiter des dizaines de pages avec pleins de données hyper complexe (dont 50% ne me serviront à rien) donc c'est tellement plus simple de demander sur le forum et d'obtenir une réponse clair et nette précise etc... (Bon après quand on te jette le code comme sa sans explication c'est pas très ludique mais rare sont les personnes qui jettent sa comme sa)

2)J'avais pensé à une partie C console coupés en une partie simple et compliqué à une partie C librairie graphique pour débutant et une partie pour intermédiaire et une autre pour les avancés ou pro ( C'est un peu trop non)

EDIT: Fail

-
Edité par XxEric 1 mars 2017 à 19:19:08

  • Partager sur Facebook
  • Partager sur Twitter
28 février 2017 à 15:42:08

Sait-on si le but est de mettre à jour le cours original de M. Nebra ou bien de refaire un cours à partir de zéro ?

  • Partager sur Facebook
  • Partager sur Twitter
28 février 2017 à 16:31:10

robun a écrit:

Sait-on si le but est de mettre à jour le cours original de M. Nebra ou bien de refaire un cours à partir de zéro ?



Mathieu Nebra a écrit:

En fait, on va avoir quelqu'un qui va travailler sur la mise à jour des cours de C et de C++ très bientôt (on l'a identifié). Donc la mise à jour va avoir lieu dans les mois qui viennent normalement.



Mathieu Nebra a écrit:

Bref, pour la personne qui va faire la mise à jour, il s'agit d'un pro du C++, car c'est le cours de C++ qui a le plus besoin de mise à jour. Pour SDL et le C, on verra dans un second temps, et il faudra qu'il se forme ou qu'on trouve quelqu'un d'autre au pire. Mais je pense que c'est tout à fait accessible vu son niveau. Au pire si y'a des petites erreurs, vous nous le dites (gentiment) et on corrige comme on l'a toujours fait. :)

C'est tout ce qu'on sait pour l'instant.

  • Partager sur Facebook
  • Partager sur Twitter
Si debugger, c’est supprimer des bugs, alors programmer ne peut être que les ajouter - Edsger Dijkstra
28 février 2017 à 17:29:45

J'ai l'impression qu'il s'agit donc bien d'une mise à jour, pas d'un nouveau cours. Donc on garde le même plan, c'est juste qu'on va parler de la SDL 2 et non 1, et du C99 ou du C11.

  • Partager sur Facebook
  • Partager sur Twitter
1 mars 2017 à 22:55:15

Pour l'IDE, j'utilise QTCreator pour faire du C++ sans Qt, ça marche bien, je pense qu'il est aussi utilisable pour C.

Dans les concepts de base, quand on a des débutants, il y a un problème avec la notion de bloc, les accolades étant vues comme des machins décoratifs qu'on met là pour on ne sait pas trop quelle raison. D'où les questions du genre "l'instruction je la mets avant ou après l'accolade ?".

En fait c'est dans la représentation d'un "arbre de programme", objet structuré, sous forme d'un texte balisé qu'ils ont un problème (en pensant parfois que l'apparence due à l'indentation en tient lieu).

Pour le graphisme : on n'attire pas les mouches avec du vinaigre. Pour "tenir" les débutants, il faut leur donner des exemples sur lesquels ils auraient envie de continuer à bricoler eux mêmes. Pas du calcul sur des polynomes :-)

-
Edité par michelbillaud 1 mars 2017 à 22:58:25

  • Partager sur Facebook
  • Partager sur Twitter
1 mars 2017 à 23:15:16

Bonsoir,

Je me suis rendu compte aujourd'hui, en réalisant un projet sur arduino, que même après presque 2 ans de programmation j'ai encore beaucoup de mal avec la gestion des chaînes de caractères et donc de la mémoire par extension.

Pour illustrer je devais encapsuler des donnees à envoyer (avex un shield xBee) et ca ma paru tout de suite compliqué lorsqu'il s'agit de transformer des int en char, de venir concaténer 2 chaînes ensemble (strcat) ou même de copier une chaîne dans une autre (strcpy). (les pointeurs baladeurs dans le code sont une horreur à corriger !)

Je n'ai par exemple toujours pas assimilé quand est ce qu'il est vraiment nécessaire de mettre le '\0' en fin de chaîne ni comment bien utiliser les fonctions de string.h.

Tout ce qui est pointeur sur char  et leur utilosation avex les fonctions de string.h est en fait un peu flou (de mon point de vue et peut être de celui d'autres débutants) : le retour de strcpy ou de strcat peut il être simplement récupéré par un char * ou faut plutôt le récupérer dans un tableau de taille fixe etc...

Enfin voilà ce n'est que mon avis et ça ne concerne peut être pas la majorité des débutants mais j'aurai aimé pousser cette notion de gestion de chaîne et de mémoire un peu plus. Bien comprendre le fonctionnement de tout ça me semble essentiel et cela evite d'être bloqué des que l'on essaye de faire des trucs un peu par soi même.

-
Edité par Xenoliss 2 mars 2017 à 12:03:17

  • Partager sur Facebook
  • Partager sur Twitter
6 mars 2017 à 8:38:02

C'est une bonne idée de refaire les cours, et pour cela il faut commencer par clarifier

  • les objectifs : ce qu'on veut que les gens sachent / sachent faire une fois qu'ils ont terminé
  • les prérequis : les connaissances sur lesquelles on peut s'appuyer pour commencer

parce que c'est très différent de faire un cours avec le langage XY selon que l'auditoire a, ou pas, une connaissance des bases de la programmation (affectations, décisions et boucles, découpage en sous-problèmes et en fonctions, algorithmique de base, etc...), et ce n'est pas un travail négligeable(ceux qui ont appris il y a longtemps et pensent que c'est facile devraient essayer un autre paradigme de programmation que celui avec lequel ils sont confortables - par ex. logique ou fonctionnel - , pour se rappeller à quel point c'est laborieux de s'y mettre).

Exemple ci-dessus, qui montre qu'on a pu apprendre à faire des choses, et s'amuser avec, sans avoir bien compris la notion de chaine de caractères style C, et sur le plan conceptuel le traitement d'une séquence terminée par une valeur sentinelle.

Si le cours c'est "apprenez les bases de la programmation en utilisant le langage XY" (*), ça ne sera pas "programmez comme un pro en XY", sauf à sombrer dans la démagogie. 

(*) en laissant de côté la question de savoir si le langage en question est le meilleur outil pour apprendre à programmer.

-
Edité par michelbillaud 6 mars 2017 à 8:44:14

  • Partager sur Facebook
  • Partager sur Twitter
7 mars 2017 à 7:58:48

Ah ! Une bonne nouvelle pour tout le monde de revoir la refonte du cours en C ! 

D'ailleurs, j'ai bien une note à vous faire intégrer qui me parait important au niveau de la boucle "for" mais sous un autre format. Les personnes qui débutent utilise par exemple "i++" à tout va... Et c'est pas forcément une bonne idée. Il faudrait l'expliquer.

// ++i va incrémenter la valeur de i, et alors retourner la valeur incrémenté.

i = 1;
j = ++i;
// (i = 2, j = 2)

// i++ va incrémenter la valeur de i, mais va retourner la valeur original de i avant l'incrémentation.

i = 1;
j = i++;
// (i = 2, j = 1)

edit :

Il y a un cours me semble t-il en c++ qui nous permet d'utiliser le réseau, je ne sais pas si c'est avec QT ou non, mais je pense qu'en C il serait bien de démystifier un peu la chose, parfois très mal compris des gens et à mon avis demandé...

Après petit problème il y a 2 librairies, une pour Windows, et une pour Linux. Mais au final les structures sont les mêmes, juste des commandes différentes, voilà. ^^

-
Edité par etienne520 7 mars 2017 à 8:02:09

  • Partager sur Facebook
  • Partager sur Twitter
7 mars 2017 à 9:33:48

etienne520 a écrit:

D'ailleurs, j'ai bien une note à vous faire intégrer qui me parait important au niveau de la boucle "for" mais sous un autre format. Les personnes qui débutent utilise par exemple "i++" à tout va... Et c'est pas forcément une bonne idée.

Si l'on ne récupère pas le retour de l'opération, ça n'a strictement aucune importance. Ni en terme de sémantique (puisque l'effet est invisible), ni en terme de performances (puisque le compilateur l'optimisera les doigts dans le nez). Donc pour les boucles for, cela ne gêne en rien qu'un débutant écrivent "i++". C'est les autres cas qui vont être pertinent, mais condenser une expression en mettant des effets de bords dedans (limités à 1 si on ne veut pas se tuer au passage), c'est pas vraiment une bonne idée de toute façon.

etienne520 a écrit:

Il y a un cours me semble t-il en c++ qui nous permet d'utiliser le réseau, je ne sais pas si c'est avec QT ou non, mais je pense qu'en C il serait bien de démystifier un peu la chose, parfois très mal compris des gens et à mon avis demandé...

Que ce soit l'un ou l'autre (parce que oui, il y a les deux), ils ne sont pas trop à conseiller. Celui avec les sockets POSIX est un mélange de C et C++ que je déconseillerai et n'expliquent pas la plupart des actions réalisées quand elles sont un poil complexes. Le second avec Qt n'est pas plus conseillé que le reste du tutoriel de C++.

En ce qui concerne la refonte du cours, je classerai ces éléments dans le même panier que les threads et processus : ils méritent amplement leur cours dédié, séparé du cours d'origine.

  • Partager sur Facebook
  • Partager sur Twitter

Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

8 mars 2017 à 1:22:45

michelbillaud a écrit:

C'est une bonne idée de refaire les cours, et pour cela il faut commencer par clarifier

  • les objectifs : ce qu'on veut que les gens sachent / sachent faire une fois qu'ils ont terminé
  • les prérequis : les connaissances sur lesquelles on peut s'appuyer pour commencer

Puisque le but est de mettre à jour le cours du site (et non de créer à partir de zéro un nouveau cours), si j'ai bien compris ce qui a été dit un peu plus haut, je pense qu'il suffit de conserver les objectifs de cet ancien cours. Le cours de C du Zéro avait pour but d'initier un large public au langage C, donc sans aucun prérequis a priori (il me semble que la préface du livre l'explique bien dans le passage où M. Nebra explique qu'il a écrit le livre qu'il aurait bien voulu avoir lorsqu'il avait débuté).

  • Partager sur Facebook
  • Partager sur Twitter
8 mars 2017 à 16:19:47

Bonjour,

Pour mettre à jour le cours existant avec les mêmes prérequis et objectifs, je trouve qu'il faudrait expliquer un peu plus l'utilisation d'une bibliothèque dans le cas général (et pas simplement l'installation de la SDL) , notamment l'édition de liens, les fichiers .a  .lib  nécessaires ...

C'est ce qui m'a le plus manqué lorsque j'ai débuté avec ce cours.

  • Partager sur Facebook
  • Partager sur Twitter
Architecture SDL                     Multithreading         
9 mars 2017 à 18:37:44 - Message modéré pour le motif suivant : Message complètement hors sujet


9 mars 2017 à 21:27:58

Bonjour AlexandreBauchet1, ton message est hors sujet. Merci de créer ton propre topic.
  • Partager sur Facebook
  • Partager sur Twitter

Moderateur forum || FAQ 3D || discord 3D francophone || OC Tweak script

10 mars 2017 à 7:06:27

picosoft a écrit:

Bonjour,

Pour mettre à jour le cours existant avec les mêmes prérequis et objectifs, je trouve qu'il faudrait expliquer un peu plus l'utilisation d'une bibliothèque dans le cas général (et pas simplement l'installation de la SDL) , notamment l'édition de liens, les fichiers .a  .lib  nécessaires ...

C'est ce qui m'a le plus manqué lorsque j'ai débuté avec ce cours.


Bon après il ne faut pas oublié que c'est un site pour débutant à la base (il me semble)
  • Partager sur Facebook
  • Partager sur Twitter