Oppure

Loading
08/07/12 11:16
macia
Si realizzi in C un programma per visualizzare alcune statistiche sui numeri chiamati da un
apparecchio telefonico i cui tabulati sono contenuti in un file di testo con nome passato sulla linea di
comando.
Si assuma che il file contenga su ogni riga la descrizione di una telefonata nel seguente formato:

<data> <numero> <durata> <tipo>

La data è una stringa nel formato YYYYMMDD. Il numero è una stringa senza spazi lunga al più 20
caratteri. La durata è un intero che corrisponde alla durata della telefonata in minuti e il tipo è il
carattere E (per telefonate in entrata) e U (per telefonate in uscita).
Ad esempio:

20110701 345677770 30 U
20110603 02345678 10 U
20110704 345677770 30 U
20110701 345677770 18 U
20110702 011345345 20 E
20110703 338767676 90 U

Il file può contenere un numero arbitrario di righe ma il programma deve funzionare con file
contenenti fino a un massimo di N numeri telefonici diversi dove N è una costante definita in una
direttiva #define. Non si può assumere alcun ordinamento delle righe nel file ma si assuma che il
formato del file sia corretto.
Il programma riceve da tastiera due date, nel formato YYYYMMDD, e deve visualizzare sullo
schermo, per ciascun numero telefonico con il quale ci sia stata almeno una telefonata tra le due date,
il totale dei minuti in entrata e il totale dei minuti in uscita nel periodo compreso tra le due date.

Ad esempio, se il file è quello mostrato prima:

C:\> PROG.EXE tabulato.txt
Inserire le due date:
20110701 20110702
345677770 – Entrata: 0 minuti - Uscita: 48 minuti
011345345 – Entrata: 20 minuti - Uscita: 0 minuti


potreste gentilmente aiutarmi?
aaa
08/07/12 11:18
nessuno
Aiutare sì ... ma fare tutto il programma no.

Proponi tu il codice ed eventualmente si discutono le difficoltà/errori ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
08/07/12 11:25
macia
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 30
#define MAX 80


int main(int argc,char*argv[])
{
FILE *fp;
char riga[MAX+1];
char data[N],data1[N],data2[N];
char numero[N];
int durata;
char tipo;
int r;
int entrata=0,uscita=0;

if(argc!=2)
{
printf("Errore linea di comando\n";);
exit(1);
}

fp=fopen(argv[1],"r";);
if(fp==NULL)
{

printf("File %s vuoto\n",argv[1]);
exit(1);
}

printf("Inserisci le due date:\n";);
scanf("%s %s",data1,data2);

while(fgets(riga,MAX,fp)!=NULL)
{
r=sscanf(riga,"%s %s %d %c",data,numero,&durata,&tipo);
if (strcmp(data1,data2)<0)
{
if (strcmp(data1,data)<=0 && strcmp(data,data2)<=0)
{

if (tipo=='U')
uscita+=durata;

if (tipo=='E')
entrata+=durata;

printf("%s\t minuti entrata: %d\t minuti uscita: %d\n",numero,entrata,uscita);

}

}

}
fclose(fp);

return 0;
}
aaa
08/07/12 11:28
nessuno
E quindi?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
08/07/12 11:40
macia
dovrei visualizzare questo:

345677770 – Entrata: 0 minuti - Uscita: 48 minuti
011345345 – Entrata: 20 minuti - Uscita: 0 minuti


invece trovo

345677770 – Entrata: 0 minuti - Uscita: 30 minuti
345677770 – Entrata: 0 minuti - Uscita: 48 minuti
011345345 – Entrata: 20 minuti - Uscita: 0 minuti
aaa
08/07/12 11:57
nessuno
E' la logica che è sbagliata.

In tre vettori

numeri[N], tote[N], totu[N]

devi inserire i dati relativi ad ogni singolo numero telefonico diverso.

Per ogni numero che leggi dal file, devi cercare nel vettore "numeri" aggiornando i totalizzatori se trovi il numero o aggiungendo il nuovo numero se non lo trovi.
Ovviamente dovrai avere un contatore (inizialmente a 0) che ti indichi quanti elementi sono presenti in questi vettori.

*Solo* alla fine della lettura del file avrai i risultati e potrai visualizzarli.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.