Aide c++

Résolu
jekburn Messages postés 26 Date d'inscription jeudi 11 novembre 2004 Statut Membre Dernière intervention 29 octobre 2009 - 15 mai 2005 à 01:27
jp94470 Messages postés 1 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 16 mai 2005 - 16 mai 2005 à 21:04
#include <stdio.h>
#include <conio.h>


typedef struct{
int heure;
int minute;
int seconde;
}TEMPS;


TEMPS diff(TEMPS t1,TEMPS t2){
TEMPS t3;
if(t1.seconde<t2.seconde)
{
t3.seconde=60-(t2.seconde-t1.seconde);
t1.minute=t1.minute-1;
}
else
t3.seconde=t1.seconde-t2.seconde;
if(t1.minute<t2.minute)
{
t3.minute=60-(t2.minute-t1.minute);
t1.heure=t1.heure-1;
}
t3.minute=t1.minute-t2.minute;
t3.heure=t1.heure-t2.heure;
return t3;
}


TEMPS post(TEMPS t1,TEMPS t2){
TEMPS aide;
if(t1.heure<t2.heure)
{
aide.heure=t1.heure;
t1.heure=t2.heure;
t2.heure=aide.heure;
aide.minute=t1.minute;
t1.minute=t2.minute;
t2.minute=aide.minute;
aide.seconde=t1.seconde;
t1.seconde=t2.seconde;
t2.seconde=aide.seconde;
}
}


TEMPS entree(TEMPS t){
do{
printf("Heure:");scanf("%d",&(t.heure));
printf("Minute:");scanf("%d",&(t.minute));
printf("Seconde:");scanf("%d",&(t.seconde));
if((t.heure>23)||(t.minute>59)||(t.seconde>59)||(t.heure<0)||(t.minute<0)||(t.seconde<0))
printf("Temps invalide...Veuillez Remplacer (%d)\n",t);
}while((t.heure>23)||(t.minute>59)||(t.seconde>59)||(t.heure<0)||(t.minute<0)||(t.seconde<0));
return t;
}


main(){
TEMPS t,t1,t2,t3;
printf("Introduire le premier temps:\n");
t1=entree(t);
printf("\nIntroduire le deuxieme temps:\n");
t2=entree(t);
printf("\nDifférence entre les deux temps:\n");
post(t1,t2);
t3=diff(t1,t2);
printf("Les heures:%d %d %d\n",t1.heure,t2.heure,t3.heure);
printf("Les minutes:%d %d %d\n",t1.minute,t2.minute,t3.minute);
printf("Les secondes:%d %d %d\n",t1.seconde,t2.seconde,t3.seconde);
getch();
}



//Bonjour,
//Mon programme doit calculé la différence entre deux temps donnés: h, m, s
//En inversant les temps si le plus petit est rentré en premier.
//Malheureusement, il refuse d'inverser.
//Si le temps le plus grand est tapé en premier: genre: 17h45m16s et 15h30m25s
//il me donnera: 2h14m51s
//Par contre, si il est tapé en dernier: genre: 15h30m25s et 17h45m16s
// là, il me donnera: -3h-15m9s, au lieu de: 2h14m51s, parcequ'il n'inverse pas
// j'ai tout essayé à ma connaissance, mais rien ne marche
//merci de votre aide

4 réponses

theneoiceman Messages postés 78 Date d'inscription lundi 14 avril 2003 Statut Membre Dernière intervention 23 avril 2010
15 mai 2005 à 12:53
La solution est assez simple pourtant :

ta fonction post, il faut la modifier.

Si tu travailles en C++ ta fonction post doit etre déclarée comme ça :

TEMPS post(TEMPS &t1,TEMPS &t2)

{

... // tout ton code ne change pas

}


Si tu travailles en C faut faire ça :


<li>TEMPS post(TEMPS *t1,TEMPS *t2)</li>

{

// et au lieu de mettre t1. ou t2. tu mets t1-> ou t2->

}


<li>dans ton Main tu appelles ta fonction post ainsi : post(&t1,&t2);

</li>



Et voila
Mess with the best, die like the rest
3
minet03 Messages postés 415 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 2 décembre 2005 3
15 mai 2005 à 07:53
Dans ta fonction Diff() fait juste un petit if() au niveau des heures.

diff( TEMPS t1,TEMPS t2) {

TEMPS temps1,temps2;

if( t1.heure > t2.heure ) {

temps1 = t2;

temps2 = t1;

}

else {

temps1 = t1;

temps2 = t2;

}
[...]

}


Le CyberMonde nous offre une meilleur qualité de vie
CyberMan.inc The WebSite
0
jekburn Messages postés 26 Date d'inscription jeudi 11 novembre 2004 Statut Membre Dernière intervention 29 octobre 2009
15 mai 2005 à 11:52
ça ne marche toujours pas, meme résultat
0
jp94470 Messages postés 1 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 16 mai 2005
16 mai 2005 à 21:04
#include"stdio.h"
#include"conio.h"
#include"string.h"


main()
{


FILE *fic;
FILE *fic_tri;


struct biblio {
int numero;
char titre[40];
char auteur[30];
int date;
char edition[20];
}M[40],*pt;


int i=0,j,nb,b;
char tri,d;
struct biblio ;
fic=fopen("biblio.txt","r");
if(fic==NULL)
printf("erreur à l'ouverture du fichier");
else
{
while(!feof(fic))
{
fscanf(fic,"%d,%s,%s,%d,%s",&M[i].numero,&M[i].titre,&M[i].auteur,&M[i].date,&M[i].edition);
i++;
}
nb=i;
fclose(fic);
printf("dans quel ordre voullez vous trier?\n");
printf("tri par numero,tappez 1 \n");
printf("tri par titre,tappez 2 \n");
printf("tri par auteur, tappez 3 \n");
printf("tri par date,tappez 4 \n");
printf("tri par edition, tappez 5 \n");
tri=getch();
for(i=0;i<nb;i++)
{
for(j=i;j<nb;j++)
{
switch(tri)
{
case '1':
if(M[i].numero<M[j].numero)
{
d=M[j];
M[j]=M[i];
M[i]=d;
}
case '2':
if(strcmp(M[i].titre,M[j].titre)>0)
{
d=M[j];
M[j]=M[i];
M[i]=d;
}
case '3':
if(strcmp(M[i].auteur,M[j].auteur)>0)
{
d=M[j];
M[j]=M[i];
M[i]=d;
}
case '4':
if(M[i].date<M[j].date)
{
d=M[j];
M[j]=M[i];
M[i]=d;
}
case '5':
if(strcmp(M[i].edition,M[j].edition)>0)
{
d=M[j];
M[j]=M[i];
M[i]=d;
}
}
}
}
fic_tri=fopen("biblio.txt","w");
if(fic_tri==NULL)
printf("erreur … l'ouverture");
else
{
for(i=0;i<nb;i++)
fprintf(fic_tri,"%d,%s,%s,%d,%s\n",M[i].numero,M[i].titre,M[i].auteur,M[i].date,M[i].edition);
}
}


return(0);
getch();
}

bonjour,
voila mon programme doit faire le titre dans un texte de type biblio.txt et j'ai un problème au niveau de d=M[j] et de M[i]=d, ca me met


Operands of = have illegal types 'char' and 'struct biblio'.lors de la compilation, si quelqu'un peut m'aider se serait sympa car la je ne trouve pas la solution
merci
0
Rejoignez-nous