#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));
}