Esercizio utilizzando una funzione

di il
2 risposte

Esercizio utilizzando una funzione

Ciao a tutti!
Utilizzando una function dovrei ricevere in input un vettore di numeri positivi v, un numero intero positivo s e dovrei controllare se esistono nel vettore v due elementi di cui la somma è pari a s. Nel caso non esistano la funzione deve restituirmi -1. Nel caso esistano la funzione deve restituirmi i due valori come vettore.
[function [a]=as(v,s)
v=input('inserisci vettore v:')
s=input('inserisci s:')
for i=1:length(v)
if s==[v(i)+v(i+1)]
a= [v(i),v(i+1)]
else
a=-1
end
end
end
]
Matlab mi segnala l'errore nella linea 5,che è in corrispondenza dell if.
Per cortesia qualcuno mi potrebbe aiutare a capire cosa sbaglio e come potrei procedere?
Grazie mille in anticipo

2 Risposte

  • Re: Esercizio utilizzando una funzione

    Nel codice che hai scritto ci sono diversi errori.

    Quelle che genera il messaggio di errore, sta nel fatto che hai definito il loop da 1 a length(v), vale a dire da 1 al numero di elementi del vettore, ma nella dell'if, usi v(i+1), questo fa si che, nel corso dell'ultima iterazione, cerchi di accedere all'elemento v(i+1) che è al di fuori del vettore

    Il secondo errore consiste nel fatto che utilizzi un solo ciclo for.
    Ammesso di aver corretto il promo errore (dovrebbe essere for i=1:length(v)-1), il codice che hai scritto verifica solo il valore della somma di due elementi consecutivi del vettore di input, mentre, dalla domanda, sembra che tu voglia considerare tutte le possibili coppie.

    Un terzo errore consiste nel fatto che nel blocco "if" il valore assegnato alla variabile "a" viene sovrascritto ad ogni iterazione, per cui, alla fine avrai solo il valore dell'ultima coppia di valori controllati.
    Inoltre a seconda del valore della somma, assegni alla variabile "a" in un caso un vettore ( a= [v(i),v(i+1)], nell'altro uno scalare.

    Quello che potresti fare è creare una matrice con i valori delle coppie di valori testati ed un flag (1, 0) per identificare se la condizione è stata verificata

    Una possibile soluzione che testi tutte le combinazioni potrebbe essere
    
    res=[]
    for i=1:length(v)-1
       for j=i+1:length(v)
          somma=v(i)+v(j)
          if(somma == s)
             res=[res;v(i) v(j) v(i)+v(j) 1];
          else
             res=[res;v(i) v(j) v(i)+v(j) -1];
          end
       end
    end
    
  • Re: Esercizio utilizzando una funzione

    Grazie mille!!!
Devi accedere o registrarti per scrivere nel forum
2 risposte