come da titolo vorrei confrontare due struct che devono restituirmi un valore di tempo massimo di consegna da parte di un pony express in C
come da titolo vorrei confrontare due struct che devono restituirmi un valore di tempo massimo di consegna da parte di un pony express in C
E quindi?
Mostra le struct e indica secondo quali elementi effettuare il confronto ...
No MP tecnici (non rispondo nemmeno!), usa il forum.
codice:typedef struct pacchi { char ordinicons; char ordinaconseff; }conseseguite;vorrei fare il confronto con degli if che mi consentano di dire se ha raggiunto il tempo massimo allora x nn sforare passa a consegnare i pacchi a bassa priorità, altrimenti se nn ha sforato continua cn quelli ad alta prioritàcodice:typedef struct datigiornata { float G;/*indica la durata dell' orario di lavoro*/ int tot_dist;//totale distanza percorsa durante la giornata lavorativa char inizio[20];//luogo di partenza della prima consegna e dove finira' l' ultima consegna struct tm oraentrata; struct tm orauscita; }datiG;
Tutto molto bello, ma tutte queste informazioni dove sono? Tu hai chiare tutte le sfumature del tuo programma dato che lo stai scrivendo ... da questa parte, chi ti risponde nel forum non ne sa proprio nulla ...Originariamente inviato da varehol
codice:typedef struct pacchi { char ordinicons; char ordinaconseff; }conseseguite;vorrei fare il confronto con degli if che mi consentano di dire se ha raggiunto il tempo massimo allora x nn sforare passa a consegnare i pacchi a bassa priorità, altrimenti se nn ha sforato continua cn quelli ad alta prioritàcodice:typedef struct datigiornata { float G;/*indica la durata dell' orario di lavoro*/ int tot_dist;//totale distanza percorsa durante la giornata lavorativa char inizio[20];//luogo di partenza della prima consegna e dove finira' l' ultima consegna struct tm oraentrata; struct tm orauscita; }datiG;
Quindi, per riassumere e poterti dare una risposta, quali elementi delle strutture indicate sono significativi per il tuo problema e come dovrebbero essere confrontati?
No MP tecnici (non rispondo nemmeno!), usa il forum.
si devono confrontare datiG e consegneseguite perchè in datiG c'è l' orario di lavoro che mi interessa e poi in consegneseguite c'è i pacchi che riesce a consegnare quindi è quello che voglio confrontare tra queste due strutture
allora chiedo scusa per nn essere stato chiaro e posto il codice sorgente di 2 file distinti
/*================================================= =========================== timeAndDistance.c ================================================== ============================*/codice:/*PONYEXPRESS.C*/ #include<stdio.h> #include<time.h> #include"tempoedistanza.h" #include<stdlib.h> /*the rive*/ #define max 40 //#define distance 20 struct tm T; struct tm Time(char* startPlace, char* endPlace, struct tm ora){return ora;}; typedef struct consegna { char partenza[20];/*dove carico il pacco x la prima destinazione*/ char arrivo[20];/*dove scarico il pacco x poi riprendere la corsa*/ int priorita;// priorit� della consegna 0 oppure 1 int distanza;// distanza tra il luogo della partenza e del arrivo struct tm tempoConsegna;//tempo x la consegna struct tm caricamento;// ora di caricamento struct tm consegna; // ora di consegna }Consegne; typedef struct datigiornata { float G;/*indica la durata dell' orario di lavoro*/ int tot_dist;//totale distanza percorsa durante la giornata lavorativa char inizio[20];//luogo di partenza della prima consegna e dove finira' l' ultima consegna struct tm oraentrata; struct tm orauscita; }datiG; typedef struct pacchi{ char ordinicons; char ordinaconseff; }conseseguite; int main(int argc, char **argv) { //float distance; Consegne p[max]={"","", 0}; // Array di Max elementi dove salvera' tutte le tripple lette da file FILE *in,*out1,*out2;//streams in= File con tutti i dati out1= file con tutte le consegne fatte , out2 : file con le consegne ad alta priorita' int i=0;//indice x scorrere l' array p datiG d; d.tot_dist=0; /* if(p[i].consegneseguite!=datiG){ printf("il valore e':%c\n",consegneseguite); }*/ /* else(consegneseguite<=datiG){ printf("il valore e' :%c\n",consegneseguite); printf("il valore inserito e':%d",datiG); } */ if((in = fopen(argv[1], "r"))==NULL) { printf("Can't read file!\n"); } if((out1 = fopen(argv[2], "w"))==NULL) { printf("Can't read file!\n"); } if((out2 = fopen(argv[3], "w"))==NULL) { printf("Can't read file!\n"); exit(0); } fscanf(in,"%f\n",&d.G); fscanf(in,"%s\n",&d.inizio); fscanf(in,"%d\n",&d.oraentrata.tm_hour); fgetc(in); fscanf(in,"%d\n",&d.oraentrata.tm_min); printf("\nsono qui %.1f , %s , %d:%d\n ",d.G,d.inizio,d.oraentrata.tm_hour,d.oraentrata.tm_min); while(!feof(in)){ fscanf(in,"%s %s %d\n",p[i].partenza,p[i].arrivo,&p[i].priorita); if(p[i].priorita==1) { printf("Pacco ad alta priorita' processato\n"); fprintf(out1,"%s %s %d\n",p[i].partenza,p[i].arrivo,p[i].priorita); } if(p[i].priorita==0) { printf("pacco a bassa priorità processato\n"); fprintf(out2,"%s %s %d\n",p[i].partenza,p[i].arrivo,p[i].priorita); } p[i].distanza=distance(p[i].partenza, p[i].arrivo); i++; } fclose(in); fclose(out1); fclose(out2); return 0; }
#include <time.h>
#include "tempoedistanza.h"
struct tm startRush[2], endRush[2];
int sumChars (char *string)
{
int sum = 0;
int i = 0;
while (string[i] != '\0')
{ sum = sum + string[i++];
}
return sum;
}
int distance (char *startPlace, char *endPlace)
{ return ((sumChars (startPlace) + sumChars (endPlace)) * MAGIC1) % MAGIC2; }
int numtime (struct tm t) { return t.tm_min + 60 * t.tm_hour; }
int minTime (char *startPlace, char *endPlace)
{ int hour, min; int dist = distance (startPlace, endPlace) + MAGIC3; hour = (int) (dist / KMpH_MAX); min = ((int) (dist * 60 / KMpH_MAX)) % 60;
return (hour * 60 + min);
}
int maxTime (char *startPlace, char *endPlace)
{ int hour, min; int dist = distance (startPlace, endPlace) + MAGIC4; hour = (int) (dist / KMpH_MIN); min = ((int) (dist * 60 / KMpH_MIN)) % 60; return (hour * 60 + min); }
travelTime (char *startPlace, char *endPlace, struct tm currentTime)
{ if ((numtime (currentTime) >= numtime (startRush[0]) && numtime (currentTime) < numtime (endRush[0])) || (numtime (currentTime) >= numtime (startRush[1]) && numtime (currentTime) < numtime (endRush[1]))) return maxTime (startPlace, endPlace);
else return minTime (startPlace, endPlace); }
int setRushTime (struct tm startTime, struct tm endTime, int which)
{ /* which = 1 se mattina, 2 se pomeriggio */
if (which < 1 || which > 2)
return 0; startRush[which - 1] = startTime;
endRush[which - 1] = endTime;
return which;
}
codice:
Ma.. hai ben chiaro come funzionano le struct in C?
non sono dei contenitori magici che tiran fuori quello che ti serve, devi dichiararle, inizializzarle e poi puoi usale. (spero tu lo abbia fatto)
in questo caso non capisco come tu voglia confrontarle
EDIT
ecco... credo che un utilizzo simile ottenga come risultato un evocazione demoniaca puittosto che un confronto.codice:if(p[i].consegneseguite!=datiG) { printf("il valore e':%c\n",consegneseguite); } else(consegneseguite<=datiG){ printf("il valore e' :%c\n",consegneseguite); printf("il valore inserito e':%d",datiG); }
Sarebbe incorretto confrontare due struct direttamente, ma qui fai un passo in piu' confrontando direttamente i tipi di dato...
come dicevo sopra dovresti dichiararle e inizializzarle prima di usarle..
in secondo luogo le struct son formate da piu' variabili, quindi devi confrontarle singolarmente
le ho dichiarate le struct e le ho anche inizializzate cm si può vedere dal codice che ho messo .... quello che vorrei fare è dire che se i datiG si avvicina alla fine della giornata di fare qualche consegna a bassa priorità e di tenere conto anche di quanto tempo ci vuole e di quale strada è la più breve x giungere alla prossima destinazioneOriginariamente inviato da C-man
Ma.. hai ben chiaro come funzionano le struct in C?
non sono dei contenitori magici che tiran fuori quello che ti serve, devi dichiararle, inizializzarle e poi puoi usale. (spero tu lo abbia fatto)
in questo caso non capisco come tu voglia confrontarle
vedi l'edit sopra...
il c e' logica, niente di piu', niente di meno.
e come tale non puoi aspettarti di ottenere niente di piu', ne niente di meno di quello che stai scrivendo.
Insomma, non ti vedo ferratissimo, come mai ti sei lanciato in un progetto simile?
x colpa dell' università che richiede appunto questo progetto