PDA

Visualizza la versione completa : Calcolo ritardo medio Perl


ryol
05-05-2010, 19:51
Salve a tutti sono nuovo di questo forum e volevo chiedervi un aiuto se potevate.

Allora....io ho un file di testo di questo tipo:

Partenza 0.4
Partenza 0.43
Partenza 0.56
Arrivo 0.6
Partenza 0.67
Arrivo 0.8
....
......
........

Dovrei fare uno script in Perl che calcola il tempo medio di ritardo.
Ovvero dovrei calcolare la differenza tra il primo arrivo(0.6) e la prima partenza(0.4), poi la differenza relativa al secondo arrivo(0.8) e alla seconda partenza(0.43) e cosė via....sommare tutte queste differenze, e infine diverle per il numero di differenze che ho calcolato.

Spero che qualcuno possa aiutarmi......grazie

Mich_
06-05-2010, 09:37
Bell'esercizio. Molto valido dal punto di vista didattico.

Inizio dell'analisi:
1. leggere tutti gli input ed inserirli in una tabella opportuna
2. fare i calcoli (se il punto 1 e` stato fatto bene, questo e` un giochetto).

Punto 1. Se i dati sono come li hai proposti qui, con un dato per ogni riga, ciascuno contenente il tipo di dato e il suo valore, la cosa e` semplice:
a) preparare due vettori per inserire i dati
b) leggere la riga
c) spezzare in due campi
d) interpretare il primo campo
e) leggere (trasformare in valore numerico) il secondo campo
f) aggiungere dato al vettore corretto

funzioni necessarie:
a) my
b) read, die, while
c) split
d) if (ma in perl si puo` usare anche implicito, o usare altre funzioni)
e) =, ma puo` essere fatto direttamente nel punto f
f) push (ma anche altre)

ryol
06-05-2010, 16:04
Il mio problema sta proprio nel creare in sostanza i due vettori, con gli istanti di tempo, di arrivi e partenze che si vanno riempiendo ogni volta che si verifica la condizione "arrivo" o "partenza" . Il resto dovrei saperlo fare......Help!!!

Mich_
06-05-2010, 17:06
Premessa: non puoi usare una hash, dato che non sarebbe ordinata. E creare una hash di vettori oppure un vettore di hash forse non ne vale la pena per un problema cosi` semplice.

Comunque per creare i vettori:
my @part = ();
my @arr = ();

mentre per aggiungere un dato ai vettori:
push @part, $valore;
push @arr, $valore

Quindi inserendo anche lo split e l'if - ad esempio:
... deve stare dentro il loop ...
($tipo,$val) = split(/ /, $_);
push (@part, $val) if $tipo eq 'Partenza';
push (@arr, $val) if $tipo eq 'Arrivo';
naturalmente le variabili devono essere gia` definite (ad esempio fuori dal loop), oppure si puo` ricrearle ogni volta con il my:
my($tipo,$val) = split(/ /, $_);

Ho presupposto che hai appena letto la riga, e quindi e` in $_, altrimenti devi modificare la variabile nel codice sopra.

ryol
06-05-2010, 22:37
grazie mille ho risolto tutto!!!!

-------GRAZIE---------------

Loading