Cicli ...

di il
6 risposte

Cicli ...

Salve a tutti.
Devo verificare se esistono delle corrispondenze tra elementi contenuti in due distinti file
per poi stampare a video le corrispondenze.

I file hanno la seguente formattazione:

File 1:

GHC ROMA
HCC BOLOGNA
JKI PALERMO


File 2:

JKI HCC
HCC GHC



Su input dell'utente, verifico la corrispondenza intermedia degli elementi nel file 2.
Se verificata associo il codice al nome del file 1.
Esempio:

Input utente: JKI GHC
--> PALERMO - BOLOGNA - ROMA


Sto provando - senza esito - con il seguente ciclo ... ma credo di essermi bloccato:



for (l=0; l<i; l++) //file 2

if ((strcmp(par,sa[l].cod1))==0)

par_ind=l;
else if ((strcmp(des,sa[l].cod2))==0)
des_ind=l;
else if ((strcmp(sa[par_ind].cod2,sa[des_ind].cod1))==0)
des_med=par_ind;

for(k=0; k<h;k++) //file 1

if ((strcmp(sa[par_ind].cod1, fly[k].cod))==0)
par_k=k;
else if ((strcmp(sa[des_ind].cod2,fly[k].cod))==0)
des_k=k;
else if ((strcmp(sa[par_ind].cod2,fly[k].cod))==0)
med_k=k;



printf("->%s-%S-%s\n", fly[par_k].name, fly[med_k].name, fly[des_k].name);


help-help-help

6 Risposte

  • Re: Cicli ...

    C++ oppure C?
  • Re: Cicli ...

    C .
  • Re: Cicli ...

    Com'è la struttura dei tuoi dati? Ne senso che tipo di strutture stai usando. Te lo dico perche un problema del genere si può risolvere tramite l'algoritmo di dijkstra, ovvero il problema di trovare camini minimi in un grafo.

    http://it.wikipedia.org/wiki/Algoritmo_di_Dijkstr
  • Re: Cicli ...

    Questa è la struttura:

    typedef struct{
    char cod[5];
    char name[50];
    }aero;

    typedef struct{
    char cod1[5];
    char cod2[5];
    }tte;

    .......

    aero fly[100];
    tte sa[100];


    L'algoritmo indicato, che calcola la distanza minima tra nodi, mi sembra abbastanza complesso per ciò che mi è stato proposto come esercizio.
    Qui bisogna solo individuare il codice comune tra quelli in elenco ed associarne il nome relativo.

    Ciao
  • Re: Cicli ...

    Il punto è che la soluzione porta a sviluppare quel algoritmo. Pensaci un attimo. Tu hai un vettore di struct con due codici e da quel che ho capito dovresti trovare il modo per arrivare dal codice 1 al codice 2 vedendo quali sono i passaggi intermedi. Qualsiasi cosa implementerai sarà meno efficente di un algoritmo già testato, almeno così la penso io.
  • Re: Cicli ...

    Forse un metodo + semplice sarebbe quello di aggiungere un altro campo nella struct aero tipo:
    int visitato; così quando andrai a verificare se la città è già stampata lo salti. così non hai dei doppioni.
    quindi il ciclo è
    1. prendi il primo codice dal file2 che corrisponde al primo codice di input.
    2. stampa la prima città di corrispondenza
    3. marchi la città come visitata.
    4. prendi il secondo codice del file 2
    5. stampi la seconda città (se non è marcata come visitata)
    vai ad oltranza finchè un codice del file 2 è diverso dal secondo codice dato in input
Devi accedere o registrarti per scrivere nel forum
6 risposte