Programmazione ed
Esercitazioni di Programmazione


<-- Torna alla lista delle soluzioni

Esercitazione 7

Esercizio 1

/* Si consideri l’esercizio sulla crittografia visto a Lezione. Scrivere la funzione
void decrypt(char *parola, char codice[26]);
che decripta la parola contenuta nel primo argomento usando il codice passato come secondo parametro. La parola decriptata rimpiazzera’ in memoria la corrispondente versione criptata (ovvero la versione criptata dovra’ essere sovrascritta da quella decriptata). */

void decrypt(char *parola, char codice[26]) {
	int i, j;

	for(i = 0; i < strlen(parola); i++) {
		for(j = 0; j < 26; ++j)  {
			if (parola[i] == codice[j])  {
				parola[i] = 'a' + j;
				break;
			}
		}
	}
}


Esercizio 2

/* Scrivere un programma che legga una parola in input, la memorizzi in una stringa e verifichi se la parola letta è palindroma, cioè se si tratta di una parola che si legge allo stesso modo da sinistra a destra e da destra a sinistra (es. “anna” e “osso” sono palindrome). Se la parola letta è palindroma, il programma deve stampare in output un messaggio del tipo “... è una parola palindroma”. In caso contrario, il programma deve creare e stampare in output la parola palindroma ottenuta concatenando la stringa data con la stringa inversa senza il primo elemento. Ad esempio, se viene inserita la parola “mela” il programma stamperà la parola palindroma “melalem” (non “melaalem”). */

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

#define MAX_DIM 50

int palindroma (char *a);
void crea_pal(char *a);

int palindroma(char *a){
	int i, dim = strlen(a);

	for (i = 0; i < dim / 2; i++) {
		if (a[i] != a[dim-i-1]) {
			return 0;
		}
	}

	return 1;
}

void crea_pal(char *a) {
	int i, dim = strlen(a);

	a = (char *)realloc(a, sizeof(char) * (2*dim-1));	

	for(i = 0; i < dim - 1; i++) {
		a[dim + i] = a[dim - 2 - i];
	}
	
	a[2*dim-1] = '\0';
}

int main() {
	char *parola = (char *)calloc(sizeof(char), MAX_DIM);
	
	printf("Inserisci una parola (max. %d caratteri): ", MAX_DIM);
	scanf("%s", parola);

	parola = (char *)realloc(parola, sizeof(char) * strlen(parola));

	if (palindroma(parola)) {
		printf("%s è una parola palindroma\n", parola);
	} else {
		crea_pal(parola);
		printf("%s è una parola palindroma\n", parola);
	}

	free(parola);
	return 0;
}


Esercizio 3

/* Si considerino i seguenti tipi:

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

dove un valore di tipo Impegno è caratterizzato da un orario (il campo time) e una stringa (il campo attivita) che descrive il tipo di impegno. Scrivere un programma per la compilazione dell’agenda degli impegni del giorno. Il programma deve chiedere all’utente il numero di impegni previsti per la giornata. Dovrà quindi creare dinamicamente un’agenda (un array di valori di tipo Impegno) e chiedere all’utente di riempirla inserendo gli impegni della giornata. Si osservi che un impegno è definito da una stringa, che indica il tipo di attività prevista, e da due interi che indicano l’ora e i minuti in cui l’impegno è fissato. */

#include 
#include 

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

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

void crea_agenda(Impegno **agenda, int n_impegni) {
	int i;

	*agenda = (Impegno *) malloc(sizeof(Impegno) * n_impegni);

	for(i = 0; i < n_impegni; i++) {
		printf("\nIMPEGNO NUMERO %d", i + 1);
		do {
			printf("\nInserire l'ora: ");
			scanf("%d", &(*agenda)[i].time.ore);
		} while((*agenda)[i].time.ore < 0 || (*agenda)[i].time.ore > 23);
		do {
			printf("Inserire i minuti: ");
			scanf("%d", &(*agenda)[i].time.minuti);
		} while((*agenda)[i].time.minuti < 0 || (*agenda)[i].time.minuti > 59);
		printf("Inserire l'attivita' (max. 20 caratteri): ");
		scanf("%s", (*agenda)[i].attivita);
	}
	return;
}

void stampa_agenda(Impegno *agenda, int n_impegni) {
	int i;

	printf("\nLista impegni:");
	for(i = 0; i < n_impegni; i++)
		printf("\nOre %02d:%02d ---> %s", agenda[i].time.ore, 
				agenda[i].time.minuti, agenda[i].attivita);
	printf("\n");

	return;
}

int main() {
	int n_impegni;
	Impegno *agenda;

	do {
		printf("Inserire il numero di impegni: ");
		scanf("%d", &n_impegni);
	} while (n_impegni <= 0);

	crea_agenda(&agenda, n_impegni);
	stampa_agenda(agenda, n_impegni);

	free(agenda);

	return 0;
}


<-- Torna alla lista delle soluzioni