breaveheart19_28
Messages postés6Date d'inscriptionvendredi 17 décembre 2010StatutMembreDernière intervention19 décembre 2010
-
Modifié par Chris 94 le 18/12/2010 à 02:43
Chris 94
Messages postés50978Date d'inscriptionmardi 8 janvier 2008StatutModérateurDernière intervention17 février 2023
-
18 déc. 2010 à 02:47
Bonjour, j'ai ecrit un programme en c mais il ne marche pas
voici l'énnoncé de l'exercice
soit un fichier binaire contenant les mesures de températures effectuées sur différentes villes à différentes dates.chaque enregistrement à la forme suivante<ville date temperature>
donner un programme en c qui permet de:
connaitre la temperature minimale.maximale et moyenne pour une ville donnée
rajouter un nouveau enregistrement
modifier la temperature d'une ville donnée à une date donnée
supprimer ts les enreg relatifs à une ville donnée
le voici mon programme
/*****hhhhhhh bonne lecture*******/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct temp_ville
{
char ville [50];
int date [100];
int temp [100];
int pos ;/* la derniere position occupée*/
};
struct bloc
{
struct temp_ville val;
struct bloc *suiv;
};
struct maillon
{
int num;
struct maillon *suivant ;
};
typedef struct bloc bloc;
typedef struct maillon maillon;
int main()
{
/******** le programme que j'ai ecrit et long car il y a bcp de vérifications qui se repetent*****/
/***il n'y a pas d'erreurs dans mon programme mais pour une raison ou une autre il n'ecrit pas dans le fichier*****/
bloc *tete=NULL;
bloc *p=NULL ,*k=NULL;
bloc *t=NULL ,*h=NULL,*queue=NULL;
FILE *fichier;
maillon *g=NULL,*tete2=NULL,*queue2=NULL,*l=NULL;
char nomfichier[50];
char tab[50];
char ancienneville[50];
int i,j,a,b,c,min,max,confirme=0,cpt=0,arret=0,trouv=0,supprime=0,moy=0,entree=0;
while(!arret)
{
arret=0;
p=malloc(sizeof(bloc));
p->val.pos=0;
if(p!=NULL)
{
do{
confirme=0;
printf("\n veuillez introduire le nom de la ville svp :") ;
scanf("%s",p->val.ville);
printf("\n voulez-vous modifier le nom de la ville????? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
printf ("\n veuillez introduire la date svp: ");
do{
confirme=0;
printf("\n \t le jour :") ;
scanf("%d",&a);
while((a>31) ||(a<0))
{
printf("\n il y a une erreur \n veuillez introduire le jour une autre fois svp:");
printf("\n le jour : ");
scanf("%d",&a);
};
printf("\n voulez-vous modifier le jour ?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
do{
confirme=0;
printf("\n \t le mois :") ;
scanf("%d",&b);
while((b>12)||(b<0))
{
printf("\n il y a une erreur \n veuillez introduire le mois une autre fois svp:");
printf("\n le mois : ");
scanf("%d",&b);
};
printf("\n voulez-vous modifier le mois?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
do{
confirme=0;
printf("\n \t l'annee :") ;
scanf("%d",&c);
while((c<1500)||(c<0))
{
printf("il y a une erreur \n veuillez introduire l'annee une autre fois svp:");
printf("\n l'annee : ");
scanf("%d",&c);
};
printf("\n voulez-vous modifier l'annee?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
c=c+(b*10000)+(a*1000000);
p->val.date[0]=c;
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",p->val.temp[0]);
if(tete==NULL)
{
tete=p;
p->suiv=NULL;
queue=tete;
}
if (tete!=NULL)
{
queue->suiv=p;
p->suiv=NULL;
queue=p;
}
printf("\n voulez-vous inserer une autre fois?(0 pour oui 1 pour non)");
scanf("%d",&arret);
if (!arret)
{
do{
confirme=0;
printf("\n veuillez introduire le nom de la ville svp :") ;
scanf("%s",tab);
printf("\n voulez-vous modifier le nom de la ville????? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
/*****vérifiant si la ville qu'il vient d'inserer existe déja dans l'un des blocs******/
while ((p!=NULL) && (!trouv))
{
if(strcmp(tab,p->val.ville)==0) /*****si elle existe****/
{
if (p->val.pos<99) /*****on vérifie s'il y a de la place pour l'inserer*****/
{
trouv=1; /*pour arreter la recherche*/
p->val.pos++;
printf ("\n veuillez introduire la date svp: ");
do{
confirme=0;
printf("\n \t le jour :") ;
scanf("%d",&a);
while((a>31) ||(a<0))
{
printf("\n il y a une erreur \n veuillez introduire le jour une autre fois svp:");
printf("\n le jour : ");
scanf("%d",&a);
};
printf("\n voulez-vous modifier le jour ?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
do{
confirme=0;
printf("\n \t le mois :") ;
scanf("%d",&b);
while((b>12)||(b<0))
{
printf("\n il y a une erreur \n veuillez introduire le mois une autre fois svp:");
printf("\n le mois : ");
scanf("%d",&b);
};
printf("\n voulez-vous modifier le mois?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
do{
confirme=0;
printf("\n \t l'annee :") ;
scanf("%d",&c);
while((c<1500)||(c<0))
{
printf("il y a une erreur \n veuillez introduire l'annee une autre fois svp:");
printf("\n l'annee : ");
scanf("%d",&c);
};
printf("\n voulez-vous modifier l'annee?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
c=c+(b*10000)+(a*1000000);
p->val.date[p->val.pos]=c;
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",p->val.temp[p->val.pos]);
}
else
p=p->suiv;/****dans le cas où il y a ++ blocs qui contiennent les enregisterement de la meme ville******/
}
else
p=p->suiv;
};
}
}
}/********si la ville n'a pas été inserée avant où dans le cas où tt les
blocs de cette ville été pleins,on reboucle et on crée un nouveau bloc
en faisant le chainage(au niveau de la queue)************/
/***************ecriture dans le fichier**************/
printf("entrer le nom du fichier svp : ");
scanf("%s",nomfichier);
fichier=fopen(nomfichier,"wb");
if (fichier!=NULL)
{
fprintf(fichier,"\n\t **** les temperatures des villes inserées *****");
p=tete;
while(p!=NULL)
{
fprintf(fichier,"\n________________________________________________________________");
fprintf(fichier,"\n| ville : | %s |",p->val.ville);
fprintf(fichier,"\n|__________|____________________________________________________|");
for(i=0;i<=p->val.pos;i++)
{ /*supposons qu'on a 12122010 ***/
c=(p->val.date[i]/1000000); /*on obtient le jour 12*/
a=(p->val.date[i]%1000000);
fprintf(fichier,"\n|date :| %d / ",c);/****|date :| 12/ *****/
c=(a/10000);
fprintf(fichier," %d / ",c); /***| date :|12/12/ **********/
c=(a/10000);
fprintf(fichier," %d / ",c); /*** |date :| 12/12/2010 |*******/
a=a%10000;
fprintf(fichier," %d | ",a);
fprintf(fichier,"temperature: | %d",p->val.temp[i]);
fprintf( fichier,"\n| ____________________________________________________________________|");
}
p=p->suiv;
};
}
fclose(fichier);
/****************************supprission d'une ville*****************************************/
while(!supprime)
{
printf("voulez-vous supprimer tous les enregistrements d'une ville?(tapez 0 pour oui 1 pour non) ");
scanf("%d",&supprime);
if (supprime==0)
{
printf("donnez le nom de la ville a supprimer");
scanf("%s",tab);
p=tete;
while(p!=NULL)
{
if (strcmp(p->val.ville,tab)==0)
{ t=p->suiv;
free(p);
h->suiv=t;
}
h=p;
p=p->suiv;
}
}
};
/*********************ajouter un enregistrement***************/
arret=0;
while (!arret)
{
printf("voulez-vous ajouter un enregistrement?? tapez 0 pour oui 1 pour non");
scanf ("%d",arret);
if (!arret)
{
do{
confirme=0;
printf("\n veuillez introduire le nom de la ville svp :") ;
scanf("%s",tab);
printf("\n voulez-vous modifier le nom de la ville????? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
while ((p!=NULL) && (!trouv))
{
strcpy(ancienneville,p->val.ville);
if(!strcmp(tab,ancienneville))
{
if (p->val.pos<99)
{
trouv=1;
p->val.pos++;
printf ("\n veuillez introduire la date svp: ");
do{
confirme=0;
printf("\n \t le jour :") ;
scanf("%d",&a);
while((a>31) ||(a<0))
{
printf("\n il y a une erreur \n veuillez introduire le jour une autre fois svp:");
printf("\n le jour : ");
scanf("%d",&a);
};
printf("\n voulez-vous modifier le jour ?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
do{
confirme=0;
printf("\n \t le mois :") ;
scanf("%d",&b);
while((b>12)||(b<0))
{
printf("\n il y a une erreur \n veuillez introduire le mois une autre fois svp:");
printf("\n le mois : ");
scanf("%d",&b);
};
printf("\n voulez-vous modifier le mois?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
do{
confirme=0;
printf("\n \t l'annee :") ;
scanf("%d",&c);
while((c<1500)||(c<0))
{
printf("il y a une erreur \n veuillez introduire l'annee une autre fois svp:");
printf("\n l'annee : ");
scanf("%d",&c);
};
printf("\n voulez-vous modifier l'annee?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
c=c+(b*10000)+(a*1000000);
p->val.date[p->val.pos]=c;
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",p->val.temp[p->val.pos]);
}
else
p=p->suiv;
}
else
p=p->suiv;
};
if (!trouv) /********* s'il la ville n'existe pas*******/
{
k=malloc(sizeof(bloc)); /*** on crée un nouveau bloc*****/
k->val.pos=0;
strcpy(k->val.ville,tab); /*** on copie la nouvelle ville dans le champs ville du bloc****/ queue->suiv=k; /*** on fait le chainage *****/
k->suiv=NULL;
queue=k;/** on modifie la queue ****/
printf ("\n veuillez introduire la date svp: ");
do{
confirme=0;
printf("\n \t le jour :") ;
scanf("%d",&a);
while((a>31) ||(a<0))
{
printf("\n il y a une erreur \n veuillez introduire le jour une autre fois svp:");
printf("\n le jour : ");
scanf("%d",&a);
};
printf("\n voulez-vous modifier le jour ?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
do{
confirme=0;
printf("\n \t le mois :") ;
scanf("%d",&b);
while((b>12)||(b<0))
{
printf("\n il y a une erreur \n veuillez introduire le mois une autre fois svp:");
printf("\n le mois : ");
scanf("%d",&b);
};
printf("\n voulez-vous modifier le mois?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
do{
confirme=0;
printf("\n \t l'annee :") ;
scanf("%d",&c);
while((c<1500)||(c<0))
{
printf("il y a une erreur \n veuillez introduire l'annee une autre fois svp:");
printf("\n l'annee : ");
scanf("%d",&c);
};
printf("\n voulez-vous modifier l'annee?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
c=c+(b*10000)+(a*1000000);/***on concatene la date****/
p->val.date[0]=c; /** pour bien manipuler les dates et les verification chaque fois*****/
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",p->val.temp[0]);
}
}
};
/*************modifier la temperature d'une ville donnée à une date donnée**************/
arret=0;
while(!arret)
{
printf("voulez-vous modifier la temperature d'une ville?????(0 oui 1 non)");
scanf("%d",&arret);
if (!arret)
{
printf("introduisez le nom de la ville svp");
scanf("%s",tab);
printf ("\n veuillez introduire la date svp: ");
do{
confirme=0;
printf("\n \t le jour :") ;
scanf("%d",&a);
while((a>31) ||(a<0))
{
printf("\n il y a une erreur \n veuillez introduire le jour une autre fois svp:");
printf("\n le jour : ");
scanf("%d",&a);
};
printf("\n voulez-vous modifier le jour ?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
do{
confirme=0;
printf("\n \t le mois :") ;
scanf("%d",&b);
while((b>12)||(b<0))
{
printf("\n il y a une erreur \n veuillez introduire le mois une autre fois svp:");
printf("\n le mois : ");
scanf("%d",&b);
};
printf("\n voulez-vous modifier le mois?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
do{
confirme=0;
printf("\n \t l'annee :") ;
scanf("%d",&c);
while((c<1500)||(c<0))
{
printf("il y a une erreur \n veuillez introduire l'annee une autre fois svp:");
printf("\n l'annee : ");
scanf("%d",&c);
};
printf("\n voulez-vous modifier l'annee?? (tapez 0 pour oui 1 pour non): ");
scanf("%d",&confirme);
}while(!confirme);
c=c+(b*10000)+(a*1000000);
printf ("\n veuillez introduire la temperature svp: ");
scanf ("%d",&j);
p=tete;
trouv=0;
while ((p!=NULL)&&(!trouv))/****on cherche la ville et la date****/
{
if(strcmp(p->val.ville,tab)==0)
{
for (i=0;i<=p->val.pos;i++)
{
if(p->val.date[i]==c) /**** on compare les dates du blocs jusqu'à pos****/
{
p->val.temp[i]=j;/***** s'il ya egalité on ecrase l'ancienne temp****/
trouv=1; /*** la ville et la date que l'utilisateur a données existent***/
}
}
}else
p=p->suiv;/*** on cherche dans les autres blocs si la ville occupe plusieurs plocs****/
}
if (!trouv)
printf("la ville ou la date que vous avez demandées n'existent pas dans le fichier");
}
}
/*************affichage de la valeur min et max et la moyenne des temperatures d'une ville *****************/
arret=0;
while(!arret)
{
printf("inserez le nom de la ville que vous voulez afficher sa temp min et max et sa temperature moyenne");
scanf("%s",tab);
p=tete;
trouv=0;
while (p!=NULL)
{
if(strcmp(p->val.ville,tab)==0)
{
trouv=1;
entree=1;
for (i=0;i<= p->val.pos;i++)
{
if(min > p->val.temp[i])
min=p->val.temp[i];
if (max< p->val.temp[i])
max=p->val.temp[i];
moy=moy+p->val.temp[i];
cpt++;
}
p=p->suiv;
/**dans le cas où il y a ++ blocs qui concernent la meme ville
on a besoin de sauvegarder le min et le max de chaque bloc de cette ville
pour faire ce la on sauvegarde chaque fois le min et le max du bloc courant dans 2 maillons
on garde le chainage aprés on compare toutes les valeurs de cette liste et on trouv le mmin et le max****/
if (entree) /**si on s'est rentré dans la boucle pour =>on a besoin de sauvegarder les nouvelles valeurs qu'on a trouvé****/
{
entree=0;/***pour eviter de sauvegarder apres chaque execution de la boucle tq****/
l=malloc(sizeof(maillon));
l->num=min;
g=malloc(sizeof(maillon));
g->num=max;
if(tete2==NULL)
{tete2=l;
l->suivant=g;
queue2=g;
g->suivant=NULL;
}
else
{
queue2->suivant=l;
l->suivant=g;
queue2=g;
g->suivant=NULL;
}
}
}
};
if (trouv)
{
moy=moy/cpt;
l=tete2;
min=l->num;
max=l->suivant->num;
while (l!=NULL) /*** on cherche dans la list les valeurs min et max ****/
{
if (min>l->num)
min=l->num;
if(max<l->num)
max=l->num;
l=l->suivant;
}
printf("\n la temperature min est : %d",min);
printf("\n la temperature max est : %d",max);
printf("\n la temperature moyenne est : %d",moy);
}
else
printf("\nla ville que vous-avez demandé n'existe pas");
printf("\nvoulez-vous afficher les temp min max et moy d'une autre ville????(0 oui 1 non)");
scanf("%d",&arret);
}
}
KX
Messages postés16754Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention25 novembre 20243 020 18 déc. 2010 à 00:24
Je vais être honnête j'ai pas regardé le code, néanmoins Visual Studio me dit ceci :
Description Ligne
error C2440: '=' : impossible de convertir de 'void *' en 'bloc *' 40
error C2440: '=' : impossible de convertir de 'void *' en 'bloc *' 319
error C2440: '=' : impossible de convertir de 'void *' en 'maillon *' 477
error C2440: '=' : impossible de convertir de 'void *' en 'maillon *' 479
Trouvez des réponses à vos questions sur les langages, les frameworks et les astuces de codage. Échangez avec d'autres développeurs passionnés pour améliorer vos compétences en programmation et rester au fait des dernières tendances du secteur.