Sos programmation en c
Fermé
gdavis
Messages postés
4
Date d'inscription
samedi 7 juin 2008
Statut
Membre
Dernière intervention
13 juin 2008
-
7 juin 2008 à 19:16
gdavis - 23 juin 2008 à 20:21
gdavis - 23 juin 2008 à 20:21
A voir également:
- Sos programmation en c
- Application de programmation - Guide
- Mettre en veille un programme - Guide
- Programmation logo tortue télécharger - Télécharger - Études & Formations
- Programmation télécommande porte de garage brico depot - Forum Matériel & Système
5 réponses
choubaka
Messages postés
39409
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
24 décembre 2024
2 104
7 juin 2008 à 19:18
7 juin 2008 à 19:18
Salut
en gros, tu veux qu'on fasse tes devoirs ...
sale période pour les forums d'entraide
en gros, tu veux qu'on fasse tes devoirs ...
sale période pour les forums d'entraide
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
7 juin 2008 à 19:30
7 juin 2008 à 19:30
Salut,
un p'tit coup de pouce
pour le reste bon courage ;-)
un p'tit coup de pouce
pour le reste bon courage ;-)
choubaka
Messages postés
39409
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
24 décembre 2024
2 104
7 juin 2008 à 20:11
7 juin 2008 à 20:11
Bonjour et merci à tous ceux qui me sont venu en aide jusqu'ici.
J'ai pu trouvé une solution à mon premier prob précédemment posé.
J'aimerai effectuer l'opération inverse.
C'est à dire
Un programme qui lit une expression sous la forme fonctionnelle et
affiche sa forme préfixée et sa forme post fixée
En fait: voici mon programme.
Les parties marquée en gras me donnent encore des maux de tête
Dans le main
l'appel des fonction,
- saisie_fonctionnelle(deb, y)
- affichage_prefixe(y)
- affichage_postfixe(y)
présentent des erreurs suivant:
- suspicious pointer conversion in function ...
- possible use of 'deb' before definition function
- possible use of 'y' before definition function
/* PROGRAMME PERMETTANT DE LIRE UNE EXPRESSION SOUS LA FORME FONCTIONNELLE */
/* ET AFFICHE SA REPRESENTATION SOUS LA FORME PREFIXEE D4UNE PART */
/* ET SOUS LA FORME POSTFIXEE D4AUTRE PART */
#include <stdio.h>
#include<stdlib.h>
#include<alloc.h>
/* Les composantes de l'arbre seront donc soit des opérateurs (noeuds),*/
/* soit des opérandes (feuilles). Nous allons choisir les déclarations suivantes :*/
typedef float type_feuille;
typedef struct s_noeud_2
{char op_c;
struct s_comp*fils1;
struct s_comp*fils2;
}type_noeud_2;
typedef struct s_noeud_1
{char op_c;
struct s_comp*fils;
}type_noeud_1;
typedef struct s_comp
{int arite;
union
{type_noeud_2 n2;
type_noeud_1 n1;
type_feuille f;
}val;
}composante;
typedef composante *lien;
lien saisie_fonctionnelle(char **deb, lien x);
void affiche_prefixe(lien x);
void affiche_postfixe(lien x);
type_noeud_2 *alloc();
/* PARTIE PRINCIPALE */
main ()
{
type_noeud_2 *deb;
lien y;
/*deb = NULL; /*
printf ("ENTRER L'EXPRESION FONCTIONNELLE \n");
printf (" \n");
/* Saisie de l'expression fonctionnelle */
printf ("Saisie une expression fonctionnelle \n ");
do
{
c;
}
while (deb == '&');
/* Affichage de la forme préfixée */
printf ("La representation préfixée est : ");
affiche_prefixe(y);
/* Affichage de la forme prostfixée */
printf ("La représentation postfixée est : ");
affiche_postfixe(y);
return 0;
}
/* Fonction créant l'arbre à partir d'une chaîne de caractères préalablement saisie.*/
/* de l'expression fonctionnelle*/
/* Les opérateurs possibles sont +,-,*,/(deuxaires), C,S(cos,sin,unaires).*/
/* Les caractères '(', ')' et ',' sont des séparateurs */
/* Un nombre commence par un chiffre (exemple 0.7 au lieu de .7). */
/* deb pointe sur le début de chaîne, il pointera ensuite sur le reste de la chaîne */
/* (pas encore traitée) donc passage par adresse d'un pointeur */
lien saisie_fonctionnelle(char **deb, lien x)
{
printf("entrez opérandes (nombres) et opérateurs (+,-,*,/,C (cos),S)\n");
printf("séparés par parenthèses ouvrantes, fermantes ou des virgules \n");
printf(" \n");
while(**deb=='('||**deb==')'||**deb==',') (*deb)++;
if(**deb==0) /* on est arrivé en fin de chaîne */
{puts("erreur : Il doit manquer des opérandes");
return(NULL);}
x=(composante*)malloc(sizeof(composante));
if(isdigit(**deb))
{
x->arite=0;
sscanf(*deb,"%f",&(x->val.f));
while(isdigit(**deb)||**deb=='.') (*deb)++;
}
else
{
char c;
c=toupper(*((*deb)++));
if(c=='*'||c=='/'||c=='+'||c=='-')
{
x->arite=2;
x->val.n2.op_c=c;
x->val.n2.fils1=saisie_fonctionnelle(deb,x);
x->val.n2.fils2=saisie_fonctionnelle(deb,x);
}
else if(c=='C'||c=='S')
{
x->arite=1;
x->val.n1.op_c=c;
x->val.n1.fils=saisie_fonctionnelle(deb,x);
}
else printf("erreur, '%c'n'est pas un opérateur prévu\n",c);
}
return(x);
}
/* Utilisation de l'arbre pour afficher sa représentation fonctionnelle. */
/* On affiche la valeur du noeud puis le fils gauche et le fils droit séparé*/
/* par une virgule et tous deux entre parenthèse. */
void affiche_prefixe(lien x)
{
switch(x->arite)
{
case 0:printf("%6.1f ",x->val.f);break;
case 1:printf(" %C ",x->val.n1.op_c);
affiche_prefixe(x->val.n1.fils);
break;
case 2:printf(" %c ",x->val.n2.op_c);
affiche_prefixe(x->val.n2.fils1);
affiche_prefixe(x->val.n2.fils2);
break;
}
}
void affiche_postfixe(lien x)
{
switch(x->arite)
{
case 0:printf("%6.1f ",x->val.f);break;
case 1:affiche_postfixe(x->val.n1.fils);
printf(" %C ",x->val.n1.op_c);
break;
case 2:affiche_postfixe(x->val.n2.fils1);
affiche_postfixe(x->val.n2.fils2);
printf(" %c ",x->val.n2.op_c);
}
}
J'ai pu trouvé une solution à mon premier prob précédemment posé.
J'aimerai effectuer l'opération inverse.
C'est à dire
Un programme qui lit une expression sous la forme fonctionnelle et
affiche sa forme préfixée et sa forme post fixée
En fait: voici mon programme.
Les parties marquée en gras me donnent encore des maux de tête
Dans le main
l'appel des fonction,
- saisie_fonctionnelle(deb, y)
- affichage_prefixe(y)
- affichage_postfixe(y)
présentent des erreurs suivant:
- suspicious pointer conversion in function ...
- possible use of 'deb' before definition function
- possible use of 'y' before definition function
/* PROGRAMME PERMETTANT DE LIRE UNE EXPRESSION SOUS LA FORME FONCTIONNELLE */
/* ET AFFICHE SA REPRESENTATION SOUS LA FORME PREFIXEE D4UNE PART */
/* ET SOUS LA FORME POSTFIXEE D4AUTRE PART */
#include <stdio.h>
#include<stdlib.h>
#include<alloc.h>
/* Les composantes de l'arbre seront donc soit des opérateurs (noeuds),*/
/* soit des opérandes (feuilles). Nous allons choisir les déclarations suivantes :*/
typedef float type_feuille;
typedef struct s_noeud_2
{char op_c;
struct s_comp*fils1;
struct s_comp*fils2;
}type_noeud_2;
typedef struct s_noeud_1
{char op_c;
struct s_comp*fils;
}type_noeud_1;
typedef struct s_comp
{int arite;
union
{type_noeud_2 n2;
type_noeud_1 n1;
type_feuille f;
}val;
}composante;
typedef composante *lien;
lien saisie_fonctionnelle(char **deb, lien x);
void affiche_prefixe(lien x);
void affiche_postfixe(lien x);
type_noeud_2 *alloc();
/* PARTIE PRINCIPALE */
main ()
{
type_noeud_2 *deb;
lien y;
/*deb = NULL; /*
printf ("ENTRER L'EXPRESION FONCTIONNELLE \n");
printf (" \n");
/* Saisie de l'expression fonctionnelle */
printf ("Saisie une expression fonctionnelle \n ");
do
{
c;
}
while (deb == '&');
/* Affichage de la forme préfixée */
printf ("La representation préfixée est : ");
affiche_prefixe(y);
/* Affichage de la forme prostfixée */
printf ("La représentation postfixée est : ");
affiche_postfixe(y);
return 0;
}
/* Fonction créant l'arbre à partir d'une chaîne de caractères préalablement saisie.*/
/* de l'expression fonctionnelle*/
/* Les opérateurs possibles sont +,-,*,/(deuxaires), C,S(cos,sin,unaires).*/
/* Les caractères '(', ')' et ',' sont des séparateurs */
/* Un nombre commence par un chiffre (exemple 0.7 au lieu de .7). */
/* deb pointe sur le début de chaîne, il pointera ensuite sur le reste de la chaîne */
/* (pas encore traitée) donc passage par adresse d'un pointeur */
lien saisie_fonctionnelle(char **deb, lien x)
{
printf("entrez opérandes (nombres) et opérateurs (+,-,*,/,C (cos),S)\n");
printf("séparés par parenthèses ouvrantes, fermantes ou des virgules \n");
printf(" \n");
while(**deb=='('||**deb==')'||**deb==',') (*deb)++;
if(**deb==0) /* on est arrivé en fin de chaîne */
{puts("erreur : Il doit manquer des opérandes");
return(NULL);}
x=(composante*)malloc(sizeof(composante));
if(isdigit(**deb))
{
x->arite=0;
sscanf(*deb,"%f",&(x->val.f));
while(isdigit(**deb)||**deb=='.') (*deb)++;
}
else
{
char c;
c=toupper(*((*deb)++));
if(c=='*'||c=='/'||c=='+'||c=='-')
{
x->arite=2;
x->val.n2.op_c=c;
x->val.n2.fils1=saisie_fonctionnelle(deb,x);
x->val.n2.fils2=saisie_fonctionnelle(deb,x);
}
else if(c=='C'||c=='S')
{
x->arite=1;
x->val.n1.op_c=c;
x->val.n1.fils=saisie_fonctionnelle(deb,x);
}
else printf("erreur, '%c'n'est pas un opérateur prévu\n",c);
}
return(x);
}
/* Utilisation de l'arbre pour afficher sa représentation fonctionnelle. */
/* On affiche la valeur du noeud puis le fils gauche et le fils droit séparé*/
/* par une virgule et tous deux entre parenthèse. */
void affiche_prefixe(lien x)
{
switch(x->arite)
{
case 0:printf("%6.1f ",x->val.f);break;
case 1:printf(" %C ",x->val.n1.op_c);
affiche_prefixe(x->val.n1.fils);
break;
case 2:printf(" %c ",x->val.n2.op_c);
affiche_prefixe(x->val.n2.fils1);
affiche_prefixe(x->val.n2.fils2);
break;
}
}
void affiche_postfixe(lien x)
{
switch(x->arite)
{
case 0:printf("%6.1f ",x->val.f);break;
case 1:affiche_postfixe(x->val.n1.fils);
printf(" %C ",x->val.n1.op_c);
break;
case 2:affiche_postfixe(x->val.n2.fils1);
affiche_postfixe(x->val.n2.fils2);
printf(" %c ",x->val.n2.op_c);
}
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bsoir.
C'est cette partie principale qui dérange mon compilateur.
/* PARTIE PRINCIPALE */
main ()
{
type_noeud_2 *deb;
lien y;
/*deb = NULL; /*
printf ("ENTRER L'EXPRESION FONCTIONNELLE \n");
printf (" \n");
/* Saisie de l'expression fonctionnelle */
printf ("Saisie une expression fonctionnelle \n ");
do
{
lien saisie_fonctionnelle(deb, y); ;
}
while (deb == '&');
/* Affichage de la forme préfixée */
printf ("La representation préfixée est : ");
affiche_prefixe(y);
/* Affichage de la forme prostfixée */
printf ("La représentation postfixée est : ");
affiche_postfixe(y);
return 0;
}
Certainement je ne sais pas encore faire les appels corrects de fonction en c.
Je rampe encore en c. C'est pas bon.
A+
C'est cette partie principale qui dérange mon compilateur.
/* PARTIE PRINCIPALE */
main ()
{
type_noeud_2 *deb;
lien y;
/*deb = NULL; /*
printf ("ENTRER L'EXPRESION FONCTIONNELLE \n");
printf (" \n");
/* Saisie de l'expression fonctionnelle */
printf ("Saisie une expression fonctionnelle \n ");
do
{
lien saisie_fonctionnelle(deb, y); ;
}
while (deb == '&');
/* Affichage de la forme préfixée */
printf ("La representation préfixée est : ");
affiche_prefixe(y);
/* Affichage de la forme prostfixée */
printf ("La représentation postfixée est : ");
affiche_postfixe(y);
return 0;
}
Certainement je ne sais pas encore faire les appels corrects de fonction en c.
Je rampe encore en c. C'est pas bon.
A+
19 juin 2008 à 18:58
Tu joues au moraliste!
Si tu ne peux pas lui donner un coup de pouce tu la ferme carrement.
Nous ne somme pas dans une salle de classe ou dans un amphi théatre.
J'ai par exemple dans mon environnement plein de très bon programmeurs qui ont apris par cette méthode là. Et qui n'ont jamais eu de prof en présentiel.
Tu crois que c'est la formule de la bombe atomique que tu vas lui fournir.
Je sui un programmeur en java et je suis pret à lui fournir le code d'ici une semaine s'il peut le traduire ec.
ON NE RECONSTRUIT pAS LE MONDE.
Good afternoon.
19 juin 2008 à 22:33
je suis programmeur java aussi depuis plus de 10 ans...
et j'en ai marre de devoir bosser avec des programmeur "copier/coller" ...
alors si tu veux te taper le boulot des autres c'est ton problème .. En attendant, ils toucheront leurs salaires quand même quand ils seront embauchés pour "leurs bons résultats", même si des "bonnes âmes comme toi" le font à leur place... alors regarde un peu plus loin que ton nez le moraliste...
c'est quoi ces zozos...
nan mais ho !
19 juin 2008 à 22:50
des feignasses ?!
20 juin 2008 à 10:00
C'est vraiment de la dérive qui veut s'installer là.
Ou vous assistez ou vous passez à autres choses.
Il ya trop à faire encore dans ce monde.
un seul mot:
ne perdez pas votre temps à juger les autres.
Et surtout ici c'est zéro salaire.
Je suis un partisant du libre.
A+
20 juin 2008 à 10:03
ON BOSSE.