Langage c

Fermé
neopremium Messages postés 4 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 22 septembre 2009 - 22 sept. 2009 à 01:08
neopremium Messages postés 4 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 22 septembre 2009 - 22 sept. 2009 à 13:09
Bonjour, aidez moi svp j'ai une soutenance le jeudi prochain et je n'arrive pas a resoudre quelques erreurs dans ce programme voici le code source:


#include<stdio.h>
#define ccnss = 0.0429
#define pcnss = 257.40
#define crt = 0.0475
#define cfp = 0.17
#define pfp = 2000
#define cpf = 15

typedef struct
{
int mat;
char nom[25];
char prenom[25];
int an;
float sb,pa,sm,cnss,rt,fp,smi,igr,smn;
}
employe;

void saisie();
void calcul();
void affich_glob();
void affich_perso();
void affich_defil();
void menu();

employe E[50];
char no[25];
char mp[12];
int ne,u,v;

//u et v: variable de control de lancement des operations
//fonction saisie de donn‚es

void saisie()
{
int i;
clrscr();
//informations g‚n‚rales
printf("entrer le nom de l'orhanisme:");
scanf("%s",&no);
printf("entrer mois de paiement:");
scanf("%s",&mp);
printf("entrer le nom de l'organisme:");
scanf("%s",&ne);
for (i=0;i<ne;i++)
{
clrscr();
printf("--------------------------------------\n");
printf("Information sur l'employ‚:%d\n",i);
printf("--------------------------------------\n");
printf("entrer le matricule:");
scanf("%d",&E[i].mat);
printf("entrer le nom:");
scanf("%s",&E[i].nom);
printf("entrer le prenom:");
scanf("%d",&E[i].prenom);
printf("entrer le salaire de base:");
scanf("%d",&E[i].sb);
printf("entrer l'anciennet‚:");
scanf("%d",E[i].an);
{
u=1;
v=0;
}
//fonction calcul des salaires
void calcul ()
{
int i,j;

float cpa,tigr,cr;

for(i=0;i<ne;i++)
{
if(E[i].an>=20)
cpa=0.2
else
if(E[i].an>=12)
cpa=0.15
else
if(E[i].an>=5)
cpa=0.1
else
if(E[i].an>=2)
cpa=0.05
else
cpa=0;
E[i].pa=E[i].sb*cpa;
E[i].sm=E[i].sb+E[i].pa;

//calcul de la retenue et la retraite
E[i].cnss=E[i].cnss*E[i].sm;
if(E[i].cnss>pcnss)
E[i].cnss=pcnss;
E[i].rt=crt*E[i].sm;
//calcul de l'igr
E[i].fp=cfp*(E[i].sm-E[i].cnss-E[i].rt)
if(E[i].fp>pfp)
E[i].fp=pfp;
E[i].smi=E[i].sm-E[i].fp;
if(E[i].smi>5000)
{
tigr=0.44;
cr=1246.67;
}
else
if(E[i].smi>3000)
{
tigr=0.35;
cr=796.67;
}else
{if(E[i]>2000)
tigr=0.21;
cr=376.67;
}else
{if(E[i]>1666.67)
tigr=0.15;
cr=216.67;
}
tigr=0;
cr=0;
}
E[i].igr=E[i].smi*tigr-cr-cfp*E[i].pf;
E[i].smn=E[i].smi-E[i].igr;
}
v=1;
}
//fonction affichage du tableau des salaires
void affich_glob()
{
int i,j;
clrscr();
gotoxy(20,1);
printf("%s",no);
gotoxy(20,2);
printf("tableau des salaires du mois:%s",mp);
gotoxy(20,3);
printf("-------------------------------");
gotoxy(20,4);
printf("mat nom prenom s.base s.net");
gotoxy(20,5);
printf("-----------------------------------");
j=1;
for(i=0;i<ne;i++)
{
if(i%18==0)
{
printf("tapez une touche pour passer … la s‚rie suivante\n");
getch();
j=1;
clrscr();
}
gotoxy(20,5+j);
write("%s",E[i].mat);
gotoxy(30,4+j);
write("%s",E[i].nom);
gotoxy(40,5+j);
write("%s",E[i].prenom);
gotoxy(50,5+j);
write("%f",E[i].sb);
gotoxy(60,5+j);
write("%f",E[i].smn);
j=j+1;
}
writeln("tapez une touche pour quitter---\n");
getch();
}
//fonction affichage d'un fiche personnelle
void affich_perso()
{
int i,m,trouv;
printf("affichage fiche paie personnelle \n");
printf("entrez le matricule de l'employ‚ : ");
scanf("%s",m);
trouv=0;
i=1;
while((i<=ne)&&(trouv==False))
if(E[i].mat==m)
trouv=1;
else
i++;
if(trouv==0)
printf("il n y a pas d'employ‚ qui a ce matricule !\n");
else
{
clrscr();
gotoxy(10,1);
printf("------------------------------------");
gotoxy(10,2);
printf("%S",no);
gotoxy(30,3);
printf("FICHE DE PAIE");
gotoxy(25,4);
printf("MOIE : %s",mp);
gotoxy(10,5);
printf("------------------------------------");
gotoxy(10,6);
printf("Matricule : %d",E[i].mat);
gotoxy(10,7);
printf("Nom : %s",E[i].nom);
gotoxy(10,8);
printf("Prenom : %s",E[i].prenom);
gotoxy(10,9);
printf("------------------------------------");
gotoxy(10,10);
printf("Anciennet‚: %d",E[i].an);
gotoxy(40,10);
printf("Prime : %d",E[i].pa);
gotoxy(10,12);
printf("Salaire de base : %d",E[i].sb);
gotoxy(40,12);
printf("Salaire mensuel : %d",E[i].sm);
gotoxy(10,14);
printf("CNSS : %d",E[i].cnss);
gotoxy(40,14);
printf("Retraite: %d",E[i].rt);
gotoxy(10,15);
printf("------------------------------------");
gotoxy(10,16);
printf("Frais professionnels : %f",E[i].fp);
gotoxy(10,18);
printf("Salaire imposable : %f",E[i].si);
gotoxy(10,20);
printf("IGR : %f",E[i].igr);
gotoxy(10,21);
printf("------------------------------------");
gotoxy(30,22);
printf("Salaire mensuel Net : %f",E[i].smn);

gotoxy(10,23);

printf("------------------------------------");
gotoxy(20,24);

printf("tapez une touche pour revenir au menu...\n");

getch();
}
}
//fonction defilement … l'ecran des fiches de tous les employ‚s
void affich_defil()
{
int i;
for(i=0;i<nc;i++)
{
clrscr();
gotoxy(1,1);
printf("d‚filement des fiches de paie- Employ‚ Nّ : %d",i);
gotoxy(10,2);
printf("------------------------------------");
gotoxy(10,3);
write("%s",no);
gotoxy(30,4);
write("FICHE DE PAIE");
gotoxy(25,5);
write("Mois : %s",mp);
gotoxy(10,6);
write("-------------------------------------");

gotoxy(10,7);
printf("Matricule : %d",E[i].mat);
gotoxy(10,8);
printf("Nom : %s",E[i].nom);
gotoxy(10,9);
printf("Prenom : %s",E[i].prenom);
gotoxy(10,10);
printf("------------------------------------");

gotoxy(10,11);
printf("Anciennet‚: %d",E[i].an);
gotoxy(40,11);
printf("Prime : %d",E[i].pa);
gotoxy(10,13);
printf("Salaire de base : %d",E[i].sb);
gotoxy(40,13);
printf("Salaire mensuel : %d",E[i].sm);
gotoxy(10,15);
printf("CNSS : %d",E[i].cnss);
gotoxy(40,15);
printf("Retraite: %d",E[i].rt);
gotoxy(10,16);
printf("------------------------------------");

gotoxy(10,17);
printf("Frais professionnels : %f",E[i].fp);
gotoxy(10,19);
printf("Salaire imposable : %f",E[i].si);
gotoxy(10,21);
printf("IGR : %f",E[i].igr);
gotoxy(10,22);
printf("------------------------------------");
gotoxy(30,23);
printf("Salaire mensuel Net : %f",E[i].smn);

gotoxy(10,24);

printf("------------------------------------");
gotoxy(20,25);

printf("tapez une touche pour passer … l'employ‚ suivant ...\n");

getch();
}
}
// fonction menu de gestion
void main ()
{
char choix
clrscr();
gotoxy(24,4);
printf("********************MENU SALAIRES*********************");
gotoxy(24,6);
printf("-------------------------------------SAISIE DE DONNEES");
gotoxy(24,8);
printf("-----------------------------------CALCUL DES SALAIRES");
gotoxy(24,10);
printf("------------------------AFFICHAGE TABLEAU DES SALAIRES");
gotoxy(24,12);
printf("---------------------------AFFICHAGE FICHE PERSONNELLE");
gotoxy(24,14);
printf("-----------------------AFFICHAGE DEFILEMENT DES FICHES");
printf("-----------------------------------------------QUITTER")
gotoxy(26,16);
printf("ENTREZ VOTRE CHOIX : ");
scanf("%c",&choix);
if((v==0)&&(choix>='3')&&(choix<='5'))
printf("On ne peut pas lancer d'affichage. faites les calcules d'abord .!\n");
else
switch(choix)
{
case '1': saisie();
case '2': if(u==0)
printf("On ne peut pas lancer les calcules. faites la saisie de donn‚es d'abord .!\n")
else
calcul();
break;
case '3':affich_glob();
break;
case '4':affich_perso();
break;
case '5':affich_defil();
break;
case '6':exit(1);
default :
{
gotoxy(30,19);
printf("VOTRE CHOIX EST ERRONE.");
}
getch();
}
//fonction principale
void main ()
{ v=0;
u=0;
do
menu();
while(1);
}
A voir également:

4 réponses

neopremium Messages postés 4 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 22 septembre 2009 1
22 sept. 2009 à 13:09
merci bien, j'ai deja trouvé cette erreur
1
mamiemando Messages postés 33545 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 février 2025 7 829
22 sept. 2009 à 01:18
Et bien je ne suis pas surprise :-). En fait il manque pas mal d'accolades fermantes.

Je t'invite vivement à indenter ton code si tu ne le fais pas déjà. Pour les if ... else ... je t'invite dans un premier temps à systématiquement mettre des accolades même s'il n'y a qu'une instruction. Ou alors dans le cas où il n'y a qu'une instruction, écris ladite instruction sur la même ligne que le if ou que le else.

Exemple

if (...)
  ...
else
  ...


devient :

if (...) ....
else ...


Modulo ça il y a des instructions comme :
scanf("%s",&#8800;);

qui n'ont pas de sens...

ou encore :

if (...){
  ....
}else{
  ...
}


Exemple :
...
void saisie()
{
    int i;
    clrscr();
    //informations g‚n‚rales
    printf("entrer le nom de l'orhanisme:");
    scanf("%s",&no);
    printf("entrer mois de paiement:");
    scanf("%s",&mp);
    printf("entrer le nom de l'organisme:");
    scanf("%s",&#8800;);
    for (i=0;i<ne;i++)
    {
        clrscr();
        printf("--------------------------------------\n");
        printf("Information sur l'employ‚:%d\n",i);
        printf("--------------------------------------\n");
        printf("entrer le matricule:");
        scanf("%d",&E[i].mat);
        printf("entrer le nom:");
        scanf("%s",&E[i].nom);
        printf("entrer le prenom:");
        scanf("%d",&E[i].prenom);
        printf("entrer le salaire de base:");
        scanf("%d",&E[i].sb);
        printf("entrer l'anciennet‚:");
        scanf("%d",E[i].an);
        {
            u=1;
            v=0;
        }
        //fonction calcul des salaires
        void calcul ()
...

Grâce à l'indentation on voit clairement que la fonction calcul est déclarée dans la boucle for de la fonction saisie (ce qui n'a pas de sens).

Ça peut paraître un peu naïf mais c'est le genre de truc qui sauve la vie (notamment quand on rajoute une instruction dans un bloc, on est sûr de pas se faire avoir). Par rapport au code il est dommage que tu utilises conio.h et les fonctions qui en dépendent (gotoxy etc...) car du coup le programme n'est pas portable.

Je ne sais pas ce que tu utilises pour coder, mais je t'invite à utiliser un éditeur qui indente le code (par exemple devcpp, code::blocks, gvim etc...).

Il y a également des instructions qui n'ont pas de sens comme par exemple :

scanf("%s",&#8800;);


En effet la chaîne manipulée est considérée ANSI. ... Or ≠ est un caractère unicode. Il faut donc soit manipuler une chaîne unicode, soit se restreindre à l'utilisation de caractère ANSI. Les chaines unicode sont préfixées par un L (par exemple L"pouet" au lieu de "pouet) et chaque caractère occupe deux bytes au lieu d'un.

Bonne chance
0
neopremium Messages postés 4 Date d'inscription mardi 16 décembre 2008 Statut Membre Dernière intervention 22 septembre 2009 1
22 sept. 2009 à 01:22
merci bien je vais essayer d'appliquer ce que tu m'as dit .
j'utilise le turbo c
0
watou Messages postés 199 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 19 avril 2013 28
22 sept. 2009 à 13:00
au lieu de faire ceci :

#define ccnss = 0.0429
#define pcnss = 257.40
#define crt = 0.0475
#define cfp = 0.17
#define pfp = 2000
#define cpf = 15

faites plutot cela :

#define ccnss 0.0429
#define pcnss 257.40
#define crt 0.0475
#define cfp 0.17
#define pfp 2000
#define cpf 15

// #define identificateur valeur !!!!
// ou identificateur est celui que vous allez utiliser dans votre programme
// et il sera remplacé par valeur lors de la compilation par le preprocesseur c !!
0