Testo dell'esercizio
In base alla scelta fornita in ingresso dall'utente, effettuare l'unione o l'intersezione o la differenza di due elenchi di nomi contenuti in due vettori A(N) e B(M), con N >0 e M >0, caricando l'insieme risultante in un nuovo vettore identificato da C.
Sugg:
Definire i vettori A, B, C globali.
Funzione menu: visualizza il menu e ritona la scelta dell'utente
Funzione unione: effettua l'unione dei due vettori
Funzione intersezione: effettua l'intersezione dei due vettori
Funzione differenza: effettua la differenza dei due vettori
mostra soluzione
/*
CLAUDIO CARIDNALE 3AI
In base alla scelta fornita in ingresso dall'utente, effettuare l'unione o l'intersezione o la differenza di due elenchi di nomi contenuti in due vettori A(N) e B(M), con N >0 e M >0, caricando l'insieme risultante in un nuovo vettore identificato da C.
Sugg:
Definire i vettori A, B, C globali.
Funzione menu: visualizza il menu e ritona la scelta dell'utente
Funzione unione: effettua l'unione dei due vettori
Funzione intersezione: effettua l'intersezione dei due vettori
Funzione differenza: effettua la differenza dei due vettori
*/
#include<stdio.h>
#define MAX 1000
int menu(void);
void unione(void);
void intersezione(void);
void differenza(void);
int lena;
int lenb;
int lenc;
int A[MAX];
int B[MAX];
int C[MAX];
int main(){
//dichiarazioni
int i,j;
//acquisizione lunghezze
do{
printf("inserire la lunghezza di A : ");
scanf("%d",&lena);
}while(lena<1 || lena>=MAX);
do{
printf("inserire la lunghezza di B : ");
scanf("%d",&lenb);
}while(lenb<1 || lenb>=MAX);
//acquisizione dati
//A
for(i=0;i<lena;i++){
printf("inserire il %d° di A : ",i+1);
scanf("%d",&A[i]);
}
//B
for(i=0;i<lenb;i++){
printf("inserire il %d° di B : ",i+1);
scanf("%d",&B[i]);
}
//scelte
switch(menu()){
case 1:
unione();
break;
case 2:
intersezione();
break;
case 3:
differenza();
break;
}
for(i=0;i<lenc;i++)
printf("%d\n",C[i]);
}
int menu(void){
//dichiarazioni
int scelta;
//acqusizione
do{
printf("1) per l'unione\n2) per l'intersezione\n3) per la differenza\nscelta : ");
scanf("%d",&scelta);
}while(scelta<1 || scelta >3);
//ritorno
return scelta;
}
void unione(void){
//dichiarazioni
int i,j,trovato;
//unione
//vet A
lenc = 0;
for(i=0;i<lena;i++){
trovato = 0;
for(j=0;j<i && !trovato;j++)
if(A[i]==C[j])
trovato = 1;
if(!trovato)
C[lenc++] = A[i];
}
//vet B
for(i=0;i<lenb;i++){
trovato=0;
for(j=0;j<lenc && !trovato;j++)
if(B[i]==C[j])
trovato = 1;
if(!trovato)
C[lenc++] = B[i];
}
}
void intersezione(void){
//dichiarazioni
int i,j,trovato;
//intersezione
lenc = 0;
for(i=0;i<lena;i++){
trovato = 1;
for(j=0;j<lenb && trovato;j++)
if(A[i] == B[j])
trovato = 0;
for(j=0;j<lenc && !trovato;j++)
if(A[i]==C[j])
trovato = 1;
if(!trovato)
C[lenc++] = A[i];
}
}
void differenza(void){
//dichiarazioni
int i,j,trovato;
//intersezione
lenc = 0;
//vet A
for(i=0;i<lena;i++){
trovato = 1;
for(j=0;j<lenb && trovato;j++)
if(A[i] == B[j])
trovato = 0;
for(j=0;j<lenc && trovato;j++)
if(A[i]==C[j])
trovato = 0;
if(trovato)
C[lenc++] = A[i];
}
//vet B
for(i=0;i<lenb;i++){
trovato = 1;
for(j=0;j<lena && trovato;j++)
if(B[i] == A[j])
trovato = 0;
for(j=0;j<lenc && trovato;j++)
if(B[i]==C[j])
trovato = 0;
if(trovato)
C[lenc++] = B[i];
}
}
Testi Consigliati:
Il linguaggio C. Principi di programmazione e manuale di riferimento. Ediz. MyLab. Con Contenuto digitale per download e accesso on line
C guida alla programmazione: Conoscere lo standard C11 dalle basi del linguaggio alle direttive del preprocessore (Programmare con C Vol. 1)
Programmazione in C
torna