Aller au menu - Aller au contenu

La programmation modulaire

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page Précédente  1  2  3  4  5  6  7  8  Suivante
Pseudo Commentaire
Page Précédente  1  2  3  4  5  6  7  8  Suivante
Hors ligne BobBreaker # Posté le 30/08/2010 à 09:19:43

Citation : alatox
gcc -o monprog main.c fonction.c
./monprog


En compilant de cette manière ça marche :)
Merci beaucoup pour ton aide !
Hors ligne xJustiCe # Posté le 02/10/2010 à 10:25:45
A cross the Universe
Avatar

Avis : Très bon

Études : BTS IRIS

Citation : M@teo21
Si vous mettez votre fonction après le main, ça ne marchera pas car l'ordinateur ne connaîtra pas encore la fonction. Essayez vous verrez ;)


Si je fais ça :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include <stdio.h>

int main()
{
    int nombreEntre = 10;
    printf ("Le résultat est : %d", add(nombreEntre, 2));

    return 0;
}

int add(int nombre1, int nombre2)
{
    return nombre1 + nombre2;
}


Ca me renvoit bien 12. Que ce passe-t-il ça ne devrait pas marcher ? Les compilateurs sont devenus plus sophistiqués ?
Hors ligne frayzon # Posté le 21/10/2010 à 20:11:32
Avatar

c'est normal si je ne pige rien
o_O
du moins ... pas grand chose , qu'es qu'un protoype :s

Dans le monde , il y'a ceux qui savent lire le langage binaire ... et les autres
 
Hors ligne moumousse # Posté le 30/10/2010 à 19:57:34
Avatar

Glups *-*

J'ai rien pigé. Faut que je reprenne bien --'
Hors ligne dratctonique # Posté le 16/11/2010 à 20:30:58

Avis : Très bon

bon, voila mon programme, lorsque je le lance, tous marche et pour initialiser les variables hauteurs et largeur aussi, mais après, quand je veux trouver l'aire, des tas de chiffres incohérents apparaissent.
voila, j'ai réfléchi au problème et je ne trouve pas -_-
merci beaucoup d'avance pour tous ceux qui voudront m'aider :D



#include <stdio.h>
#include <stdlib.h>

double aireRectangle(double largeur, double hauteur);

int main ()
{
double largeur = 0, hauteur = 0;

printf("\n\nentrez la largeur de votre rectangle: ");
scanf("%f", &largeur);
printf("\n\nentrez la longueur de votre hauteur de votre rectangle: ");
scanf("%f", &hauteur);

printf("\n\n\nl'aire du rectangle de %f cm de largeur et de %f de hauteur est de %f", aireRectangle(largeur, hauteur));

return 0;
}
double aireRectangle(double largeur, double hauteur)

{
return largeur * hauteur;
}
Hors ligne Grumps # Posté le 28/11/2010 à 19:30:02

@dratctonique:

1 Il y a deux erreurs au niveau des "scanf",en effet il faut que tu utilises %lf et non %f!

2 Et deuxièmement,lors de la ligne affichant le résultat:
"printf("\n\n\nl'aire du rectangle de %f cm de largeur et de %f de hauteur est de %f", aireRectangle(largeur, hauteur));" ;tu oublies de mettre les variables correspondant au deux premiers %f que tu veux communiquer,tu devra donc écrire:
"printf("\n\n\nl'aire du rectangle de %f cm de largeur et de %f de hauteur est de %f", largeur, hateur, aireRectangle(largeur, hauteur));"

Voilà,maintenant ça fonctionne parfaitement!!
Hors ligne OriginalsGeeks # Posté le 11/12/2010 à 22:10:30
Avatar

SUPPRIMER
Hors ligne bossof # Posté le 14/12/2010 à 22:26:31
Avatar

Avis : Décevant

juste une petite question comme ça en passant :p

comment on fait pour ajouter un header au projet quand on utilise juste un editeur de texte tout simple. Style bloc note ou notepad++ ?
Hors ligne y@cine # Posté le 19/12/2010 à 19:46:23
c++ = c + 1
Avatar

Avis : Très bon
Flux RSS

Bonjour tous le monde je voudrez savoir pour quoi mon code me mais qu'il y a une erreur :
code: main.c
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
#include "Projet.h"

double conversion(double euros);
{

int main()
{
    printf("Bonjour");

}
  return 0;

}




code: Projet.h
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#include <stdio.h>
#include <stdlib.h>

double conversion(double euros)
{
    double francs = 0;
    francs = 6.55957 * euros;

    return euros;
}

 int main(int argc, char* argv[])
 {
     printf("10 euros font %fF", conversion(10));
     return 0;
 }

Merci d'avance !
Hors ligne bossof # Posté le 20/12/2010 à 15:21:11
Avatar

Avis : Décevant

tu as deux main, normal que ça ne marche pas ^^

dans le code principal il faut un truc de se type :

dans un fichier il faut le main :

Code : C
1
2
3
4
5
6
7
8
#include <stdio.h>
#include <stdlib.h>
#include "projet.h" // ici on met dans le fichier contenant le main les prototypes des fonctions

 int main(int argc, char* argv[])
 {
     /* ton code principale*/
 }


puis dans un autre, un fichier .c (que l'on appelle ici projet.c)
de ce type :


Code : C
1
2
3
4
5
6
/*type de ta fonction par exemple double et son nom*/double  conversion(double euros)
{
    /*le code de ta fonction*/

    return /*ta valeur*/;
}


et dans un dernier fichier un .h (appelons le projet.h)

les prototypes de tes fonction :
et donc pour l'exemple ce sera
Code : C
1
double conversion(double euros);


et normalement maintenant si tu suis ceci sa devrais marcher ^^ mais il ne faut jamais mettre deux fois le main...

bon je n'apprends le C que depuis quelques mois donc je ne sais pas si se que je dis est bon mais normalement oui ^^
Hors ligne jeeljel # Posté le 25/12/2010 à 12:06:46

tout d'abords, merci beaucoup pour le tuto , j'aime bien !

une question !
moi j'ai fait ce tout petit prog


main.c
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>





int main()
{

    printf("resultat = %d ",triple(12));

    printf("resultat = %d ",triple(triple(12)));
    return 0;
}


fonction.c
Code : C
1
2
3
4
5
void triple(int resultat)
{
    resultat*=3;
    test();
}


fonction2.c
Code : C
1
2
3
4
void test()
{
    printf(" bonjour ");
}


pour les headers !

fonction.h
Code : C
1
void triple();


fonction2.h
Code : C
1
void test();


comme vous voyez :p j'ai fait aucune inclusion, (#include) :p , et pourtant , le programme marche trop bien :o ,
il est où le bleme ? o_O
Hors ligne ThoMiCroN # Posté le 19/01/2011 à 07:47:42
Avatar

Salut ! J'essayais de comprendre pourquoi on doit se donner la peine de créer des en-têtes .h homologues à chaque fichier source .c, puisqu'on peut s'en passer, étant donné qu'inclure une en-tête .h (#include "en-tete.h") n'est pas une condition essentielle pour pouvoir utiliser le contenu d'un fichier .c dans un autre fichier .c (c'est ce que je croyais au début avant de tester et de découvrir que non, puisqu'une fonction est accessible dans tous les fichiers du programme).

Avec ce qui va suivre, je voudrais comprendre si j'en ai bien compris la raison.


Dans le cahier dans lequel je résume mes apprentissages, j'ai écrit ceci :

Citation : Moi
Comme les fonctions sont accessibles dans tous les fichiers du programme, on pourrait se passer des en-têtes(headers) en .h, mais il vaut mieux le faire car cela évite des problèmes. [...] Si on crée systématiquement des fichiers en .h bourrés de prototypes, c'est que, quand on ne le fait pas, on doit se soucier de l'ordre dans lequel on déclare les fonctions lorsqu'on en utilise plusieurs qui s'appellent entre elles. En gros, c'est une prédisposition pour éviter d'éventuels ennuis. Si on faisait les programmes en mettant une seule fonction par fichier .c, cette disposition serait probablement inutile.
Hors ligne temnigru # Posté le 01/02/2011 à 23:37:06

Au risque de paraître débile, je vais poser une question, à laquelle je n'ai pus répondre après deux jours de réfléction:

Lorsque tu montres les fichiers de ton jeu ( pour nous montrer le nombre de fichiers et les headers), on voit deux grande partis: sources et headers, la question que je me pose (aller moquez vous :euh: ) Comment créer cette grande partie "headers"? chaque fois que j'essaye dans créer,(file > new > file > headers) je rentre un nom et le logiciel m'inscrit: "please select a filename with full path for you next file..."
Qui peut m'aider svp?
Hors ligne placebodu33 # Posté le 03/02/2011 à 19:06:17

Merci encore pour ce tutorial, j'ai tout compris et je souhaiterai faire une remarque.
J'avais pris l'habitude d'initialiser mes variables dans les paramètres de la fonction ce qui donnait par exemple :

genereNombre(int min = 0, int max = 100)

A la suite de ce cours sur la programmation modulaire j'ai donc créer un generer.c et .h avec le prototype de la fonction dans le .h genereNombre(int,int)
et la fonction dans generer.c tout comme il faut !
cependant ça ne fonctionne pas, et pour que cela fonctionne il ne fallait pas que j'initialise les variables dans les paramètres de la fonction mais il fallait une instruction juste en-dessous, ce qui donnait :
genereNombre(int min, int max)
min = 0, max = 100.

eST-ce normal ?
Hors ligne Paci # Posté le 10/03/2011 à 19:04:46
Avatar

Oui c'est normale vu que dans le premier cas ton max et min était initialisé et dans le deuxième ils ne le sont plus don tu a du écrire un ligne les initialisant dans ta fonction.
Hors ligne Gianni57540 # Posté le 10/04/2011 à 22:43:09
Tout était bien.
Avatar

Avis : Très bon

Ça commence à devenir un peu plus compliqué. :p

Mieux vaut mourir incompris que passer sa vie à s'expliquer.
 
Hors ligne c/c # Posté le 24/06/2011 à 02:21:46
Avatar

Avis : Très bon

Exercices des prototupes inclure deux fichier différents
Pour le fichier main.c j'ai mit ce code
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <stdlib.h>
#include "proto.h"


int main()
{
    int hauteur, largeur, resultat = 0;
    printf("                         Bienvenu\n\n");
    printf(" -Calculer l'aire d'un rectangle ou  un carre\n\n\n");
    printf(" -Veuliller rentrer vous mesures en centimetres \n\n\n");
    printf("  Entrer la largeur    :     ");
    scanf("%d", &largeur);
    printf("\n");
    printf("  Entrer la hauteur    :     ");
    scanf("%d", &hauteur);
    printf("\n");
    resultat = aire(hauteur, largeur);
    printf("Aire  %d x %d = %d cm",hauteur, largeur, resultat);
    return 0;
}
int aire(int hauteur, int largeur)
{
    return hauteur * largeur;
}




et pour le fichier .h je l'ai nommer proto.h proto pour prototype j'ai mis ce code


Code : C
1
int aire(int hauteur, int largeure);
Hors ligne Hy3rya # Posté le 26/06/2011 à 14:03:34
Algo Mushroom
Avatar

Avis : Mitigé

Wahouuu, ce chapitre viens de m'apparaitre comme une vraie mine d'or! Lors de ma première lecture, j'avais pas fait gaffe a la véritable portée des variables, et surtout au static dans une fontion. J'ai fini un prog grace à ca! Merci!

Image utilisateur
Image utilisateur


En mathématiques, on ne comprend pas les choses, on s’y habitue.
 
Hors ligne azumi-95 # Posté le 06/10/2011 à 03:47:38
Avatar

Bonjour j'aimerais que vous puissier m'aider ...
J'ai un petit probleme, je ne sais pas comment créer un nouveau fichier source dans mon dossier
Hors ligne Sadako # Posté le 30/10/2011 à 14:26:01

Avatar

Avis : Très bon

Ville : Joyeuse
Pays : France métropolitaine

:lol: Bonjour à tous les zéros ! ! Je tiens a te remercier M@teo pour tes tutos, ils sont vraiment géniaux et tellement compréhensibles qu'on fini par se croire intelligent, c'est agréable :p !

«Ce n'est pas le doute, c'est la certitude qui rend fou.»
Friedrich Nietzsche - Ecce Homo
 
Hors ligne flo_rock_69 # Posté le 19/12/2011 à 12:26:20
Avatar

Bonjour, alors tout d'abord, grand merci et grand bravo a M@teo, qui nous fait du tres bon boulot !!

Mais, il y a une petite chose que je n'ai pas bien compris, c'est que lorsque on a plusieurs fichier .c , comment peut on savoir dans quel ordre ils vont etre effectuer.

Par exemple pour essayer de comprendre, j'ai fait un projet contenant:

un fichier main.c :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>
#include "main.h"


int main(int argc, char *argv[])
{
    int nombreEntre=0, nombreQuintuple=0;
    printf("dis un nombre\n");
    scanf("%d", &nombreEntre);

    nombreQuintuple=quintuple(nombreEntre);
    printf("le quintuple de ce nombre est %d", nombreQuintuple);
}


un fichier main.h :
Code : C
1
2
3
4
int quintuple(int nombre)
{
    return 5 * nombre;
}


et un fichier testfonction.c

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <stdio.h>
#include <stdlib.h>

void bonjour()
{
    printf("Hello");

    return 0;

}


alors, voila, quand je compile le tout cela me fait

dis un nombre
3
le quintuple de ce nombre est 15



et la parti du fichier testfonction.c n'apparait pas !

Voila, bon vous avez surement trouve ma question un peu stupide, car a ce que je vois, je suis le seul a ne pa avoir compris :-°

Qui est venu en premier à la vie : le code source ou le compilateur ?
 
Hors ligne pasbel # Posté le 01/01/2012 à 10:07:49

(message transféré sur le forum)
Hors ligne anouarattn # Posté le 11/01/2012 à 06:38:31

Études : Faculté des sciences de Rabat

il y a un truc qui ne sert a rien mais qui marche bien regarder

Image utilisateur

dans aa.txt on met le code

Image utilisateur
:D

donc la j'ai trouvé une grande idée qui va révolutionner le monde de la programmation
au lieu de d'écrire dans un fichier .c ou .txt je vais monter une video avec after effects ou je vais ecrire mon code dans la nature avec les ouxeau les dophins les chiens puis je vais faire #include "mavideo.avi" c'est très simple non!!!
Hors ligne pokmako # Posté le 21/01/2012 à 13:53:50

Avis : Très bon

Super tuto !
Hors ligne Ghost_anon # Posté le 15/02/2012 à 13:56:57
Avatar

Avis : Très bon

Salut !!
Juste pour dire que c'est franchement toujours aussi agréable d'apprendre avec ces tutos!

Un énorme travail de patience a été fait pour notre plus grand plaisir.

un grand MERCI :D
Hors ligne dartdz # Posté le 19/02/2012 à 00:23:34

bonjour a tous,

j'ai quelques petits soucis avec ce chapitre, après avoir fini la lecture je pensait avoir compris et donc je suis passer a la suite et j'ai codé le premier petit programme qu'on nous demande sur les tableau, je l'ai codé en un seul fichier.c et ça marchait puis je me suis dit que j'allait éssayer de le codé en plusieur fichier et la gros problême je n'y suis pas arriver, j'ai donc lu et relu la partie sur la programation modulaire et je ne sais pas ou j'ai faillit. voici mes codes:

main.c
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
#include "main.h"

int main(int argc, char *argv[])
{
int tailleTableau = 5;
int tableau[5] = {5, 5, 6, 9, 10};
int resultat;
resultat = sommeTableau(tableau,tailleTableau);
printf("le resultat est %d",resultat);
return 0;
}


main.h
Code : C
1
2
3
4
5
6
#ifndef SOMME_TAB_H_INCLUDED
#define SOMME_TAB_H_INCLUDED

int sommeTableau(int tableau[], int tailleTableau);

#endif // SOMME_TAB_H_INCLUDED


somme_tab.c
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
#include "main.h"

int sommeTableau(int tableau[], int tailleTableau)
{
int i;
int somme;
for (i=0 ; i<tailleTableau ; i++)
{
somme += tableau[i];
}
return somme;

}



voila donc j'espère que vous pourrez m'aider
Hors ligne acccromaths # Posté le 25/02/2012 à 22:20:41

J'ai voulu faire une fonction pour les nombres aléatoires, mais j'ai un soucis.

int variable(int nombre)
{
const int MAX = 10, MIN = 1;
srand(time(NULL));
nombre= (rand() % (MAX - MIN + 1)) + MIN;
return nombre;
}
//calcul a*b et l'affiche//

int main()
{
int fois;
char nom [100];
int resultat,a,b,reponse,stop,tour=fois;
printf("Bonjour, je m'appelle Ordi.\n Je suis la pour t'apprendre les tables de multiplication.\n Je suis imbattable sur le sujet!\n Mais au fait, comment t'appelles-tu?");
scanf("%s",&nom);
printf("\n%s!!! C'est vraiment un tres beau prenom. \n Bon, au travail!\nCombien de tours veux-tu?",nom);
scanf("%d",&fois);
//changes le nombre de fois quand tu veux

while(stop!=1)
{
int stop=2,tour=fois;
printf("Calcules moi : ");

do
{
a=variable(a);
b=variable(b);

do
{
resultat=a*b;
reponse=calcul(resultat,a,b,tour);//affichage de a*b
tour=calcul2(resultat,reponse,tour);

Le problème, c'est que a est égale à b. J'obtiens toujours 2*2 3*3 ....
Pas vraiment le but recherché. Avant la fonction, ça marchait !!!

Là, ça marche:
do
{
const int MAX = 10, MIN = 1;
srand(time(NULL));
a= (rand() % (MAX - MIN + 1)) + MIN, b= (rand() % (MAX - MIN + 1)) + MIN;
do
{
reponse=0;
printf("\n\n Il te reste %d tours.\n\n%dx%d=",tour,a,b);
scanf("%d",&reponse);
resultat=a*b;

Je tiens vraiment à mettre la fonction. Si quelqu'un a une idée de comment faire....
Hors ligne acccromaths # Posté le 25/02/2012 à 22:34:54

J'ai résolu mon problème:
int variable(int nombre)
{
const int MAX = 10, MIN = 1;
nombre= (rand() % (MAX - MIN + 1)) + MIN;
return nombre;
}

int main()
{
srand(time(NULL));
int fois;
char nom [100];
int resultat,a,b,reponse,stop,tour=fois;
printf("Bonjour, je m'appelle Ordi.\n Je suis la pour t'apprendre les tables de multiplication.\n Je suis imbattable sur le sujet!\n Mais au fait, comment t'appelles-tu?");
scanf("%s",&nom);
printf("\n%s!!! C'est vraiment un tres beau prenom. \n Bon, au travail!\nCombien de tours veux-tu?",nom);
scanf("%d",&fois);
//changes le nombre de fois quand tu veux

while(stop!=1)
{
int stop=2,tour=fois;
printf("Calcules moi : ");


srand(time(NULL));
En mettant time à 0 dans la même fonction, le temps s’écoulant à l'intérieur à la même vitesse...
Le nombre ne pouvait être que le même...
Hors ligne acccromaths # Posté le 25/02/2012 à 22:36:05

Sérieux... Ça sert quand même l'anglais...
Hors ligne lululafrite # Posté le 13/03/2012 à 13:53:03

Avis : Très bon

Bonjour et bravo à toute l'équipe du zero!

La Question ci-dessous est sans objet car j'ai trouvé. En effet lorsque j'ai créé mon fichier .h, je ne l'avais pas lié correctement au projet!!!! :-°

Je souhaite faire un exercice à priori simple, mais je n'y arrive pas. Peut être n'ai-je pas tout compris.
Je veux afficher "Regle du jeu" en exploitant les prototypes, les sources et les headers.
Merci pour votre aide. voir mon exercice ci-dessous.

main.c :
#include <stdio.h>
#include <stdlib.h>
#include "regleDuJeu.h"

int main(int argc, char *argv[])
{
regleDuJeu();
return 0;
}
___________________

regleDuJeu.c :
#include <stdio.h>
#include <stdlib.h>

int regleDuJeu ()
{
printf("\nRegle du jeu\n");
return 0;
}
____________________
regleDuJeu.h
#ifndef REGLEDUJEU_H_INCLUDED
#define REGLEDUJEU_H_INCLUDED

int regleDuJeu ();

#endif // REGLEDUJEU_H_INCLUDED
Pour accéder à cette section
Connectez-vous !
connexion_rpx