ESERCIZIO SU C++ CON TOLLERANZA!!

di il
12 risposte

ESERCIZIO SU C++ CON TOLLERANZA!!

Salve, ho problemi con questo programma.. devo trovare l'array più piccolo nel più grande con tolleranza di almeno un elemento, ma è la prima volta che lavoro con la tolleranza quindi non so.. ho provato a fare qualche ricerca su internet e questo è il risultato:
/* scrivere una funzione booleana che riceva in input un array di interi v di dimensione dim_v 
e un secondo array di interi w di dimensione dim_w (con dim_w<dim_v) e determini
se w è contenuto in v con tolleranze di al di più di un elemento. ad esempio se consideriamo

v : 4, 7, 8, 3, 5, 12, 19, -2

w : 8, -4, 5

l'array w è contenuto nell'array v con tolleranza 1 poichè in v è presente
la sequenza 8 3 5 che differisce da w per il solo elemento 3 */

#include <iostream>
#include <cmath>
using namespace std;

bool trova_array(int *v, int dim_v, int *w, int dim_w)
{
    int cont=0;
    int tolleranza= 1;
    for (int i=0; i<=dim_w-dim_v;i++)
    {
        for (int j=0; j<dim_w;j++)
        if(fabs(v[0+j]==w[i+j]) <= tolleranza)
        cont++;
        else 
        break;
        if (cont==dim_w)
        return true;
    }
return false;
}

int main()
{
const int dim_v=8;
int v[]={4, 7, 8, 3, 5, 12, 19, -2};

const int dim_w=3;
int w[]={8,-4,-5};

bool trovato = trova_array(v,dim_v,w,dim_w);
if (trovato)
cout << "l'array è contenuto" << endl;
else
cout << "l'array non è contenuto" << endl; 

    return 0;
}
qualcuno piò dirmi cosa sbaglio? la funziona per vedere se l'array piccolo è contenuto nel più grande è corretta, ho problemi solo con la tolleranza

12 Risposte

  • Re: ESERCIZIO SU C++ CON TOLLERANZA!!

    Ad occhio, direi che i problemi li ha avuti chi ha scritto la traccia
  • Re: ESERCIZIO SU C++ CON TOLLERANZA!!

    A parte questo.. Potresti dirmi, se lo sai ovviamente, come si può usare questa tolleranza ? Cosa sbaglio nella funzione?
  • Re: ESERCIZIO SU C++ CON TOLLERANZA!!

  • Re: ESERCIZIO SU C++ CON TOLLERANZA!!

    Perché la traccia non ha senso? C'è un array con 3 elementi che differiscono dagli elementi del secondo array per una tolleranza di più o meno uno
  • Re: ESERCIZIO SU C++ CON TOLLERANZA!!

    cavamr ha scritto:


    Perché la traccia non ha senso? C'è un array con 3 elementi che differiscono dagli elementi del secondo array per una tolleranza di più o meno uno
    Certo, ora che hai modificato il post l'esempio è corretto, mi pare ovvio. Adesso torno indietro nel tempo e modifico il mio
  • Re: ESERCIZIO SU C++ CON TOLLERANZA!!

    Mamma mia ma anche se fosse stata sbagliata non ci vuole una logica a capire cosa voleva l'esercizio comunque eh.. Dici che non sai o non vuoi aiutarmi che fai prima invece di tutti sti giri di parole! Buona serata
  • Re: ESERCIZIO SU C++ CON TOLLERANZA!!

    Infatti ora che l'esempio è corretto era esattamente come ho ipotizzato. Conta gli elementi che non ci sono: quella è la tolleranza
  • Re: ESERCIZIO SU C++ CON TOLLERANZA!!

    Non ho capito.. gli elementi che non ci sono sarebbero 6..ma la tolleranza me la dà direttamente la traccia dicendo che è 1.
    Forse ho capito male io la traccia?! devo vedere se l'array piccolo è contenuto nel più grande con tolleranza di più o meno uno, cioè gli elementi possono differire solo di un numero
  • Re: ESERCIZIO SU C++ CON TOLLERANZA!!

    Gli elementi di w che non ci sono in v, non viceversa
  • Re: ESERCIZIO SU C++ CON TOLLERANZA!!

    È sbagliato così?
    if(fabs(w[0+j]==v[i+j]) <= tolleranza)
  • Re: ESERCIZIO SU C++ CON TOLLERANZA!!

    Quella if non ha senso. Il problema (ora) è semplice

    Nell'esempio fatto devi contare gli elementi dell'array v che sono uguali a quelli dell'array presi a 3 a 3. Se ne conti 3 o 2 allora restituisci true.

    Un consiglio. Lascia stare per ora la tolleranza e scrivi il codice che trovi se l'array v è contenuto in v lasciando perdere per ora la tolleranza.
  • Re: ESERCIZIO SU C++ CON TOLLERANZA!!

    bool trova_array(int *v, int dim_v, int *w, int dim_w)
    {
        int cont=0;
        for (int i=0; i<=dim_v-dim_w;i++)
        {
            for (int j=0; j<dim_w;j++)
            if(w[0+j]==v[i+j])
            cont++;
            else
            break;
            if (cont==dim_w)
            return true;
        }
    return false;
    }
    questo è il codice..effettivamente l'ho corretto e prima era sbagliato, ora ho provato varie volte e funziona
Devi accedere o registrarti per scrivere nel forum
12 risposte