Alcune considerazioni:
[*] In generale, effettuare un ciclo for con una sola iterazione, come hai fatto nella prima parte del codice che hai pubblicato non ha senso, basta scrivere direttamente le istruzioni sostituendo "i" con "1".
[*] sarebbe meglio effettuare prima la lettura dei valori in input e, poi, la ricerca dei valori massimi e minimi; in questo modo è vero che devi duplicare il loop, ma il codice risulta più chiaro e riutilizzabile.
Nell'effettuare la lettura dei dati di input con la funzione "input" bisogna inserire dei controlli di validità in modo che, se viene inserito un carattere (cioè non un numero) l'errore venga rilevato e la richiesta rifatta.
Questo lo si può fare specificando nella chiamata alla funzione "input" il parametro "''s": questo fa si che l'input, qualunque esso sia, numero o carattere venga considerato come una stringa.
Quindi si prova a convertire la stringa in un numero con la funzione "str2double", nel caso sia stato inserito come input un carattere (ad esempio "a" oppure una stringa) la funzionne "str2double" ritorna "NaN" (questo valore si può verificare con la funzione "isnan").
I caso contrario si ottiene il valore numerico inserito in input.
Nella domanda relativa alla identificazione delle posizioni dei a valori minimo e massimo, fai riferimento a porzioni di codice che non hai pubblicato, per cui non è possibile rispondere ad essa.
Ad ogni modo, in base a quello che hai scritto, è probabile che tu abbia inserito nel "posto" sbagliato" la chiamata alla funzione "fprintf"; si direbbe che venga chiamata alla fine del loop, quando l'indice ha raggiunto il valore massimo (8, appunto).
Per trovare la posizione del valore massimo e minimo è sufficiente aggiungere due variabili (es. "pos_min" e "pos_max") da settare con il valore dell'indice del loop, nel blocco "if" nel quale confronti i valori del vettore con "MIN" e "MAX".
Tieni presente che, in MatLab, esistono le funzioni "min" e "max" che ritornano, rispettivamente, il valore minimo e massimo di un vettore e la loro posizione all'interno del vettore.
Una possibile implementazione del codice potrebbe essere quella che segue, nella quale sono stati inseriti anche i controlli di validità degli input inseriti da tastiera.
Al fondo del codice c'è anche l'implementazione con l'utilizzo delle funzioni "min" e "max" di MatLab.
% Richiesta del numero di valori da inserire co controllo di validità
while(1)
str=input('Quanti valori di input si vogliono inserire? ','s');
n_input=str2double(str);
if(isnan(n_input))
fprintf('\nInput non valido\n')
else
break
end
end
% Inizializzazione del vettore di input
V=zeros(1,n_input);
% Loop per l'acquisizione dei dat di input
% Inizializzazione del contatore del numero di input da inserire
n_inseriti=0;
while(n_inseriti < n_input)
str=input(['Inserire il valore ' num2str(n_inseriti+1) ': '],'s');
tmp=str2double(str);
if(isnan(tmp))
fprintf('\nInput non valido\n')
else
n_inseriti=n_inseriti+1
V(n_inseriti)=tmp;
fprintf('\n')
end
end
% Stampa a video del vettore inserito
disp(['Vettore di input: ',num2str(V)])
% Inizializzazione delle variabili di output
% Valore minimo
min_val=1e9;
% Posizione del valore minimo
pos_min=-1;
% Valore massimo
max_val=-1e9;
% Poizione de valore massimo
pos_max=-1;
% Loop per la ricerca dei valori minimo, massimo e delle loro posizioni nel
% vettore di input
for i=1:n_input
if(V(i) < min_val)
min_val=V(i);
pos_min=i;
end
if(V(i) > max_val)
max_val=V(i);
pos_max=i;
end
end
% Stamoa a video dei valori trovati
fprintf('Il valore MINIMO è: %d e si trova nella posizione %d\n', min_val, pos_min)
fprintf('Il valore MASSIMO è: %d e si trova nella posizione %d\n', max_val, pos_max)
% Soluzione alternativa con l'utiizzo delle funzioni "min" e "max"
[min_val,pos_min]=min(V);
[max_val,pos_max]=max(V);
fprintf('Il valore MINIMO è: %d e si trova nella posizione %d\n', min_val, pos_min)
fprintf('Il valore MASSIMO è: %d e si trova nella posizione %d\n', max_val, pos_max)