Esercizio sugli array

di il
5 risposte

Esercizio sugli array

Ciao a tutti, sto svolgendo un esercizio la cui consegna è:
Si scriva un programma C che:
a. legga 2 vettori di N elementi interi (con N costante predefinita)
b. stabilisca se i due vettori contengono gli stessi elementi, anche
disposti in ordine differente
Esempio: siano dati i due vettori seguenti:
v1 15 3 12 13 29
v2 15 29 13 3 12
questi contengono gli stessi valori, anche se in posizioni differenti.
Invece, i due vettori seguenti:
v1 11 3 12 18 29
v2 12 29 13 4 12
non contengono gli stessi valori.
Il codice che ho scritto finora è:
#include <stdio.h>
#include <stdlib.h>
#define N 5

int main()
{
    int v1[N],v2[N],i,j,uguale=1;

    for(i=0;i<N;i++)
    {
        printf("Inserire un valore per il primo vettore: ");
        scanf("%d", &v1[i]);
    }

    printf("\n");

    for(i=0;i<N;i++)
    {
        printf("Inserire un valore per il secondo vettore: ");
        scanf("%d", &v2[i]);
    }

    for(i=0;i<N && uguale==1;i++)
    {
        uguale=0;

        for(j=0;j<N && uguale==0;j++)
        {
            if(v2[j]==v1[i])
                {
                    uguale=1;
                }
        }
    }

    if(uguale==1)
        printf("\nI due vettori contengono gli stessi elementi.\n");
    else
        printf("\nI due vettori non contengono gli stessi elementi.\n");

    return 0;
}
il quale funziona correttamente per sequenze in cui ogni valore compare solo una volta, mentre se nel primo vettore un valore compare due volte e solo una volta nel secondo risulta come se i vettori contenessero gli stessi elementi. Immagino di dovere aggiungere una riga all'interno dell'if, del tipo v2[j]=?, ma non ho nessuna idea. Sarebbe possibile eliminare il contenuto del vettore?
Grazie mille in anticipo!

5 Risposte

  • Re: Esercizio sugli array

    Secondo me potresti utilizzare due vettori di supporto che contino la frequenza degli elementi dei due rispettivi vettori e confrontare questi.
  • Re: Esercizio sugli array

    Te lo dice semplicemente perché immagina questi due vettori {1,1,2} e {1,2,3} quando controlli il primo 1 del primo vettore, il ciclo vede il primo 1 del secondo e ti dice che c'è. Poi va al secondo 1, e anche con questo trova la corrispondenza nel primo 1. Io ho in mente un modo che usa una funzione, che prende come argomento un array e un valore, e conta le volte che quel valore appare in quell'array. Poi prende lo stesso valore e conta le volte in cui appare nell'altro array, se tutti questi valori sono uguali per tutti gli elementi allora li contengono allora stesso modo
  • Re: Esercizio sugli array

    E' quello che ha detto Eduadie sull' uso di vettori di conteggio della frequenza degli elementi
  • Re: Esercizio sugli array

    Si ma io userei una funzione invece di altri due array, che potrebbe essere più pratica
  • Re: Esercizio sugli array

    Avevo anche pensato di scambiare i valori già analizzati nel secondo vettore con gli ultimi valori dello stesso, utilizzando un'altra variabile come contatore. Secondo voi è fattibile? Ho buttato giù questo for:
    for(i=0;i<N && uguale==1;i++)
        {
            uguale=0;
    
            for(j=0;j<(N-l) && uguale==0;j++)
            {
                if(v2[j]==v1[i])
                    {
                        uguale=1;
                        tmp=v2[j];
                        v2[j]=v2[N-l-1];
                        v2[N-l-1]=tmp;
                        l++;
                    }
            }
        }
    con l inizializzata a 0.
Devi accedere o registrarti per scrivere nel forum
5 risposte