Ciao ragazzi, e' da qualche settimana che mi sto cimentando nel c e vorrei qualche consiglio per questo esercizio.
Il programma non funziona, il problema sta nella funzione confronto. Non so se e' un errore banale o "critico" ma vorrei capire dove sbaglio perche' ero davvero convinto che il codice fosse scritto bene.
Se qualcuno puo' darmi una mano ve ne sarei grat.
Scrivere una funzione che ha come parametri 3 array di interi a[], b[] e c[] con le rispettive lunghezze na, nb, nc.
L'array a[] è la sorgente, b[] è il filtro, c[] è la destinazione.
La funzione esamina l'array a[] e copia in c[] soltanto gli elementi per cui l'array filtro b[] contiene una coppia adiacente di elementi b[k] e b[k+1] che hanno la somma pari all'elemento da copiare.
In altri termini, copia a
se esiste almeno un indice k per cui b[k] + b[k+1] == a.
La funzione restituisce il numero di elementi copiati.
Si può assumere che nc >= na, cioè che l'array destinazione sia abbastanza ampio da poterci copiare tutti gli elementi dell'array sorgente.
#include <stdio.h>
#define size 100
int array ( int a[]) {
int i;
int n = 0;
printf ("Inserisci i valori del tuo array, -1 per fermarti\n");
for ( i = 0; i<= size-1; i++)
{
scanf ("%d",& a[i]);
n++;
if (a[i]==-1)
{
n--;
break;
}
}
return n;
}
int confronto ( int a[], int b[], int n, int m, int c[]) {
int i = 0;//indice vettore a
int j = 0;//indice vettore b
int k = 0;//indice vettore c
int trovato = 0;
int w = 0;//rimpimento c
while ( i < n)//scorre il vettore a in modo da confrontarlo com b
{
while ( j < m || trovato == 0)
{
if (a[i] == (b[j]+b[j+1]))
{
c[k] = a[i];
k++;
w++;
trovato = 1;
}
else j++;
}
trovato = 0;
i++;
j = 0;
}
return w;
}
void stampa ( int a[], int n) {
int i;
for ( i = 0; i<= n-1; i++)
{
printf ("Posizione: %d, Valore: %d\n", i, a[i]);
}
}
int main () {
int A[size];
int B[size];
int C[size];
int N = 0;
int M = 0;
int W = 0;
printf("Valore vettore A\n");
N = array(A);
stampa(A, N);
printf("Valore vettore B\n");
M = array(B);
stampa(B, M);
W = confronto(A,B,N,M,C);
stampa(C, W);
return 0;
}