Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1

    confrontare due struct 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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E quindi?

    Mostra le struct e indica secondo quali elementi effettuare il confronto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    codice:
    typedef struct pacchi
    { 
    char ordinicons;  
    char ordinaconseff;  
    }conseseguite;
    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;
    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à

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da varehol
    codice:
    typedef struct pacchi
    { 
    char ordinicons;  
    char ordinaconseff;  
    }conseseguite;
    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;
    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à
    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 ...

    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.

  5. #5
    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

  6. #6
    allora chiedo scusa per nn essere stato chiaro e posto il codice sorgente di 2 file distinti

    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;
    
    }
    /*================================================= =========================== timeAndDistance.c ================================================== ============================*/
    #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:
    
    

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    7
    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
    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); }
    ecco... credo che un utilizzo simile ottenga come risultato un evocazione demoniaca puittosto che un confronto.

    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

  8. #8
    Originariamente 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
    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 destinazione

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    7
    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?

  10. #10
    x colpa dell' università che richiede appunto questo progetto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.