Untitled
/* 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