Chiamate telefoniche - Problema riguardo il costo delle chiamate

di il
7 risposte

Chiamate telefoniche - Problema riguardo il costo delle chiamate

Salve a tutti. Ho un problema riguardo questo codice.
Si vuole simulare l’archivio di chiamate di un gestore telefonico. L’archivio è mensile
(31 giorni). Ogni giorno sono effettuate al massimo 10 chiamate e il costo al minuto di
una chiamata è di 10 centesimi. Ogni chiamata è identificata dal numero chiamante, il
numero ricevente, la durata della chiamata. Provvedere all’implementazione
dell’algoritmo per la simulazione dell’archivio (e.g., archivio in forma matriciale).
Permettere, inoltre, all’utente di
• Dato un numero telefonico visualizzare tutte le chiamate con le relative
informazioni in un singolo giorno;
• Dato un giorno e un numero telefonico, visualizzare il costo totale delle chiamate
(usare un algoritmo incrementale ricorsivo).
L’archivio può anche essere inizializzato con informazioni casuali. Effettuare almeno
due test per ognuna delle opzioni dell’utente.
Non riesco a fare la somma dei costi delle chiamate in questo codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define chiamate 10
#define giorni 30
/*Si vuole creare un programma dove si fa una simulazione di un registro di telefonate dove si possono vedere le chiamate fatte dal chiamante ad un ricevente,
 il registro delle chiamate ha il valore massimo di 30 giorni e ad ogni chiamata c'è un costo di 10 centesimi per ogni minuto di chiamata. */
char *numeri[]= {"3358331905", "3396422580", "3924795192", "3338083199", "3818733509"};typedef struct //Dichiarazione struct con i dati delle chiamate.
{
char *chiamante;
int ricevente;
int durata;
float costo;
float totale;
} Dati;

typedef struct //Dichiarazione struct contenente l'archivio mensile.
{
Dati elenco[chiamate][giorni];
} Archivio;

Archivio creaDati() //Funzione per creare l'archivio, essa restituisce una struct di tipo Archivio.
{
int i=0, j=0, k=0, costo;
Archivio archivio;

for (i=0; i<giorni; i++)//usiamo un ciclo per incrementare i giorni a seconda del numero di giorni, cioè 30
{
for (k=0; k<chiamate; k++)//usiamo un ciclo per incrementare le chiamate
{
archivio.elenco[k][i].chiamante=malloc(sizeof(Dati));
j=rand()%5;
strcpy(archivio.elenco[k][i].chiamante, numeri[j]);
archivio.elenco[k][i].ricevente = 300000000+rand()%999999+1;/*richiamiamo la variabile archivio, 
elenco e ricevente per poter generare un numero a caso del ricevente sommando 300000000+il valore casuale 999999+1*/
archivio.elenco[k][i].durata = rand()%121;/*richiamiamo la variabile archivio, elenco e durata per generare un numero casuale che indica la durata della chiamata*/
archivio.elenco[k][i].costo=0.10*archivio.elenco[k][i].durata;/*richiamiamo la variabile archivio, 
elenco e costo per generare un numero a caso del costo della chiamata moltiplicando il numero casuale per 10 centesimi, cioè 0.10*/
}
}
return archivio;
}

void stampaDati(Archivio archivio) //Procedura per stampare l'archivio, prende come input una struct di tipo Archivio.
{
int i=0, k=0;
for (i=0; i<=giorni-1;)//usiamo un ciclo per fare in modo di generare 10 registri per 30 giorni
{
printf("\n\n\t\t          Giorno %d          \n\n Chiamante\t\tRicevente    Durata\tCosto", i+1);
for (k=0; k<chiamate; k++)//usiamo un ciclo per poter generare le chiamate con il chiamante, il ricevente, la durata, e il costo della chiamata
{
printf("\n[C.%d] %s\t%d    %d min.\t%f", k+1, archivio.elenco[k][i].chiamante, archivio.elenco[k][i].ricevente, archivio.elenco[k][i].durata, archivio.elenco[k][i].costo);
}
printf("\n\n\t\tPremi invio per scorrere l'elenco.");
getchar();
i++;//incrementiamo il ciclo utilizzando la variabile i
}
}

void stampaElenco() //Procedura per stampare l'elenco dei numeri.
{
int i=0;
printf("I numeri presenti nel database sono i seguenti:\n");
for (i=0; i<5; i++)
printf("N%d (+39)%s\n", i+1, numeri[i]);
getchar();
}

int main()
{
srand(time(NULL));//Con srand(), poniamo il seme uguale all'istante di tempo nel quale il programma viene eseguito, tramite la function time()
//In questo modo, per ogni eseguzione del programma, il seme sarà sempre diverso, generando con la function rand() (che vediamo in seguito) numeri diversi
Archivio simula;
stampaElenco();
simula = creaDati();
stampaDati(simula);
return 0;
}
Qualcuno potrebbe darmi una mano per favore?

7 Risposte

Devi accedere o registrarti per scrivere nel forum
7 risposte