Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di Buzzz
    Registrato dal
    Jan 2009
    Messaggi
    775

    [C] - Puntatori: visualizza i valori comuni di due vettori.



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

    codice:
    /*
    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!

  2. #2
    Il tuo programma ha parecchi difetti di "ortografia" poco importanti comunque; il danno è qui:
    codice:
    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).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.