Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Il programma seguente (esercizio di esame in data 27-11-2014) raccoglie informazioni su 10 conti corrente (Nome, cognome, saldo, IBAN e ultimi 5 movimenti).
- Successivamente stampa l'iban del conto corrente con la somma algebrica degli ultimi movimenti maggiore (scelta a)
- Oppure stampa l'iban del conto corrente con la somma delle entrate maggiore (scelta b)
- Non gestisce:
- -Nomi o cognomi con spazi
- -Non controlla la lunghezza di nome e cognome
- Enrico Ronconi <ronconi.enrico@yahoo.it> 27 nov 2014
- */
- #include <stdio.h> //Standard I/O lib
- #define L_IBAN 28 //Lunghezza iban + 1 (Terminatore)
- #define L_NOME 30 //Lunghezza nome-cognome
- #define L_CAUS 30 //Lunghezza causale importo
- #define CONTI 10 //Numero di conti di cui raccogliere info
- typedef struct {
- char causale[L_CAUS];
- float valore;
- } movimento; //Tipo di dato per immagazzinare un singolo movimento
- typedef struct {
- char IBAN[L_IBAN];
- char nome[L_NOME];
- char cognome[L_NOME];
- float saldo;
- movimento ultimi[5]; //Array di 5 movimenti
- } conto; //Tipo di dato per immagazzinare un singolo conto corrente
- int carattere_illegale(char x){ //Restituisce 1 se il carattere NON può essere all'interno dell'IBAN (Ovvero se non è una lettera maiuscola o un numero), 0 altrimenti
- if ((x > 'Z' || x < 'A') && (x < '0' || x > '9')) return 1;
- return 0;
- }
- int iban_valido(char IBAN[]){ //Restituisce 0 se l'iban è valido (Inizia per IT, contiene solo lettere maiuscole e numeri, termina con un n > 0)
- if(IBAN[0] != 'I' || IBAN[1] != 'T') return 1; //Se non inizia per IT esce
- if(IBAN[L_IBAN-2] < '1' || IBAN[L_IBAN-2] > '9') return 2; //Se l'ultima cifra non è un numero compreso fra 0 e 9 termina
- int count = 2; //Non è necessario controllare i primi caratteri
- while (count < L_IBAN-1){
- if(carattere_illegale(IBAN[count])) return 3; //Controlla tutti i caratteri
- count++;
- }
- }
- void inserisci_movimenti(movimento *x){ //Inserisce 5 movimenti nell'array passata (Viene passato un puntatore al primo elemento)
- int count=0;
- while(count < 5){
- printf("Inserisci causale> "); scanf("%s",(x+count)->causale);
- (x+count)->valore = 0;
- while((x+count)->valore==0){
- printf("Inserisci importo> "); scanf("%f",&((x+count)->valore));
- }
- count++;
- }
- }
- void inserisci_dati_conti(conto *lista, int n){ //Inserisce le info di n conti correnti nell'array passata (Viene passato un puntatore al primo elemento)
- int count = 0;
- while (count < n){
- (lista+count)->IBAN[0] = 'Z';
- while(iban_valido((lista+count)->IBAN) != 0){
- printf("Inserisci IBAN> ");
- scanf("%s",(lista+count)->IBAN);
- }
- printf("Inserisci nome> "); scanf("%s",(lista+count)->nome);
- printf("Inserisci cognome> "); scanf("%s",(lista+count)->cognome);
- printf("Inserisci saldo> ");scanf("%f",&((lista+count)->saldo));
- inserisci_movimenti((lista+count)->ultimi);
- count++;
- }
- }
- float somma_alg(movimento *x){ //Restituisce la somma algebrica di un array di 5 movimenti (Viene passato un puntatore al primo elemento)
- int count = 0;
- float tot = 0;
- while (count < 5){
- tot += (x+count)->valore;
- count++;
- }
- return tot;
- }
- float somma_ent(movimento *x){ //Come somma_alg, ma somma solo le entrate
- int count = 0;
- float tot = 0;
- while (count < 5){
- if ((x+count)->valore>0) tot += (x+count)->valore;
- count++;
- }
- return tot;
- }
- int somma_alg_max(conto *lista){ //Restituise l'indice dell'array il cui primo elemento è &lista con somma algebrica dei movimenti maggiore
- float max_val = somma_alg(lista->ultimi);
- int max_index = 0;
- int count = 0;
- while(count<CONTI){
- if (somma_alg((lista+count)->ultimi)>max_val){ max_val = somma_alg((lista+count)->ultimi); max_index = count;}
- count++;
- }
- return max_index;
- }
- int somma_ent_max(conto *lista){ //Come sopra, ma solo con la somma delle entrate
- float max_val = somma_ent(lista->ultimi);
- int max_index = 0;
- int count = 0;
- while(count<CONTI){
- if (somma_ent((lista+count)->ultimi)>max_val){ max_val = somma_ent((lista+count)->ultimi); max_index = count;}
- count++;
- }
- return max_index;
- }
- int main() {
- conto lista[CONTI]; //Inizializzo array dei conti correnti
- inserisci_dati_conti(lista, CONTI); //Chiedo info per 10 conti correnti
- char scelta = 'z';
- printf("Digita a o b> ");
- while((scelta != 'a') && (scelta != 'b')) scanf("%c",&scelta);
- if (scelta == 'a'){
- printf("L'IBAN del conto la cui somma algebrica degli ultimi 5 movimenti e' massima: %s.",lista[somma_alg_max(lista)].IBAN);
- } else {
- printf("L'IBAN del sconto la cui somma delle entrate e' massima e': %s.",lista[somma_ent_max(lista)].IBAN);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement