Esercizio in C

di il
4 risposte

Esercizio in C

Salve programmatori, sto imparando il linguaggio in c attraverso una serie di programmi svolti in maniera graduale. ora sono arrivata ai cicli (while, for.. ) e mi sono ritrovata davanti questo esercizio:
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
io l'ho svolto in questo modo:
#include <stdio.h>
#include <stdlib.h>
#define N 5
int main()
{
    int v1[N], v2[N];
    int i=0, j=0,somma=0;
    printf("inserire il primo vettore: \n");
    for(i=0;i<N;i++){
        scanf("%d",&v1[i]);
    }
    printf("inserire il secondo vettore:\n");
    for(j=0;j<N;j++){
        scanf("%d",&v2[j]);
    }
    for(i=0;i<N;i++){
        for(j=0;j<N;j++){
            if(v1[i]!=v2[j]){
                j++;
            }
            else if(v1[i]==v2[j]){
                somma=somma+1;}
                else
                    somma=somma-1;

        }
        i++;
    }
    if(somma==N){
        printf("i vettori sono uguali");
    }
    else{
        printf("i vettori sono diversi");
        }
    return 0;
}
ed ho ragionato in questo modo..
all'inizio mi apro i due cicli for così mi permette di salvare i vari valori all'interno del vettore.. successivamente apro il ciglo for per il puntatore i e subito il ciclo for per la j così che se v1 è diverso dal valore v2[j] allora aumentava la j in modo tale da trovare un corrispondente ...
se il corrispondente c'era allora la conta mi aumentava di 1... così che alla fine se la conta era uguale a N valori nel vettore allora i vettori erano uguali... ma questo ragionamento non funziona ç_ç perchè ?

4 Risposte

  • Re: Esercizio in C

    Il problema sembra essere nella logica del programma, precisamente nel ciclo for annidato. Non controlla i valori come vorresti. In caso di problemi con cicli for annidati il modo migliore per risolvere un problema è quello di prendere un foglio e scriverti una tabella in cui vai a verificare come si comportano gli indici con dei valori di esempio. Per facilitarti il lavoro puoi andare prendere in considerazione due vettori formati da soli 3 elementi, te li scrivi in cima e scrivi a penna ogni passaggio del tuo programma.
    Stai attento:
    successivamente apro il ciglo for per il puntatore i
    La variabile i nel tuo cose è un indice come la j. I puntatori sono un'altra cosa (con cui avrai modo di sbattere la testa in seguito )
  • Re: Esercizio in C

    Aaaaaaaaaaah quindi da quello che ho capito dal tuo ragionamento.. la i e la j non indicano il valore effettivo.. ma la posizione in cui sto lavorando ???
    ho capito giusto ?
  • Re: Esercizio in C

    Io ho scritto che nel tuo programma è presente un errore e ti ho suggerito come potresti risolvere e dove potrebbe essere.
    La i e la j come qualsiasi altra variabile int che tu puoi dichiarare e usare possono essere sfruttate sia come indici che come valori.
    i=5 -> significa che la variabile i è uguale a 5.
    array[5]=10 (o: array=10 con i = 5) -> significa che nell'array in posizione 5 troviamo il valore 10.
    Se scrivo il seguente codice:
    
    for(i=0; i<=5; i++)
         array[i]=i;
    
    non faccio altro che riempire l'array con i valori da 0 a 5. In posizione 0 (i=0) avrei lo 0 ecc.
  • Re: Esercizio in C

    Indipendentemente dall'algoritmo il tuo ragionamento può funzionare solo se si tiene conto che nei vettori non possano esserci doppioni. Prendi per esempio in esame questi due vettori di lunghezza N = 5:

    1 2 3 4 4

    1 2 3 4 5

    Secondo il tuo ragionamento alla fine la variabile che usi come contatore varrà comunque N ma i due vettori sono differenti

    Quindi prima ancora di poterti aiutare serve sapere se nei due vettori possono esserci doppioni o no
Devi accedere o registrarti per scrivere nel forum
4 risposte