LANGAGE C

Résolu/Fermé
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 - 11 nov. 2008 à 09:26
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 - 11 nov. 2008 à 13:43
Bonjour,
J'ai un algo à traduire en C qui gère les procédures et les fonctions seulement j'ai un petiti souci je crois que je me suis trompé dans les signature de mes fonctions et c'est pour cela que qand je le compile il me sorte pleins de faute donc si vous pouviez m'aider ça serat super sympa merci d'avance je mets ce que j'ai déjà fait.

#include<stdio.h>
#include<stdlib.h>
void afficher_menu();
float addition(float n1, n2);
float soustraction(float n1, n2);
float multiplication(float n1 ,n2);
float division(float n1 ,n2);
int main (void)
{
char choix;
float nb1,nb2,res;
do
{
afficher_menu();
printf("\nSaissiez votre choix");
scanf("%c",&choix);
if (choix != 'f')
{
printf("\nSaisir deux nombres");
scanf("%f",&nb1);
scanf("%f",&nb2);
switch(choix) {
case 'a':
res = addition(nb1,nb2);
break;
case 's':
res = soustraction(nb1,nb2);
break;
case 'm':
res = multiplication(nb1,nb2);
break;
case 'd':
res = division(nb1,nb2);
break;
default:
res = 0;
}
printf("\nRésultat de l'opération = %f",res);
}
while(choix == 'f')
}
return EXIT_SUCCESS;
}


void afficher_menu()
{
printf("\nAddition : a");
printf("\nSoustraction : s");
printf("\nMultiplication : m");
printf("\nDivision : d");
printf("\nFin : f");
}


float addition(float n1,n2)
{
float resultat;
resultat = n1 + n2;
return resultat;
}


float soustraction(float n1,n2)
{
float resultat;
resultat = n1 - n2;
return resultat;
}


float multiplication(float n1,n2)
{
float resultat;
resultat = n1 * n2;
return resultat;
}

float division(float n1,n2)
{
float resultat;
while(n2 == 0)
{
printf("\nDivision par 0 impossible");
scanf("%f",&n2);
}
resultat = n1 / n2;
return resultat;
}

14 réponses

MRAD Messages postés 86 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 17 avril 2009 4
11 nov. 2008 à 10:07
Bonjour,
Est ce que on peut avoir la liste des erreurs affichées quand tu compile .
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
11 nov. 2008 à 10:12
Pas de problème je te les mets merci d'avance pour l'aide que tu vas m'apporter
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
11 nov. 2008 à 10:16
Voici la liste des erreurs quand je compile :

calculette.c:4: erreur: expected declaration specifiers or «...» before «n2»
calculette.c:5: erreur: expected declaration specifiers or «...» before «n2»
calculette.c:6: erreur: expected declaration specifiers or «...» before «n2»
calculette.c:7: erreur: expected declaration specifiers or «...» before «n2»
calculette.c: Dans la fonction «main» :
calculette.c:24: erreur: trop d'arguments pour la fonction «addition»
calculette.c:27: erreur: trop d'arguments pour la fonction «soustraction»
calculette.c:30: erreur: trop d'arguments pour la fonction «multiplication»
calculette.c:33: erreur: trop d'arguments pour la fonction «division»
calculette.c:41: erreur: expected expression before «}» token
calculette.c:42: erreur: expected «while» before «return»
calculette.c: Hors de toute fonction :
calculette.c:54: erreur: expected declaration specifiers or «...» before «n2»
calculette.c: Dans la fonction «addition» :
calculette.c:57: erreur: «n2» undeclared (first use in this function)
calculette.c:57: erreur: (Each undeclared identifier is reported only once
calculette.c:57: erreur: for each function it appears in.)
calculette.c: Hors de toute fonction :
calculette.c:61: erreur: expected declaration specifiers or «...» before «n2»
calculette.c: Dans la fonction «soustraction» :
calculette.c:64: erreur: «resultat» undeclared (first use in this function)
calculette.c:64: erreur: «n2» undeclared (first use in this function)
calculette.c: Hors de toute fonction :
calculette.c:68: erreur: expected declaration specifiers or «...» before «n2»
calculette.c: Dans la fonction «multiplication» :
calculette.c:71: erreur: «resultat» undeclared (first use in this function)
calculette.c:71: erreur: «n2» undeclared (first use in this function)
calculette.c:72: erreur: «resultat» undeclared (first use in this function)
calculette.c: Hors de toute fonction :
calculette.c:75: erreur: expected declaration specifiers or «...» before «n2»
calculette.c: Dans la fonction «division» :
calculette.c:78: erreur: «n2» undeclared (first use in this function
0
MRAD Messages postés 86 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 17 avril 2009 4
11 nov. 2008 à 10:42
Bon, voila ->


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

void afficher_menu();
float addition(float, float); //declare le type pour chaque variable des parametre formelle
float soustraction(float, float);
float multiplication(float, float);
float division(float, float);
int main (void)
{
char choix;
float nb1,nb2,res;
do
{
afficher_menu();
printf("\nSaissiez votre choix");
scanf("%c",&choix);
if (choix != 'f')
{
printf("\nSaisir deux nombres");
scanf("%f",&nb1);
scanf("%f",&nb2);
switch(choix) {
case 'a':
res = addition(nb1,nb2);
break;
case 's':
res = soustraction(nb1,nb2);
break;
case 'm':
res = multiplication(nb1,nb2);
break;
case 'd':
res = division(nb1,nb2);
break;
default:
res = 0;
}
printf("\nRésultat de l'opération = %f",res);
}
while(choix == 'f')
}
return EXIT_SUCCESS;
}


void afficher_menu()
{
printf("\nAddition : a");
printf("\nSoustraction : s");
printf("\nMultiplication : m");
printf("\nDivision : d");
printf("\nFin : f");
}


float addition(float n1, float n2)
{
float resultat;
resultat = n1 + n2;
return resultat;
}


float soustraction(float n1, float n2)
{
float resultat;
resultat = n1 - n2;
return resultat;
}


float multiplication(float n1, float n2)
{
float resultat;
resultat = n1 * n2;
return resultat;
}

float division(float n1, float n2)
{
float resultat;
while(n2 == 0)
{
printf("\nDivision par 0 impossible");
scanf("%f",&n2);
}
resultat = n1 / n2;
return resultat;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
11 nov. 2008 à 10:51
Merci bien mets dans ton code il y a un truc que je ne comprend pas pourquoi au tout début du programme quand tu déclare les fonction tu fait par exemple :

float addition(float,float) et pas float addition(float nomvariable1,float nomvariable2) ?
0
MRAD Messages postés 86 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 17 avril 2009 4
11 nov. 2008 à 11:02
Bon, la fonction addition prend comme paramètres formelles deux réel (float), c'est pourquoi on a écrit (float,float), en générale : si on utilise n paramètres, on déclare n type séparés par des virgules.

Et comme ce sont juste des déclarations des fonctions, il suffit juste de écrire les types des paramètres pas nécessairement les nom des paramètres.
0
SOUMbelgique Messages postés 18 Date d'inscription mardi 28 octobre 2008 Statut Membre Dernière intervention 11 novembre 2008
11 nov. 2008 à 10:59
lors de la déclaration de ta fonction, tu dois juste indiquer le type mais tu peux également indiquer le nom de ta variable mais c'est accessoire.

float division(float,float); est idem à float division(float x, float y);

par contre lors de l'appel de ta fonction tu dois les indiquer
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
11 nov. 2008 à 11:11
Merci, pour la réponse mais je me demandais comme ma prof me les a toujours fait mettre et je vais t'embéter une dernière fois il me reste deux fautes :
calculette.c: Dans la fonction «main» :
calculette.c:41: erreur: expected expression before «}» token
calculette.c:42: erreur: expected «while» before «return»

Cela veut dire pour la ligne 41 qu'il faut mettre } avant l'expression et pour la ligne 42 qu'il faut mettre le return avant le while ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
11 nov. 2008 à 11:23
Salut.
Plusieurs petites erreurs.
Dans un prototype de fonction, le type n'est pas distributif. Donc tu peux pas faire :
float addition(float n1,n2) mais float addition(float n1, float n2)
Tu as aussi oublié un ; à la fin de ton while et fait une erreur de fermeture de while (erreur d'inattention je pense).
Dans ta fonction division. Tu as oublié de faire return
Note, tu as le droit de faire : return n1+n2. T'es pas obligé de déclarer float res pour ça.

Sinon, quand tu postes, n'oublie pas d'utiliser la balise code (à droite du bouton souligner). Cela permet de garder l'indentation, et c'est beaucoup plus lisible.

Si t'as d'autres questions, n'hésite pas.
#include<stdio.h>
#include<stdlib.h>

void afficher_menu();
float addition(float n1, float n2);
float soustraction(float n1, float n2);
float multiplication(float n1 ,float n2);
float division(float n1 ,float n2);

int main (void)
{
    char choix;
    float nb1,nb2,res;
    do
    {
        afficher_menu();
        printf("\nSaissiez votre choix");
        scanf("%c",&choix);
        if (choix != 'f')
        {
            printf("\nSaisir deux nombres");
            scanf("%f",&nb1);
            scanf("%f",&nb2);
            switch(choix) {
                case 'a':
                    res = addition(nb1,nb2);
                    break;
                case 's':
                    res = soustraction(nb1,nb2);
                    break;
                case 'm':
                    res = multiplication(nb1,nb2);
                    break;
                case 'd':
                    res = division(nb1,nb2);
                    break;
                default:
                    res = 0;
            }
            printf("\nRésultat de l'opération = %f",res);
        }
        }while(choix != 'f');
    return EXIT_SUCCESS;
}


void afficher_menu()
{
    printf("\nAddition : a");
    printf("\nSoustraction : s");
    printf("\nMultiplication : m");
    printf("\nDivision : d");
    printf("\nFin : f\n");
}


float addition(float n1,float n2)
{
    float resultat;
    resultat = n1 + n2;
    return resultat;
}


float soustraction(float n1,float n2)
{
    float resultat;
    resultat = n1 - n2;
    return resultat;
}


float multiplication(float n1,float n2)
{
    float resultat;
    resultat = n1 * n2;
    return resultat;
}

float division(float n1,float n2)
{
    float resultat;
    while(n2 == 0)
    {
        printf("\nDivision par 0 impossible");
        scanf("%f",&n2);
    }
    resultat = n1 / n2;
    return resultat;
}

Cdlt
0
MRAD Messages postés 86 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 17 avril 2009 4
11 nov. 2008 à 11:25
int main (void)
{
char choix;
float nb1,nb2,res;
do
{
afficher_menu();
printf("\nSaissiez votre choix");
scanf("%c",&choix);
if (choix != 'f')
{
printf("\nSaisir deux nombres");
scanf("%f",&nb1);
scanf("%f",&nb2);
switch(choix) {
case 'a':
{
res = addition(nb1,nb2);
break;
}
case 's':
{
res = soustraction(nb1,nb2);
break;
}
case 'm':
{
res = multiplication(nb1,nb2);
break;
}
case 'd':
{
res = division(nb1,nb2);
break;
}
default : res = 0;
} // fin de "switch"
printf("\nRésultat de l'opération = %f",res);

} // fin de "if"
} // fin de "do"
while(choix == 'f');

return EXIT_SUCCESS;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
11 nov. 2008 à 11:29
Salut,
Quand tu postes, un code, merci d'utiliser la balise code (à droite de souligner), sinon c'est illisible.
Sinon t'as oublié aussi de corriger le while(choix!='f'); ;)
Cdlt
0
MRAD Messages postés 86 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 17 avril 2009 4
11 nov. 2008 à 11:33
Merci, j'ai pas fais attention.
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
11 nov. 2008 à 12:17
Bonjour, j'ai un autre petit programme à faire à l'aide d'une fonction : c'est un programme qi traite des puissance je vous met ce que j'ai codé je ne l'ai pas encore compilé donc il se peut qu'il y est des petites fautes mais la où je suis sur qu'il y en a une c'est a la ligne 33 quand je met k = (1)/(x^k) je sais que le ^ ne peut pas faire office de puissance mais je ne vois pas ce qui faut mettre à la place ou peut etre qu'il faut changé mon algo je ne sais pas. Merci d'avance pour votre aide !!

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

float fct_puissance(float x, int k);
int main (void)
{
	float nb,res;
	int puissance;
	printf("\nSaisir un nombre");
	scanf("%f",&nb);
	printf("\nSaisir la puissance du nombre);
	scanf("%d",&puissance);
	res = fct_puissance(nb,puissance);
	printf("\n%f à la puissance %d vaut : %f\n",nb,puissance,res);
}

float fct_puissance(float x, int k)
{
	int cpt;
	float puiss;
	if (k == 0)
	{
		puiss == 1;
	}
	else if (k > 0)
	{
		for (cpt = 1; cpt <= k; cpt++){
			puiss = puiss * x;
		}
	}
	else if (k < 0)
	{
		k = (1)/(x^k);
		for (cpt = 1; cpt <= k; cpt++){
			puiss = puiss * x;
		}
	}
	return puiss;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
11 nov. 2008 à 13:10
Salut,
J'ai pas du tout lu ton code, je te laisse le plaisir de compiler lol.
Sinon pour utiliser la puissance, soit tu te fais la fonction tout seul soit tu utilises la fonction pow de la bibliothèque math.h.
Cdlt
0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
11 nov. 2008 à 13:14
Oki bah j'ai le temps de compiler et de corriger mes fautes et de changer 2 3 truc dans mon code mais maintenant quand je saisie mon nombre et ma puissance j'ai toujours 0 en résultat . Donc la je vais vous mettre ce que j'ai codé et enfaite la prof nous a demandé les deux de crer la fonction nous meme et de vérifier les résultat à l'aide pow.

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

float fct_puissance(float x, int k);
int main (void)
{
	float nb,res;
	int puissance;
	printf("\nSaisir un nombre");
	scanf("%f",&nb);
	printf("\nSaisir la puissance du nombre");
	scanf("%d",&puissance);
	res = fct_puissance(nb,puissance);
	printf("\n%f à la puissance %d vaut : %f",nb,puissance,res);
	return EXIT_SUCCESS;
}

float fct_puissance(float x, int k)
{
	int cpt;
	float i,puiss;
	if (k == 0)
	{
		return puiss == 1;
	}
	else if (k > 0)
	{
		for (cpt =1; cpt <= k; cpt++){
			return puiss = puiss * x;
		}
	}
	else if (k < 0)
	{
		for (cpt =1; cpt <= k; cpt++){
		i = i * x;
		return puiss = 1/puiss;
		}
	}

}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
11 nov. 2008 à 13:35
T'as oublié d'initialiser puiss dans ta fonction fct_puissance.
Et des petites erreurs d'algorithme. Je te laisse comparer.
#include<stdio.h>
#include<stdlib.h>

float fct_puissance(float x, int k);
int main (void)
{
    float nb,res;
    int puissance;
    printf("\nSaisir un nombre");
    scanf("%f",&nb);
    printf("\nSaisir la puissance du nombre");
    scanf("%d",&puissance);
    res = fct_puissance(nb,puissance);
    printf("\n%f à la puissance %d vaut : %f",nb,puissance,res);
    return EXIT_SUCCESS;
}

float fct_puissance(float x, int k)
{
    int cpt;
    float puiss=1;
    if (k == 0)
    {
        return 1;
    }
    else if (k > 0)
    {
        for (cpt =1; cpt <= k; cpt++){
            puiss = puiss * x;
        }
    }
    else if (k < 0)
    {
        for (cpt =1; cpt <= -k; cpt++){
            puiss = puiss * 1/x;
        }
    }
    return puiss;

}

0
rafale69300 Messages postés 84 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 15 juin 2010 2
11 nov. 2008 à 13:43
Merci bien je viens de voir mes fautes et de les comprendre c'est le plus important merci !!
0