Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - aiuto programma chiamate
Forum - C/C++ - aiuto programma chiamate

Avatar
macia (Normal User)
Newbie


Messaggi: 4
Iscritto: 08/07/2012

Segnala al moderatore
Postato alle 13:16
Domenica, 08/07/2012
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?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:18
Domenica, 08/07/2012
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 ...
PM Quote
Avatar
macia (Normal User)
Newbie


Messaggi: 4
Iscritto: 08/07/2012

Segnala al moderatore
Postato alle 13:25
Domenica, 08/07/2012
#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;
}

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:28
Domenica, 08/07/2012
E quindi?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
macia (Normal User)
Newbie


Messaggi: 4
Iscritto: 08/07/2012

Segnala al moderatore
Postato alle 13:40
Domenica, 08/07/2012
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

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:57
Domenica, 08/07/2012
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 ...
PM Quote