Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
385 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Exercice de la piscine 42: afficher l'alphabet

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Exercice de la piscine 42: afficher l'alphabet

n°2301060
raiden5002
Posté le 22-05-2017 à 16:40:47  profilanswer
 

Bonjour tout le monde, voila je commence a apprendre le C, mais comme je l'apprend seul, en regardant des videos sur youtube je progresse pas trop.
Bon je suis encore vraiment debutant, du coup je me suis dis, que j'allais essayer de faire les exercices de l'ecole 42.
Probleme, je bloque des le premier niveau en faite !
Voici la consigne:
 
Fichiers à rendre : ft_print_alphabet.c
Fonctions Autorisées : ft_putchar
• Écrire une fonction qui affiche l’alphabet en minuscule sur une seule ligne, dans
l’ordre croissant, à partir de la lettre ’a’.
• Elle devra être prototypée de la façon suivante :
void ft_print_alphabet(void);
 
Et c'est la que je comprends pas avec le besoin d'etre prototypée...  
Deja ça veut dire quoi et ça sert a quoi ?
Parce que logiquement on utilise tout simplement putchar et hop ça affiche l'alphabet non ?

Code :
  1. #include <stdio.h>
  2. int main ()
  3. {
  4.    char ch;
  5.    for(ch = 'A' ; ch <= 'Z' ; ch++)
  6.    {
  7.       putchar(ch);
  8.    }
  9.  
  10.    return(0);
  11. }


 
Mais du coup, faut virer int main () par => le prototype qu'on nous demande non ? ça: void ft_print_alphabet(void);
 
Mais resultat, chez moi ça ne compile plus du coup !


---------------
http://forum.hardware.fr/hfr/Achat [...] 4112_1.htm
mood
Publicité
Posté le 22-05-2017 à 16:40:47  profilanswer
 

n°2301067
Farian
Posté le 22-05-2017 à 18:23:05  profilanswer
 

Bonjour !  
 
Je pense qu'ils veulent que vous créiez une fonction "ft_print_alphabet(void)" qui imprime l'alphabet, que vous appellerez depuis le main.
 
Tout bêtement.
 
Définir le prototype, c'est décider, dans ce cas, que la fonction ne prend aucun paramètre et ne renvoie rien.
 
Quel est l'intérêt ? Je pense, en lisant l'exercice, que dans leur module de test, ils ne donnent que le fichier "ft_print_alphabet.c" qui ne contient que cette fonction et que le "main" est fourni par ailleurs (leur module de test) => Pour que cela compile il faut que les deux parties soient d'accord sur le prototype de la fonction.
 
Bonne continuation.


---------------
On n'est jamais très fort pour ce calcul !
n°2301093
eight_dev
Spy-master is back !
Posté le 23-05-2017 à 21:12:42  profilanswer
 

Très bonne initiative que de vouloir apprendre à coder en C.
 
Le prototype d'une fonction définit le type de valeur de retour ainsi que les paramètres et leur types que reçoit la fonction.
 

Code :
  1. void ft_print_alphabet(void);


 
Dans le langage C, les fonctions doivent être déclarées avant que l'on puisse les appeler. En général, cela se fait dans les fichier d'entête (.h).
 
Pour débuter, tu peux simplement la déclarer avant son appel par la méthode main().
 

Code :
  1. #include <stdio.h>
  2. void ft_print_alphabet(void);
  3. int main ()
  4. {
  5.         ft_print_alphabet();
  6.         return(0);
  7. }
  8. void ft_print_alphabet()
  9. {
  10.         char ch;
  11.         for(ch = 'a' ; ch <= 'z' ; ch++)
  12.         {
  13.                  putchar(ch);
  14.         }
  15. }


 
 
 

n°2301096
raiden5002
Posté le 24-05-2017 à 00:02:14  profilanswer
 

Bonjour, merci pour votre aide mais en faite ce que je ne comprends pas c'est donc, qu'on est d'accord qu'en C il nous faut toujours ceci en debut:

Code :
  1. int main ()


 
Et pourtant quand je regarde les codes des etudiants de 42 eux ne le mettent jamais !
Voici un exemple:

Code :
  1. int  ft_putchar(char c);
  2. void ft_print_alphabet(void)
  3. {
  4. int letter;
  5. letter = 'a';
  6. while (letter <= 'z')
  7. {
  8.  ft_putchar(letter);
  9.  letter++;
  10. }
  11. }


 
Mais pourtant l'etudiant qui l'a fait quand il l'a rendu il a du verifier que ça compile non ?
Donc du coup si on ne mets pas int main () on est d'accord que ça ne compile pas ?
Ou alors ils utilisent un système non standard ou je ne sais quoi ?


Message édité par raiden5002 le 24-05-2017 à 00:02:59

---------------
http://forum.hardware.fr/hfr/Achat [...] 4112_1.htm
n°2301097
rat de com​bat
attention rongeur méchant!
Posté le 24-05-2017 à 00:29:13  profilanswer
 

Citation :

qu'on est d'accord qu'en C il nous faut toujours ceci en debut:

Oui et Non, c'est un peu compliqué.

 

Un logiciel écrit en C sera souvent composé de plusieurs fichiers .c histoire de mettre un peu d'ordre (genre pour un logiciel de simulation de physique p.ex. un fichier .c pour le code en rapport avec l'interface graphique, un fichier pour la partie simulation, un fichier pour des fonctions mathématiques utilisés, ...) et pour ne pas avoir un seul fichier énorme (des gros logiciels ça peut être des centaines de milliers de lignes de code!). Un seul fichier dans le projet doit contenir la fonction main().

 

Quand on lance le compilateur (p.ex. GCC ou celui de Microsoft dont j'ignore le nom) il se passe en réalité plusieurs choses avec plusieurs logiciels qui forment la "toolchain" (mais comme tout est automatique - heureusement - on ne le remarque généralement pas à moins de savoir quoi chercher). Ce qui est important c'est que chaque fichier .c est traité séparément et transformé dans une espèce de fichier code machine intermédiaire (peu importe). Cette étape est la compilation en soit et elle est possible pour tout fichier .c avec une syntaxe valide, peu importe si il y a une fonction main() ou pas. Ensuite un logiciel appellé "Linker" (ne regarde pas ça sur internet, ça va t'embrouiller, c'est horriblement compliqué dans les détails mais il n'est pas nécessaire de s'y connaître grandement puisque c'est automatique) va prendre les différents fichiers intermédiaires et en faire un exécutable. Cela est possible uniquement si il existe une et une seule fonction main() quelque part dans un des fichiers .c. Par convention (c'est standardisé quelque part) quand Windows/Linux lance un programme il va lancer la fonction main().

 

Autrement dit: On peut compiler du code .c sans main(), mais on n'obtiendra pas d'exécutable (par contre ça permet de vérifier la syntaxe du code). Si on veut un exécutable il faut forcément une fonction main(). Soit les étudiants dont tu parles n'exécutent pas leur code soit il ne donnent simplement pas leur code complèt. Car bien sûr on peut très bien mettre tout son programme dans une fonction xy() et la fonction main() ne fera rien d'autre qu'appeller cette fonction (et retourner 0 à la fin), dans ce cas le code de la fonction main() n'est pas très intéressant et certains ne le donneront donc pas. (Je dis pas que c'est une bonne méthode mais c'est possible).

 

Ah, pourquoi tout ce bazar avec chaque fichier .c compilé séparément? Cela est très utile dans les gros projets. En cas de modification du code il ne faudra recompiler que les fichiers .c qui ont été modifiées, pour les autres on pourra réutiliser le fichier intermédiare correspondant pour l'étape suivante, à savoir produire un exécutable. Pour des projets de quelque lignes cela n'a aucune importance, par contre pour un projet avec 100.000 lignes le temps de compilation peut baisser énormément!

 

Bon, j'espère que je ne t'ai pas embrouillé d'avantage qu'avant. :o

 

edit: L'exemple de solution que tu donnes n'est pas génial, passer un int à une fonction qui prend un char peut créer des problèmes (il y a "moins de place" dans le char que dans le int). Je ne vois aucune raison de ne pas déclarer letter en char.


Message édité par rat de combat le 24-05-2017 à 00:32:57
n°2301098
raiden5002
Posté le 24-05-2017 à 00:37:30  profilanswer
 

Euuuuuuuh baaaah merci :D :D
Je pense que je vais relire ton message 3-4 voir une 10ene de fois pour tout bien tout comprendre hein  :pt1cable:  
Mais merci c'est super complet en tout cas :)
 
Du coup je me demande un truc, si je recupere leurs source sans le int main() et que je le rajoute moi même ça devrait fonctionner non  :D ?
 
En tout cas grand merci pour le long message si bien expliqué :)


---------------
http://forum.hardware.fr/hfr/Achat [...] 4112_1.htm
n°2301099
rat de com​bat
attention rongeur méchant!
Posté le 24-05-2017 à 00:52:32  profilanswer
 

raiden5002 a écrit :

Du coup je me demande un truc, si je recupere leurs source sans le int main() et que je le rajoute moi même ça devrait fonctionner non  :D ?


Exact, mais il faut bien sûr appeller "leur" fonction principale depuis ta main. Genre

Code :
  1. int main(void)
  2. {
  3.     ft_print_alphabet(); //appeller la fonction qu'on veut
  4.    
  5.     return 0; //indiquer "pas d'erreur" au système d'exploitation
  6. }


(par contre si t'as pas le code pour ft_putchar() l'exemple que tu donnes ne tournera pas ou pour m'exprimer correctement tu pourras le compiler mais tu n'auras pas d'exécutable car le fameux Linker va râler :sweat: )
 
(Concernant le return 0: Par convention (la encore c'est standardisé) la fonction main retourne un int, donc il faut mettre un return à la fin. Si on ne met rien le programme va certes quand même tourner mais c'est une erreur dans le code!)

n°2301107
raiden5002
Posté le 24-05-2017 à 12:02:12  profilanswer
 

D'accord merci beaucoup :)
Je comprends mieux tout ça :)
Je vais continuer les exercices :)


---------------
http://forum.hardware.fr/hfr/Achat [...] 4112_1.htm
n°2309303
Zilak
I can't carry anymore !
Posté le 25-12-2017 à 21:13:49  profilanswer
 

Pour t'aider tu as (openclassroom) https://openclassrooms.com/courses/ [...] ons-outils  (une suite de cours gratuit) qui est pas mal quand on débute. Je pense que ça sera plus efficace que les vidéos youtube.

 


Message édité par Zilak le 25-12-2017 à 21:14:14

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Exercice de la piscine 42: afficher l'alphabet

 

Sujets relatifs
[HTML/PHP/JS] Afficher x pages en alternances sur timerExercice entré sortie assembleur
Afficher une grille dans GoogleEarth à partir d'un point[Wordpress] Afficher article(s) sur Facebook
Afficher plusieurs lignes sur une seuleOpenLayers3 : afficher Text
afficher des images au fur et à mesure d'un appel ajaxMatlab : Comment afficher du texte (consigne) à l'écran
Comment afficher une image de durée limitée sous MATLAB ?Aide pour exercice c
Plus de sujets relatifs à : Exercice de la piscine 42: afficher l'alphabet


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR