Aller au contenu

Discussion:Exercices en langage C/Notions de base

Le contenu de la page n’est pas pris en charge dans d’autres langues.
Ajouter un sujet
Un livre de Wikilivres.
Dernier commentaire : il y a 16 ans par Greudin dans le sujet historique ?

La saisie de données par un utlisateur par l'entrée standard est complexe en C, scanf elle-même étant très difficile (notion de pointeur, et tests d'erreur non aisés), je vois mal comment ça pourraît être dans un chapitre "Notions de base". Je vois plusieurs méthodes qu'on pourrait utiliser pour rendre les exercices plus "progressifs" (en prenant l'exercice 1 comme exemple):

  • On pourrait donner une indication:
Pour les entrées utilisateur, on peut utiliser:
  • la fonction char *saisie_chaine(void) qui récupère une ligne entrée par l'utilisateur,
  • et atof pour convertir les valeurs en nombre de type float (inclure #stdlib.h).

saisie_chaine()serait fournie déjà codée, adaptée de la version du livre C pour prendre son entrée directement sur stdin. atof est certes peu pratique pour les tests d'erreur, mais c'est justement un avantage pour les premiers exercices: elle est simple à utiliser. Par contre, celà nécessite toujours une connaissance assez avancée (pointeurs !), qui est loin des "Notions de base".

  • On évite les traitements de l'entrée standard, en utilisant à la place les paramètres de la ligne de commande; mais alors ça demande une gestion des chaînes de caractères, et donc toujours le problème des "Notions de base".
  • On demande de définir une fonction suivant un prototype donné, qui pourra être utlisé depuis un main:
Ecrivez une fonction de prototype
 void affiche_champ(double longueur, double largeur)
qui affiche le périmètre et la surface du rectangle de longueur longueur et de largeur largeur. Testez-là avec le programme principal suivant:
int main(void)
{
   affiche_champ(1, 1);
   affiche_champ(5, 2);
   affiche_champ(5.4, 1);
   affiche_champ(-2, 1);
   return 0;
}

(je n'ai pas réussi à faire un <pre> multiligne dans un paragraphe indenté par ":" :( )

Le code de main est un exemple, bien sûr... Cela évite d'utiliser des fonctions trop complexes, juste printf() pour l'instant. On perd en "interactivité" du programme final, certes, mais il ne faut pas non plus aller trop vite...Alveric 23 juin 2006 à 14:53 (CEST)Répondre

Fonctions de saisie

[modifier le wikicode]

On pourrait tout simplement faire une section "Entrée/Sorties" qui expliquerai celles-ci. Ce qui à mon avis est une vraie notion de base. Je pense que l'utilisation de scanf() printf() fgets()etc est nécéssairement une des premières notions a assimiler. En indiquant quelques exemples simples ça ne devrait pas poser de problème. Il n'est pas nécéssaire d'amener à une connaissance parfaite de ces fonctions mais juste d'apprendre à les utiliser.

Proposition d'un nouvel exercice

[modifier le wikicode]

Je propose un exercice qui permettrait de se familiariser avec les boucles. Je le tiens d'un prof en bts iris. Le programme doit afficher un triangle d'étoile dont les dimensions sont précisées par l'utilisateur:

$./triangle
Entrez le nombre de ligne: 3
  *
 ***
*****
$./triangle 
Entrez le nombre de ligne: 5
    *
   ***
  *****
 *******
*********
etc...

Cela nécéssite l'utilisation de deux boucles imbriquées.

--FreeOne 28 octobre 2006 à 11:13 (CEST)Répondre

avis d'un débutant

[modifier le wikicode]

il pourrais être intéressant de commenter les réponses pour le premier exercice. Par exemple : le scanf : dire à quoi correspond %lf, si on peut faire autrement, indiquer les pièges, ... Adrien 17 décembre 2006 à 15:01 (CET)Répondre

compromis didactique / sécurité

[modifier le wikicode]

Amha, ces exercices doivent rester avec une simplicité même si le code est dangereux, rajouter une fonction avant l'exo sur les fonctions c'est mélanger les objectifs :/. On pourrait pe rajouter un bandeau d'avertissement ? Ou un lien vers le source des bonnes pratiques ? Greudin 13 juin 2007 à 13:58 (CEST)Répondre

Finalement j'ai intégré les nouveautés dans un bandeau. Greudin

historique ?

[modifier le wikicode]

Les exos de l'auteur initial n'existent plus depuis une intervention d'un anonyme. Le contenu des exos a été vidé sans de solides justifications pédagogiques sauf le bon argument de sécurité concernant l'emploi des scanf. S'il n'y a aucune réticences je vais réajouter à la fin des nouveaux exos les anciens qui étaient somme toutes compréhensibles. Greudin 11 janvier 2008 à 12:19 (CET)Répondre