#include <stdio.h> int aaa(int *x, int *y) { int *a; a = x; /*(B)*/ *a = *y; /*(C)*/ *y = *x; /*(D)*/ } main(){ int i, j; i = 3; j = 4; /*(A)*/ aaa(&i, &j); printf("i = %d, j = %d\n", i, j); }
#include <stdio.h> #include <stdlib.h> typedef struct LL *LISTA; struct LL { int NUMERO; LISTA SEGUITO; } ; LISTA TOGLI(LISTA l, int x) /*questa funzione elimina ogni occorrenza di x da l, l non sara' modificata */ { if(l == NULL) return NULL; else if(l -> NUMERO == x) return TOGLI(l -> SEGUITO,x); else{ LISTA l1 = (LISTA)malloc(sizeof(struct LL)); l1 -> NUMERO = l -> NUMERO; l1 -> SEGUITO = TOGLI(l -> SEGUITO,x); return l1; }; }
#include <stdio.h> #define BOOL int #define TRUE 1 #define FALSE 0 /*gli elementi del tipo INSIEME rappresentano gli insiemi di numeri reali la cui cardinalita' e' al piu' 50*/ typedef struct INSIEME{ int CARD; /*cardinalita' dell'insieme*/ float ELEMENTI[50]; /*contiene gli elementi dell'insieme nelle prime posizioni senza ripetizioni*/ }; /* la funzione APPARTIENE controlla se un elemento appartiene ad un insieme */ BOOL APPARTIENE(float x, INSIEME s) { int i; for(i=0; i < s.CARD; i++) if(x == s.ELEMENTI[i]) return TRUE; return FALSE; }; /* la costante VUOTO rappresenta l'insieme vuoto */ const INSIEME VUOTO = {0, {} }; /* la funzione CARDINALITA ritorna la cardinalita' di un insieme */ int CARDINALITA(INSIEME s) { return s.CARD; }; /* la funzione ADD ritorna l'insieme s a cui si e' aggiunto x; il parametro oveflow ritorna se vi e' stato o no l'overflow */ INSIEME ADD(float x, INSIEME s, BOOL *overflow) { if(APPARTIENE(x,s)) { *overflow = FALSE; return s; } else if(CARDINALITA(s) == 50) { *overflow = TRUE; return; } else { *overflow = FALSE; s.ELEMENTI[s.CARD] = x; s.CARD = s.CARD + 1; return s;} }; /* la funzione UNIONE ritorna l'unione di s1 ed s2; il parametro oveflow ritorna se vi e' stato o no l'overflow */ INSIEME UNIONE(INSIEME s1, INSIEME s2, BOOL *overflow) { int i; for(i=0; i < s2.CARD; i++) s1 = ADD(s2.ELEMENTI[i],s1, overflow); return s1; }; /* procedura di stampa utilizzata per il testing */ void STAMPA(INSIEME s) { int i; if(CARDINALITA(s) == 0) printf(" Insieme vuoto "); else{ printf(" { "); for(i=0; i < CARDINALITA(s); i++) printf(" %f ,",s.ELEMENTI[i]); printf(" } "); } } main() { INSIEME I1, I2, I3, I4; BOOL over; /* assegnare ad I1 l'insieme vuoto*/ I1 = VUOTO; printf("I1 = "); STAMPA(I1); printf("\n"); /* assegnare ad I2 l'insieme { 3.5, 7.0, 4.0 }*/ I2 = ADD(3.5, VUOTO, &over); I2 = ADD(7.0, I2, &over); I2 = ADD(4.0, I2, &over); printf("I2 = "); STAMPA(I2); printf("\n"); /* assegnare ad I3 l'insieme { 3.1, 7.0, 4.4, 8.8 }*/ I3 = ADD(3.1, VUOTO, &over); I3 = ADD(7.0, I3, &over); I3 = ADD(4.4, I3, &over); I3 = ADD(8.8, I3, &over); printf("I3 = "); STAMPA(I3); printf("\n"); /*controllare se 3.0 appartiene ad I2 U I3 */ if(APPARTIENE(3.0, UNIONE(I2,I3,&over))) printf("Appartiene\n"); else printf("Non appartiene\n"); /* stampare la cardinalita' di I3 U I2 U I1 */ I4= I1; I4 = UNIONE(I2,I4,&over); I4 = UNIONE(I3,I4,&over); printf("I4 = "); STAMPA(I4); printf("\n"); printf("Cardinalita di I3 U I2 U I1 = %d\n",CARDINALITA(I4)); }