Untitled

 avatar
unknown
c_cpp
21 days ago
1.9 kB
3
Indexable
/*
Scrivere un sottoprogramma che riceve in ingresso due vettori di valori in virgola mobile N e W e qualsiasi altro parametro ritenuto strettamente
necessario. Il sottoprogramma trova il sottovettore di elementi contigui di N che massimizza il prodotto scalare con W e trasmette al chiamante
l’indice in N da cui parte tale sottovettore ed il risultato ottenuto. Nel caso ci siano più sottovettori che permettono di ottenere lo stesso valore
massimo come prodotto scalare, il sottoprogramma trasmettere l’indice del primo trovato. Nel caso il prodotto scalare non possa esser calcolato il
sottoprogramma trasmette al chiamante i valori -1 e 0.0.
Esempio:
Ingresso: N = [1.0 -2.0 2.5 -5.0] W = [-3.0 5.5]
Uscita: indice = 1, risultato = 19.75
Il risultato è ottenuto analizzando i sottovettori [1.0 -2.0], [-2.0 2.5] e [2.5 -5.0], dei quali il secondo massimizza il prodotto
scalare per W.
*/
#include <stdio.h>


N = [1.0, -2.0, 2.5, -5.0]
W = [-3.0, 5.5]

(1.0 × -3.0) + (-2.0 × 5.5)
=  -3.0 + -11.0
= -14.0

(-2.0 × -3.0) + (2.5 × 5.5)
=  6.0 + 13.75
 = 19.75
 
(2.5 × -3.0) + (-5.0 × 5.5)
= -7.5 + -27.5
= -35.0

void trovaSottovettor(float *N, float *W, int lungN, int lungW, int *indice, float *risultato)
{
    if(lungN == 0 || lungW == 0)
    {
        *indice = -1;
        *risultato = 0.0;
        return;
    }
    
    if(lungW > lungN)
    {
        *indice = -1;
        *risultato = 0.0;
        return;
    }
    
    float maxProdotto = 0.0;
    
    for(int i=0; i<lungN-lungW; i++)
    {
        float prodotto = 0.0;
        for(int j=0; j<lungW; j++)
        {
            prodotto = prodotto+ N[i+j] * W[j];
        }
        
        if(prodotto > maxProdotto)
        {
            maxProdotto = prodotto;
            *indice = i;
        }
    }
    
    *risultato = maxProdotto;
}

int main() {
    // Write C code here
    printf("Try programiz.pro");

    return 0;
}
Leave a Comment