PDA

Visualizza la versione completa : [C] Visualizzare i valori comuni di due vettori


Buzzz
11-10-2011, 16:16
:ciauz:

devo fare questo "semplice" programmino, dove inseriti valori interi in due vettori, devo inserire i valori comuni in un terzo vettore.. io ci ho provato, ma mi visualizza chissà quali valori.. o.ò
qualcuno riesce ad aiutarmi, solo nella funzione dei valori comuni, il resto funziona bene.. :)



/*
inseriti valori in due vettori di dimensione differente,
inserisci in un terzo vettore i valori uguali ad entrambi i vettori,
mentre in un quarto vettore fai l'unione dei due vettori,
escludendo i valori uguali ad entrambi
*/

#include <stdio.h>
#define lung1 5
#define lung2 7

//inserisci i valori nel vettore1
int insVett1(int *dati1,int l1){
int i,num;
for(i=0;i<lung1;i++){
printf("Inserisci un numero %d di %d: ",i+1,lung1);
scanf("%d",& num);
*dati1++=num;
}
}
//inserisci i valori nel vettore2
int insVett2(int *dati2,int l2){
int i,num;
for(i=0;i<lung2;i++){
printf("Inserisci un numero %d di %d: ",i+1,lung2);
scanf("%d",& num);
*dati2++=num;
}
}

//valori uguali ad entrambi i vettori
int visUgu(int *dati1,int l1,int *dati2,int l2,int *datiUgu){
int i,j;
for(i=0;i<lung1;i++){
for(j=0;j<lung2;j++){
if(dati1[i]==dati2[j]){
datiUgu[i]=dati1[i];
}
}
}
for(i=0;i<lung1+lung2;i++){
printf("[ %d ] ",*datiUgu);
*datiUgu++;
}
}

//visualizza vettori
int visVett(int *dati1,int l1,int *dati2,int l2){
int i;
printf("\nIl primo vettore e':\n");
for(i=0;i<lung1;i++){
printf("[ %d ] ",*dati1);
*dati1++;
}
printf("\n\nIl secondo vettore e':\n");
for(i=0;i<lung2;i++){
printf("[ %d ] ",*dati2);
*dati2++;
}
}

int main(){
int test=-1,scelta;
int vett1[lung1],vett2[lung2],vettUgu[lung1+lung2];

printf("Inserisci il primo vettore:\n");
insVett1(vett1,lung1);
printf("\nInserisci il secondo vettore:\n");
insVett2(vett2,lung2);

while(test!=0){
printf("\n1- Visualizza i vettori;");
printf("\n2- Visualizza i valori uguali;");
printf("\n0- Esci;");
printf("\nScelta: ");
scanf("%d",&scelta);

switch(scelta){
case 1:{
visVett(vett1,lung1,vett2,lung2);
printf("\n");
break;
}
case 2:{
printf("\nI valori uguali ad entrambi i vettori sono:\n");
visUgu(vett1,lung1,vett2,lung2,vettUgu);
printf("\n");
break;
}
case 0:{
test=0;
break;
}
}
}
getchar();
}


Grazie mille! :ciauz:

Raam General
11-10-2011, 17:54
Il tuo programma ha parecchi difetti di "ortografia" poco importanti comunque; il danno è qui:


for(i=0;i<lung1+lung2;i++){
printf("[ %d ] ",*datiUgu);
*datiUgu++;
}


Tu presumi che tutti e lung1+lung2 (ovvero 12) posti siano occupati, e sai benissimo che non può essere.
Devi sostituire quell'espressione con la lunghezza dell'array (ovvero dei posti effettivamente occupati).
Devi cercare una funzione che te li calcoli (perché quando un posto "non è occupato" in realtà ha dentro un valore "casuale", in realtà non è vuoto).
Se la funzione di cui stavo parlando non esiste (ma lo dubito), potresti riempire l'array pieno di numeri uguali a tua scelta (ma esclusi dall'input), in questo modo potresti controllare se realmente quello è un numero uguale oppure era già lì, e in tal caso non fai il printf.
Ripeto che questa potrebbe essere una soluzione artigianale solo nel caso tu non riesca a trovare la funzione che ti calcola "la dimensione dell'array" (quanti posti occupati).
Comunque una volta risolto questo problema non è detto che il programma ti funzioni (dovresti aggiustare qualcosa).

Loading