View Full Version : un nOob alle prese con matlab
matt22222
04-11-2006, 10:05
ciao a tutti!!ho da poco iniziato ad usare matlabe perciò non ne sono un grande esperto. :mc: :mc: ho un problema da risolvere, la prima parte è facile e l'ho fatta, la seconda sono in difficoltà.Mi aiutate?? :D :)
devo poter inserire valori da tastiera solo da 5 a 10, e fare la media. E questa è la parte per me facile.L'altra ke non so fare è far si che i numeri inserirti siano visualizzati in valore decrescente rispetto alla loro frequenza di inserimento.
Esempio: inserisco 1,2,3,5,5,5,6, e così via.Se inserisco 0 deve uscire:
la media è 3,15
5 +++
3 -
2 -
1 -
6 +
4
e ci devono essere dei + o - a seconda del numero di volte che il numero è stato inserito e + se è maggiore della media, - se è minore.
Spero di essermi spiegato bene.
Ciau:DDD
leox@mitoalfaromeo
04-11-2006, 11:15
devi contare le occorrenze dopo che li hai inseriti. (ti conviene fare un vettore che associa ad ogni numero il numero di ripetizioni)
poi nel ciclo for che ti scriverà i numeri ad ogni giro devi impostare
- una if che sceglie il segno (praticamente ti fai una variabile "SEGNO" di tipo carattere che SE n>media vale "+" altrimenti "-")
- e successivamente una for che va da 1 alla variabile che conta il numero di occorrenze e scrive la variabile segno.
matt22222
04-11-2006, 13:57
]devi contare le occorrenze dopo che li hai inseriti. (ti conviene fare un vettore che associa ad ogni numero il numero di ripetizioni[/B])
poi nel ciclo for che ti scriverà i numeri ad ogni giro devi impostare
- una if che sceglie il segno (praticamente ti fai una variabile "SEGNO" di tipo carattere che SE n>media vale "+" altrimenti "-")
- e successivamente una for che va da 1 alla variabile che conta il numero di occorrenze e scrive la variabile segno.
questa è la parte che non so fare. cioè, io so creare una matrice Z=zeros ([5 1]), che così mi conta le occorrenze per ogni M inserito e li inserisce nella matrice, che mi tiene il conto delle occorrenze, poi ho inizializzato K e P e poi?? io sono arrivato fino qui:
M=input('inserire numero');
count=0;
sum=0;
L=zeros ([22 1]);
L(M)=L(M)+1;
K='+';
P='-';
while M>0;
if M<=22;
count=count+1;
sum=sum+M;
L(M)=L(M)+1;
else disp('error:no over22');
end;
M=input('new number');
end;
Z=sum/count;
disp('media numeri inseriti');
disp(Z)
io e il ciclo for non è che siamo tanto amici:D:D
thanks
leox@mitoalfaromeo
04-11-2006, 15:29
ehm... sarà un paio d'anni che non uso matlab e quindi non sono freschissimo, perdipiù non ce l'ho installato...
e poi non capisco cosa significa che devi poter inserire valori da tastiera solo da 5 a 10, se poi nell'es usi l'1..
ad ogni modo, carina l'idea di utilizzare l'indice del vettore invece di memorizzare il numero, anche se non particolarmente comoda per lo svolgimento... sarebbe forse più comodo fare una matrice 22*2 dove la prima colonna è semplicemente copia l'indice di riga...
L2=zeros ([22 2]);
for i=1:22
L2(i,1)=i;
end
poi la riempi
L(M,2)=L(M,2)+1;
poi ordini la matrice in modo decrescente mantenendo la coppia "valore", "occorrenze". (ci sarà un metodo per l'ordinamento, ora non ricordo, digita "help sort")
fatto ciò, basta fare un ciclo
riga=1;
while L2(riga, 2)>0 //cioè considera solo i numeri inseriti almeno una volta
disp(L2(riga, 1))
if(L2(riga, 1))>media
segno='+';
else
segno='-';
end
for occ=1:L2(riga, 2)
disp(segno);
end
riga++;
end
in sostanza è così... bisogna solo vedere se il disp va a capo o meno. Se va a capo bisogna usare qualche altra funzione di stampa che non va a capo, ma la sotanza è quella
matt22222
04-11-2006, 16:36
si scusa, ho sbagliato io a mettere all'inizio i numeri, in realtà andavano da 1 a 22 ;)
cmq grazie, mi hai tolto da una situazione intricata, oltre che farmi vedere come usarer sto ciclo for, che mi è sempre stato spiegato nella forma tipo 1:1:22, e per cui della forma 1:22 ignoravo l'esitenza, oltre ad altri piccoli accorgimenti qua e là tra le righe..:D:D
ciau e grazie ancora:D:D:D
leox@mitoalfaromeo
04-11-2006, 16:43
si scusa, ho sbagliato io a mettere all'inizio i numeri, in realtà andavano da 1 a 22 ;)
cmq grazie, mi hai tolto da una situazione intricata, oltre che farmi vedere come usarer sto ciclo for, che mi è sempre stato spiegato nella forma tipo 1:1:22, e per cui della forma 1:22 ignoravo l'esitenza, oltre ad altri piccoli accorgimenti qua e là tra le righe..:D:D
ciau e grazie ancora:D:D:D
dire 1:1:22 è uguale a 1:22 perchè il "passo" o l'incremento di default è 1...
se vuoi fare un ciclo solo sui numeri dispari per esempio puoi fare 1:2:342342341 e verrà 1,3,5 ecc
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.