Aller au menu - Aller au contenu
Inscris-toi au e-camp "Héberge ton jeu Facebook sur Azure" de Microsoft vendredi 25 mai à 13h30 !

Reprogrammez les fonctions C !

Pour accéder à cette section
Connectez-vous !
connexion_rpx

Résolu Le problème de ce sujet a été résolu

Page 1  2  3  4  5  Suivante
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1  2  3  4  5  Suivante
Hors ligne david55 # Posté le 13/08/2010 à 16:11:01
Avatar

Bonjour à tous! :)

J'ouvre ce sujet afin que chacun d'entre vous nous montre comment reprogrammer une fonction de son choix en C !

Ceci pourrait être intéressant pour chacun d'entre nous et on pourrait en apprendre beaucoup sur les fonctions C.

Alors à vos claviers et montrez nous comment programmer ces fameuses fonction comme printf, scanf, random, memset, malloc ... ou plus simplement les fonctions de la librairie string.h pour commencer ^^


PS: N'oubliez pas d'utiliser les balises code
Édité le 16/08/2010 à 18:06:39 par david55

David 55 ;)
 
Publicité # Posté le 13/08/2010 à 16:11:01

Hors ligne uknow # Posté le 13/08/2010 à 16:15:11
chercher est un art
Avatar

Ville : Paris
Pays : France métropolitaine
Études : CNAM

Citation : david55
montrez nous comment programmer ces fameuses fonction comme printf, scanf,


J'ai hate de voir ça :)

Au passage, mets le titre de ton sujet en minuscule (le majuscule étant un peu mal vu).
Édité le 13/08/2010 à 16:19:13 par uknow
 
Hors ligne PierrickLibert # Posté le 13/08/2010 à 16:16:28
Avatar

Études : Epitech Nancy

T'es un peu optimisme avec printf()... Vise déjà un peu plus bas pour commencer, genre les fonctions de string.h.
Surtout que printf() n'est vraiment pas a la portee de n'importe qui si tu veux le coder entierement...
Hors ligne ZéroZéroHuit-008 # Posté le 13/08/2010 à 16:18:51
Avatar

Encore printf ne doit pas être si difficile, en passant par l'intermédiaire de fgets (mais je ne me lancerai moi-même pas là-dedans :p ). Quant-à scanf... :-°
Hors ligne david55 # Posté le 13/08/2010 à 16:19:18
Avatar

Citation
T'es un peu optimisme avec printf()... Vise déjà un peu plus bas pour commencer, genre les fonctions de string.h.
Surtout que printf() n'est vraiment pas a la portee de n'importe qui si tu veux le coder entierement...

Justement ! On pourra peut être mieux comprendre comment elle fonctionne si quelqu'un sait la faire (en la commentant bien sur ;)). Sinon, vous pouvez commencer par la fonction que vous voulez ;)

David 55 ;)
 
Connecté Fvirtman # Posté le 13/08/2010 à 16:24:33
2012, l'année de mes 0x20 ans
Avatar

printf, techniquement, n'est pas difficile a programmer. C'est juste qu'elle est longue à programmer : il faut gérer tous les cas : tous les caractères d'échappement (avec \) ainsi que tous les types avec %
 
Hors ligne PierrickLibert # Posté le 13/08/2010 à 16:27:25
Avatar

Études : Epitech Nancy

Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Je l'ai déjà codé partiellement en 1 semaine et demi complet dessus. Franchement elle est énorme, quand tu vois toutes les options que possède printf() c'est impressionant!
Après c'était peut être du au contrainte de mon école (nous n'avons droit à aucune fonction système) mais j'en doute.
Pour les téméraires qui veulent si oser, je pourrais vous aider jusqu'à un certain point, après faudrait que je me remette dessus.
Mais un conseil, si vous voulez coder printf suivez ces etapes :
0) Lire le man, lire le man, lire le man, lire le man et pis le relire encore et encore.
1) Mise en place d'un parser très très très très solides et stables!
2) Commençez par des options simples tel que %s, %d, %f, ...
3) Découpez bien votre code sinon vous vous bloquerez tout seul.
4) Avant de commençer a vraiment rentrer dans les trucs difficiles, reposez chaque étape sur papier, c'est important.
...
La suite, au premier qui en arrive déjà la. :)
Hors ligne david55 # Posté le 13/08/2010 à 16:29:04
Avatar

Citation : Fvirtman
printf, techniquement, n'est pas difficile a programmer. C'est juste qu'elle est longue à programmer : il faut gérer tous les cas : tous les caractères d'échappement (avec \) ainsi que tous les types avec %

Tu veux te lancer? Bien sur on ne te le demande pas en une soirée lol! Mais si tu veux ... propose nous quelque chose voir même un algorithme ;)

David 55 ;)
 
Hors ligne uknow # Posté le 13/08/2010 à 16:29:05
chercher est un art
Avatar

Ville : Paris
Pays : France métropolitaine
Études : CNAM

Citation : ZéroZéroHuit-008
Encore printf ne doit pas être si difficile, en passant par l'intermédiaire de fgets (mais je ne me lancerai moi-même pas là-dedans :p ). Quant-à scanf... :-°


tu veux dire à l'aide de putc() ?

Et tu semble oublier que printf est une fonction à nombre d'arguments variable.
 
Connecté Fvirtman # Posté le 13/08/2010 à 16:33:27
2012, l'année de mes 0x20 ans
Avatar

Citation : david55
Citation : Fvirtman
printf, techniquement, n'est pas difficile a programmer. C'est juste qu'elle est longue à programmer : il faut gérer tous les cas : tous les caractères d'échappement (avec \) ainsi que tous les types avec %

Tu veux te lancer? Bien sur on ne te le demande pas en une soirée lol! Mais si tu veux ... propose nous quelque chose voir même un algorithme ;)


Je le ferais bien, mais plus tard peut être. La je suis au boulot pour encore 1 heure, j'ai des trucs bien plus compliqués à programmer avant ce soir.... Déjà que je ne suis pas sûr d'y arriver... Et j'ai tellement la cervelle en fusion que je viens faire du web quelques minutes avant de me replonger dedans...
 
Hors ligne Taurre # Posté le 13/08/2010 à 16:37:58
Avatar

Études : Université de Liege

Citation : Fvirtman

printf, techniquement, n'est pas difficile a programmer.


Même le format %a du C99? Je la trouve pas facile la conversion nombre décimal flottant -> nombre hexadécimal flottant... :euh:

Pour une coloration syntaxique du C à jour :pirate:

« In our experience, C has proven to be a pleasant, expressive, and versatile language for a wide variety of programs. It is easy to learn, and it wears well as one's experience with it grows ». (Brian W. Kernighan & Dennis M. Ritchie)
 
Hors ligne david55 # Posté le 13/08/2010 à 16:38:57
Avatar

Citation : Fvirtman

Je le ferais bien, mais plus tard peut être. La je suis au boulot pour encore 1 heure, j'ai des trucs bien plus compliqués à programmer avant ce soir.... Déjà que je ne suis pas sûr d'y arriver... Et j'ai tellement la cervelle en fusion que je viens faire du web quelques minutes avant de me replonger dedans...


Ok alors tu le ferras quand tu auras le temps si tu ne change pas d'avis jusque là :)
Édité le 13/08/2010 à 16:40:20 par david55

David 55 ;)
 
Connecté Fvirtman # Posté le 13/08/2010 à 16:44:05
2012, l'année de mes 0x20 ans
Avatar

Citation : Taurre
Citation : Fvirtman

printf, techniquement, n'est pas difficile a programmer.


Même le format %a du C99? Je la trouve pas facile la conversion nombre décimal flottant -> nombre hexadécimal flottant... :euh:


Après, il y aura peut être des options plus difficiles à programmer que d'autres. Je ne dis pas le contraire hein :) Mais bon, quand tu connais la formule c'est jouable :-°
 
Hors ligne PierrickLibert # Posté le 13/08/2010 à 16:46:46
Avatar

Études : Epitech Nancy

Bien sur que c'est jouable, mais ca va prendre du temps ^^.
Si vous voulez je peux vous mettre tout ma lib C que j'ai refais pour recoder un shell. Mais je suis pas sur d'avoir tout fait comme les vrais fonctions C, j'ai un peu modifier a ma sauce ^^ et il y en a d'autre qui n'existe pas en C mais qui sont bien utile quand on manipule des tableaux, liste chaine, ...
Hors ligne david55 # Posté le 13/08/2010 à 16:48:27
Avatar

Citation : PierrickLibert
Bien sur que c'est jouable, mais ca va prendre du temps ^^.
Si vous voulez je peux vous mettre tout ma lib C que j'ai refais pour recoder un shell. Mais je suis pas sur d'avoir tout fait comme les vrais fonctions C, j'ai un peu modifier a ma sauce ^^ et il y en a d'autre qui n'existe pas en C mais qui sont bien utile quand on manipule des tableaux, liste chaine, ...


Pourquoi pas !!! Je pense que ça pourrai nous intéresser :)
Édité le 13/08/2010 à 17:10:11 par david55

David 55 ;)
 
Connecté Gwenn # Posté le 13/08/2010 à 16:55:51
Chez moi ça marche.
Avatar
Groupe : Anciens

Sinon je vais dire une évidence mais la correction est facile à trouver puisque la libc est codée en C, vous pouvez trouver plusieurs implémentations différentes des fonctions standard en allant voir un peu partout.
Ca peut être intéressant.

Image utilisateur
 
Hors ligne david55 # Posté le 13/08/2010 à 17:00:33
Avatar

Citation : Gwen-Haël
Sinon je vais dire une évidence mais la correction est facile à trouver puisque la libc est codée en C, vous pouvez trouver plusieurs implémentations différentes des fonctions standard en allant voir un peu partout.
Ca peut être intéressant.


Si tu nous trouves des liens pourquoi pas ...

(le but est aussi qu'on se casse un peu la tête ;))
Édité le 13/08/2010 à 17:01:03 par david55

David 55 ;)
 
Connecté Fvirtman # Posté le 13/08/2010 à 17:03:12
2012, l'année de mes 0x20 ans
Avatar

A noter aussi qu'une fonction comme "printf" n'est pas toujours "bas niveau".

printf interprête une chaîne formatée et appelle une fonction en dessous qu'on appellera par exemple "putchar", qui met un caractère à l'écran.

Ce sera donc long à programmer printf, mais en dessous, on aura un appel à une fonction plus bas niveau : putchar.

Et selon les OS, putchar est codée différemment :
- sous DOS, ou alors les vieux systèmes en mode texte en plein écran, putchar, c'était un appel a 2 instruction assembleur. Donc le bas niveau total ; en dessous c'est l'electronique.
- sous Windows, Linux, ou autres systèmes graphiques, cette fonction putchar est complexe, puisque son rôle est d'afficher dans la fenêtre courante la lettre (avec la police et la taille qui va bien), donc ça peut être fort complexe en dessous !
En général, ce sera une sorte de "Blit".

NB : arrêtez de confondre "ça" et "sa"... Oh les jeunes ! Vous la faîtes tous cette faute, elle est pénible !
 
Connecté Gwenn # Posté le 13/08/2010 à 17:20:46
Chez moi ça marche.
Avatar
Groupe : Anciens

Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
@fvirtman: chez moi putchar en graphique ça a été une longue et douloureuse peine à implémenter :-°

@david55: http://ftp.gnu.org/gnu/glibc/, tout simplement?

Image utilisateur
 
Hors ligne david55 # Posté le 13/08/2010 à 17:26:58
Avatar

Citation : Gwen-Haël

@david55: http://ftp.gnu.org/gnu/glibc/, tout simplement?


Merci beaucoup :) !

David 55 ;)
 
Hors ligne Marc Mongenet # Posté le 13/08/2010 à 17:27:17

Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Citation : Fvirtman
sous Windows, Linux, ou autres systèmes graphiques, cette fonction putchar est complexe, puisque son rôle est d'afficher dans la fenêtre courante la lettre.

Ca c'est bien en-dessous de putchar , dans le cas où stdout est une console sur le PC local. Car stdout finit fréquemment dans un pipe, un fichier, une connexion réseau, etc.

D'où je conclus que les fonctions standard d'entrée-sortie de C appellent forcément des fonctions système, puisque les flux d'entrée-sortie sont des abstractions.
Édité le 13/08/2010 à 17:28:55 par Marc Mongenet
Connecté Fvirtman # Posté le 13/08/2010 à 17:28:21
2012, l'année de mes 0x20 ans
Avatar

Hors ligne david55 # Posté le 13/08/2010 à 17:38:54
Avatar

Bon j'ajoute un lien dans lequel vous trouverez tous les corps des fonctions C:
cliquez ici

Cependant, nous attendons toujours votre versions ;)
Édité le 16/08/2010 à 13:34:17 par david55

David 55 ;)
 
Hors ligne ZéroZéroHuit-008 # Posté le 13/08/2010 à 17:48:01
Avatar

Citation : uknow
Citation : ZéroZéroHuit-008
Encore printf ne doit pas être si difficile, en passant par l'intermédiaire de fgets (mais je ne me lancerai moi-même pas là-dedans :p ). Quant-à scanf... :-°


tu veux dire à l'aide de putc() ?

Et tu semble oublier que printf est une fonction à nombre d'arguments variable.


Oui, c'est bien de putc dont je voulais parler (je sors tout juste d'un combat avec fgets, je l'avait encore en tête...).
Quand au nombre d'arguments variables, je ne l'ai pas oublié mais ce n'est pas extrêmement compliqué à gérer.
Hors ligne FyndWyre # Posté le 13/08/2010 à 18:20:54
Avatar
Groupe : Bannis

david55, ton lien ne marche plus !

Image utilisateur
Image utilisateur
Image utilisateur
Image utilisateur
Absent en semaine !
 
Hors ligne Etienne # Posté le 13/08/2010 à 18:33:57
Have you mooed today ?
Avatar
Groupe : Anciens

Citation : Manuel
7.19.6.3 The printf function Synopsis
#include <stdio.h>

int printf(const char * restrict format, ...);

Description
The printf function is equivalent to fprintf with the argument stdout interposed before the arguments to printf.

Returns
The printf function returns the number of characters transmitted, or a negative value if an output or encoding error occurred


Moi ça ne m'aide pas beaucoup. Mais quand ils disent similaire à fprintf(), ça veut dire que printf() se sert des fichiers ?
Hors ligne ZéroZéroHuit-008 # Posté le 13/08/2010 à 18:59:30
Avatar

Non, je crois qu'il disent que c'est la même fonction sauf pour le flux de sortie : fprintf écris dans un fichier donné alors que printf utilise stdout.
Hors ligne Pouet_forever # Posté le 13/08/2010 à 19:38:13
Trance forever :)
Avatar

Citation : Norme
The printf function is equivalent to fprintf with the argument stdout interposed before the arguments to printf.

Image utilisateur
Image utilisateur


[Le préprocesseur C]
Fan officiel de Tiësto !
 
Hors ligne HighTam # Posté le 13/08/2010 à 20:22:48
Sleep(FOR_EVER);
Avatar

Ville : Sfax
Pays : Tunisie

Est-il indiqué que la fonction printf() utilise putchar() pour imprimer un caractère à l'écran ?

Image utilisateur

Image utilisateur
« L'enfer c'est les autres » Jean-Paul Sartre
Une mère a 21 ans de plus que son fils. Dans 6 ans, elle aura 5 fois l'âge de son fils. Où est le père ?
 
Hors ligne Pouet_forever # Posté le 13/08/2010 à 21:22:44
Trance forever :)
Avatar

Pas indiqué. :)

Image utilisateur
Image utilisateur


[Le préprocesseur C]
Fan officiel de Tiësto !
 

Retour au forum "Langage C" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx