Programmazione ed
Esercitazioni di Programmazione


<-- Torna alla lista delle soluzioni

Esercitazione 9

Esercizio 1

/* Scrivere una funzione
void ordina(Impegno agenda[ ], int n)
che data una agenda, cioè un array di Impegni, di dimensione n, riordina gli impegni contenuti nell'agenda secondo l'ordine cronologico.
Ad esempio un'agenda ordinata è la seguente:
h. 8:00 sveglia
h. 11:00 tennis
h. 19:30 cinema
*/

/* Ordinamento per inserzione (insertion-sort) */
int maggiore(Impegno p, Impegno q) {
	return (p.time.ore > q.time.ore || 
		(p.time.ore == q.time.ore && p.time.minuti > q.time.minuti));
}

void inserisci(Impegno *ag, int i) {
	int h;
	Impegno temp = ag[i];

	for(h = i; h > 0 && maggiore(ag[h-1], temp); h--)
		ag[h] = ag[h-1];

	ag[h] = temp;
}


void ordina(Impegno *ag, int n) {
	int i;
	for(i = 1; i < n; i++)
		inserisci(ag, i);
}


Esercizio 2

/* Scrivere una funzione
Orario cerca(Impegno ag[], int n, char *att)
che controlla se un dato impegno (identificato dalla stringa att) è previsto nell'agenda di oggi, ritornandone l'orario. Se l'impegno non è previsto, la funzione deve ritornare un orario negativo (es. -1 : -1). */

Orario cerca(Impegno *ag, int n, char *att) {
  int i;
  Orario notfound = {-1,-1};

  for(i = 0; i < n; i++) {
    if(strcmp((ag+i)->attivita, att) == 0) {
		return((ag+i)->time);
	}
  }
  return notfound;
}


Esercizio 3

/* Definire il tipo Agenda come una lista di Impegni. Usando questo nuovo tipo, scrivere un programma per la compilazione dell’agenda giornaliera. Il programma deve memorizzare in un’agenda gli impegni del giorno inseriti dall’utente. Una volta terminata l’inizializzazione, il programma deve visualizzare a video il contenuto dell’agenda nel formato:
h. 17:30 piscina
h. 21:00 teatro
h. 10:30 oculista */

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct {
	int ore;
	int minuti;
} Orario;

typedef struct {
	Orario time;
	char attivita[20];
} Impegno;

typedef struct Lista_impegni {
	Impegno info;
	struct Lista_impegni *coda;
} Lista_impegni;

typedef Lista_impegni *Agenda;


Agenda crea_lista();
void visualizza_lista(Agenda);


int main() {
	Agenda lista;			
	lista = crea_lista();		
	visualizza_lista(lista);	
	return 0;
}

Agenda crea_lista() {
	Agenda p, list_temp;
	int i, n;
	printf ("\nInserire numero elementi della sequenza: ");
	scanf ("%d", &n);
	
	if (n == 0) {
		p = NULL;
	}
	else {
		p = (Agenda)malloc(sizeof(Lista_impegni));
		printf("\nInserisci l'ora: ");
		scanf("%d", &(p ->info.time.ore));
		printf("\nInserisci i minuti: ");
		scanf("%d", &(p ->info.time.minuti));
		printf("\nInserisci l'attivita': ");
		scanf("%s", p ->info.attivita); 
		list_temp = p;
		for(i = 2; i <= n; i++) {
			list_temp->coda = (Agenda)malloc(sizeof(Lista_impegni));
			list_temp = list_temp->coda;
			printf("\nInserisci l'ora: ");
			scanf("%d", &(list_temp->info.time.ore));
			printf("\nInserisci i minuti: ");
			scanf("%d", &(list_temp->info.time.minuti));
			printf("\nInserisci l'attivita': ");
			scanf("%s", list_temp->info.attivita); 
		}
		list_temp->coda = NULL;
	}
	return p;
}

void visualizza_lista(Agenda p) {
	printf ("\n lista ---> ");
	while(p != NULL) {
		printf("%d:%d %s ---> ", p->info.time.ore, p->info.time.minuti, p->info.attivita);
		p = p->coda;
	}
	printf ("NULL\n\n");
}


<-- Torna alla lista delle soluzioni