Accedi per seguire   
Seguaci 0
spiug

[c] Esercitazione 7

4 messaggi in questa discussione

ESERCIZIO 1

Si consideri l’esercizio sulla crittografia visto a Lezione (l'ho riportato nel codice).

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).

Come l'ho risolto:

#include <stdio.h>
#include <string.h>
#define N 2

void cripta (char parola[ ], char codici[ ]);
void decripta (char parola[ ], char codici[ ]);

main () {
 int p,l;
 char conversione[26]={'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
 char frase[N][20];
 char tmp[20];

 printf ("Inserisci una frase di 5 parole\n");
 for (p=0; p<N; p++)
	 scanf ("%s",frase[p]);

 printf ("La frase criptata è questa:\n");
 for (p=0; p<N; p++) {  
	 cripta(frase[p], conversione);
	 printf("%s",frase[p]);
	 printf (" ");
	 }

 printf("\n");	 
 printf("Sto decodificando la frase...\n");
 printf("Ecco la frase ritornata comprensbile:\n");
 for (p=0; p<N; p++) {
		  printf("%s",frase[p]);
		  decripta(frase[p], conversione);
		  decrypt(frase[p][0], conversione);
	 printf (" ");
	 }


		  scanf ("%s",frase[p]);
}


void cripta (char parola[ ], char codici[ ]) {
 int le;

 for (le=0; parola[le]!=('\0'); le++)
	 parola[le]=codici[parola[le]-'a'];		 
 return;
}


void decripta (char *parola, char codice[26]){
 int l;
 for (l=0; parola[l]!='\0'; l++) 
	 parola[l]=codice[parola[l]+'a'];   
	 printf("%c",parola[l]);	  
 return;
}

Come vedrete il crypta (che avevo copiato da scuola) funziona perfettamente...ma il decripta non mi mostra NULLA (nemmeno null...) :)

:sigh: ...è da un pezzo che mi scervello, ma non riesco a trovare l'inghippo... :P

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

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”).

Risolto e tutto OK :) :

#include <stdio.h>
#include <string.h>
#define N 20

main () {
 char parola[N];
 int p=1;
 int i,lun;

 printf("Inserisci la parola\n");
 scanf("%s",parola);

 for (i=0; i<((strlen(parola)-1)/2); i++)
	 if (parola[i]!=parola[(strlen(parola)-1)-(i)]) p=0;

 if (p==1) printf("...è una parola palindroma");
 else {
	  lun=strlen(parola)-1;
	  parola[(lun*2)-1]='\0';
	  for (i=1; i<=lun; i++)
		  parola[lun+i]=parola[lun-i];

 printf("Ci penso io a renderla palindroma:\n");
 printf("%s",parola);
 }
 scanf("%d",&p);
}

ESERCIZIO 3

Si considerino i seguenti tipi:

typedef struct { typedef struct {

intore; Orario time;

int minuti; char attivita[20];

} Orario; } 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.

Risolto anche questo senza troppi problemi (B) :

#include <stdlib.h>
#include <stdio.h>
typedef struct {int ore; 
		   int minuti; } Orario;

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

typedef Impegno *Lista;


main() {
   int a;
   int i;
   Lista lista[100];

   printf("Dimmi quanti impegni vuoi salvare pero oggi.\n");
   scanf("%d",&a);
   for (i=0; i<a; i++) {
		  lista[i]=(Lista)malloc(sizeof(Impegno));
		  printf ("Dammi l'ora dell'impegno nr %d\n",i+1);
		  scanf("%d",&((lista[i]->time).ore));
		  printf ("Dammi i minuti dell'impegno nr %d\n",i+1);
		  scanf("%d",&((lista[i]->time).minuti));
		  printf ("Dammi la descrizione, max 19 caratteri, dell'impegno nr %d\n",i+1);
		  scanf("%s",&(lista[i]->attivita));
		  printf("Ora passiamo al prossimo impegno!\n");
   }	  
}

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Sono di fretta ed ho guardato il tutto molto velocemente però immagino che qui ci vogliano un paio di parentesi in più, senza, il costrutto for considera solo l'istruzione successiva come corpo, stampando, di conseguenza, solo il carattere \0, che non vedi :P ;-)

void decripta (char *parola, char codice[26]){
 int l;
 for (l=0; parola[l]!='\0'; l++)
 {
	 parola[l]=codice[parola[l]+'a'];  
	 printf("%c",parola[l]);
 }
 return;
}

Se non è questo il problema stasera lo controllo più approfonditamente :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Se non è questo il problema stasera lo controllo più approfonditamente :)

Mi faresti un gran piacere :P

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un utente registrato per partecipare

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!


Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.


Accedi Ora
Accedi per seguire   
Seguaci 0