Vai al contenuto

Primario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Secondario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Sfondo: Blank Waves Squares Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Corsi di Laurea










ROX @ Unisa - Forum degli studenti di Ingegneria utilizza i cookie. Se prosegui la navigazione accetti il loro uso.    Accetto l'uso dei cookie
-->
Foto

aiutoooo esercizio


  • Effettua l'accesso per rispondere
Questa discussione ha avuto 486 risposta/e

#81
giulia

giulia

    Advanced Member

  • Utente
  • StellaStellaStella
  • 285 Messaggi:
mi potreste aiutare a svolgere qst esercizi!! per favore

[b]Definisci[/b] una funzione visualizza_alcuni_elementi (A) che, data una matrice A, visualizza separatamente:
- tutti e soli gli elementi dispari contenuti nella matrice.
- tutti e i soli gli elementi multipli di 4 contenuti nella matrice. [10 punti].
% Esempio:

% A: -> Elementi dispari: 3 3 1 7
% 8 3 3 -> Elementi multipli di 4: 8 4 16
% 4 1 6
% 16 2 7
A=[1,2,3;4,5,6;7,8,9;21,19,18];

[b] Definire una funzione[/b]
% temp_critiche=elabora_temperature(n,temp_riferimento)
% che chieda
% all'utente di inserire da tastiera n valori di temperature e di
% confrontarle con una temperatura di riferimento temp_riferimento
% per conservarle in un vettore di temperature critiche.
% Se il valore inserito è maggiore della temperatura di riferimento,
% allora questo sarà caricato nel vettore temp_critiche.
% [7 punti]
%
% Esempio:
% n=5; temp_riferimento=90
% Inserisci valore temperatura: 110
% Inserisci valore temperatura: -2
% Inserisci valore temperatura: 60
% Inserisci valore temperatura: 92
% Inserisci valore temperatura: 100
% temp_critiche=
% 110 92 100

function temp_critiche=elabora_temperature(n,temp_riferimento)

temp_critiche=[];

end

[b]ESERCIZIO 3 [/b]Dato il vettore v dell'esercizio precedente, crea il vettore v1 moltiplicando tutti gli elementi di v per uno scalare scelto dall'utente. (Nota: devi usare le funzioni built-in in Matlab) [4 punti]
grazie

#82
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
@giulia
ecco la soluzione :
function[el_disp,el_mult_4]=visualizza_alcuni_elementi (A)
[r,c]=size(A);
k=0;
h=0;
for i=1:r
for j=1:c
if mod(A(i,j),4)==0
el_mult_4(k+1)=A(i,j);
k=k+1;
elseif mod(A(i,j),2)~=0
el_disp(h+1)=A(i,j);
h=h+1;
end
end
end
disp(['Gli elementi dispari sono: ', num2str(el_disp)]);
disp(['Gli elementi multipli di 4 sono: ', num2str(el_mult_4)]);
end

Nella command la richiami così:
visualizza_alcuni_elementi (A)


#83
giulia

giulia

    Advanced Member

  • Utente
  • StellaStellaStella
  • 285 Messaggi:
@peppepeppo
mi sapresti aiutare anche con gli altri 2 esercizi che ho pubblicato x favore!! grazie mille!!!

#84
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:

@peppepeppo
mi sapresti aiutare anche con gli altri 2 esercizi che ho pubblicato x favore!! grazie mille!!!

si ok, nn li avevo proprio visti gli altri due! Ora li faccio un attimo.

#85
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
ecco il secondo esercizio:
function temp_critiche=elabora_temperature(n,temp_riferimento)
for i=1:n
temp_tot(i)=input('Inserisci valore temperatura: ');
end
k=0;
for i=1:n
if temp_tot(i)>temp_riferimento
temp_critiche(k+1)=temp_tot(i);
k=k+1;
end
end
la richiami così:
function temp_critiche=elabora_temperature(p,q)
dove:
p=valore numerico di n
q=valore numerico di temp_riferimento
Faccio notare che se il valore n non fosse dato in input dalla funzione, il primo for non sarebbe stato possibile, in quanto non avresti potuto sapere a priori la lunghezza del vettore che io ho chiamato temp_tot. In tal caso si utilizza il ciclo while.

#86
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
Ecco il terzo esercizio:
function v1=moltiplica_el(v)
s=input('Inserire uno scalare: ');
v1=s.*(v);
end
Richiamala così:
v1=moltiplica_el(v)


#87
giulia

giulia

    Advanced Member

  • Utente
  • StellaStellaStella
  • 285 Messaggi:

@giulia
ecco la soluzione :

function[el_disp,el_mult_4]=visualizza_alcuni_elementi (A)
[r,c]=size(A);
k=0;
h=0;
for i=1:r
for j=1:c
if mod(A(i,j),4)==0
el_mult_4(k+1)=A(i,j);
k=k+1;
elseif mod(A(i,j),2)~=0
el_disp(h+1)=A(i,j);
h=h+1;
end
end
end
disp(['Gli elementi dispari sono: ', num2str(el_disp)]);
disp(['Gli elementi multipli di 4 sono: ', num2str(el_mult_4)]);
end

Nella command la richiami così:
visualizza_alcuni_elementi (A)


ti chiedo scusa anticipatamente x le domande che ti posso sembrare strane,ma siccome mi sto esercitando a fare gli esercizi sul programma da poco,(prima li facevo sul quaderno), che significa "nella command la richiami cosi????" ..io devo scrivere nella 'editor'???
ma
 function[el_disp,el_mult_4]=visualizza_alcuni_elementi (A)
lo devo scrivere io oppure me lo da già il prof nella traccia???
grazie

#88
giulia

giulia

    Advanced Member

  • Utente
  • StellaStellaStella
  • 285 Messaggi:

Ecco il terzo esercizio:

[code]function v1=moltiplica_el(v)[/code]
s=input('Inserire uno scalare: ');
v1=s.*(v);
end
Richiamala così:
v1=moltiplica_el(v)


io lo svolto allo stesso modo ma nn avevo scritto
function v1=moltiplica_el(v) 
e quando vado a scrivere
s=input('Inserire uno scalare: ');
v1=s.*(v)
mi da errore xkè???

#89
giulia

giulia

    Advanced Member

  • Utente
  • StellaStellaStella
  • 285 Messaggi:

ecco il secondo esercizio:

function temp_critiche=elabora_temperature(n,temp_riferimento)
for i=1:n
temp_tot(i)=input('Inserisci valore temperatura: ');
end
k=0;
for i=1:n
if temp_tot(i)>temp_riferimento
temp_critiche(k+1)=temp_tot(i);
k=k+1;
end
end
la richiami così:
function temp_critiche=elabora_temperature(p,q)
dove:
p=valore numerico di n
q=valore numerico di temp_riferimento
Faccio notare che se il valore n non fosse dato in input dalla funzione, il primo for non sarebbe stato possibile, in quanto non avresti potuto sapere a priori la lunghezza del vettore che io ho chiamato temp_tot. In tal caso si utilizza il ciclo while.


scusami , ancora, ma in qst caso si deve usare il ciclo while???: potresti aiutarmi ancora x favore!!!
% Definire una funzione
% temp_critiche=elabora_temperature(temp_acquisite) che
% chieda all'utente di inserire da
% tastiera una temperatura di riferimento temp_riferimento, analizzi
% il vettore di temperature acquisite temp_acquisite e crei un vettore
% di temperature critiche, temp_critiche, costituito da tutte e sole le
% temperature che sono inferiori alla temperatura di riferimento.
% [7 punti]
% Esempio:
% temp_acquisite=
% -3 -12 -1 0 3 -7
% Inserisci valore della temperatura di riferimento: -2
% temp_critiche=
% -3 -12 -7


function temp_critiche=elabora_temperature(temp_acquisite)

temp_critiche=[];

end


#90
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:

che significa "nella command la richiami cosi????" ..io devo scrivere nella 'editor'???
ma

 function[el_disp,el_mult_4]=visualizza_alcuni_elementi (A)
lo devo scrivere io oppure me lo da già il prof nella traccia???
grazie

La command window è quella che ti permette di richiamare la funzione che hai scritto nell' editor di MatLab sotto forma di file con estensione .m.
Il fatto che ti indico come richiamare la funzione nella commmand window, significa semplicemente che devi andare sulla command window di MaLab e scrivere esattamente quello che ti ho scritto.
In generale la sintassi per richiamare una funzione dalla command window è questa:
[output]=nome_funzione(input)
Poi dipende dai casi, per esempio :
1.se non vuoi che MatLab ti salvi il risultato nella variabile output, allora nel richiamare la funzione scrivi:
nome_funzione(input)
. In questo caso MatLab ti salva il risultato nella variabile ans , cioè la variabile di output "standard".
2.se vuoi richiamare più funzioni contemporaneamente, o più correttamente in successione tra loro, allora richiami (con i metodi descritti sopra) tutte le funzioni in un nuovo file che chiami per esempio prova.m, salvi il nuovo file che hai creato e nella command window questa volta scrivi solo il nome del file senza l' estensione, nel nostro esempio scrivi prova. Facendo in questo modo crei praticamente il main, che all' esame ti dovrebbe essere dato dal prof nella traccia.
Chiaramente tutto questo discorso vale a meno che gli script delle funzioni che devi richiamare non siano contenuti nella current folder, quindi accertati di questo prima di richiamare una funzione.
La seconda parte della domanda non l' ho capita sinceramente, potresti essere più chiara?

io lo svolto allo stesso modo ma nn avevo scritto

function v1=moltiplica_el(v) 
e quando vado a scrivere
s=input('Inserire uno scalare: ');
v1=s.*(v)
mi da errore xkè???

Che tipo di errore ti da?
Io ho provato a richiamare la funzione anche senza il function e gira correttamente.

scusami , ancora, ma in qst caso si deve usare il ciclo while???:

Ora la svolgo un attimo e ti faccio sapere!

#91
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
Ecco l' ultimo esercizio:
function temp_critiche=elabora_temperature(temp_acquisite)
temp_riferimento=input('Inserisci valore della temperatura di riferimento: ');
k=0;
for i=1:length(temp_acquisite)
if temp_acquisite(i) temp_critiche(k+1)=temp_acquisite(i);
k=k+1;
end
end
end
In questo caso non c'è bisogno del while perche sai benissimo quante volte devi andare a ciclare , ovvero quante volte devi fare la verifica che c'è scritta nell' if come condizione. Infatti la funzione deve confrontare tutti i valori di temperatura contenuti nel vettore temp_acquisite con il valore temp_riferimento che immette l' utente. Quanti sono i valori contenuti nel vettore temp_acquisite non lo conosci a priori, ma essendo il vettore un dato che la funzione ti da come input, puoi ricavarti il numero di elementi con il comando lenght(temp_acquisite). Il comando lenght ti restituisce la lunghezza del vettore, ovvero il numero di valori contenuti da temp_acquisite, quindi a questo punto hai tutte le informazioni che servono per innestare il for.
Dunque alla domanda:"quante volte devo fare la verifica che c'è scritta nell' if come condizione?" La risposta è: lo devi fare per i che va da 1 alla lunghezza del vettore temp_acquisite (che tradotto in MatLab si scrive: for i=1:length(temp_acquisite)) dove i è l' indice del vettore temp_acquisite.
Il while era obbligatorio nel caso in cui la traccia non ti avesse dato in input il vettore temp_acquisite, allora non avresti potuto usare il for e la funzione risultava molto più complessa da eseguire.

#92
giulia

giulia

    Advanced Member

  • Utente
  • StellaStellaStella
  • 285 Messaggi:
la traccia diceva
ESERCIZIO 2
% Dato il vettore v dell'esercizio precedente, crea il vettore v1moltiplicando tutti gli elementi di v per uno scalare scelto dall'utente.(Nota: devi usare le funzioni built-in in Matlab) [4 punti]

ed io ho scritto
  numero scalare=input('inserisci scalere:')
v1=scalare*(v)
esce
 scalare=input('inserisci scalare:')
inserisci scalare:v1=scalare*(v)
Error: The expression to the left of the equals sign is not a valid target for an assignment.

inserisci scalare:

scalare =

[]

>> v1=scalare*(v)
Error using *
Inner matrix dimensions must agree.

>> scalare=input('inserisci scalare:')
inserisci scalare:v1=scalare.*(v)
Error: The expression to the left of the equals sign is not a valid target for an assignment.

inserisci scalare:

scalare =

[]


#93
giulia

giulia

    Advanced Member

  • Utente
  • StellaStellaStella
  • 285 Messaggi:

Ecco l' ultimo esercizio:

function temp_critiche=elabora_temperature(temp_acquisite)
temp_riferimento=input('Inserisci valore della temperatura di riferimento: ');
k=0;
for i=1:length(temp_acquisite)
if temp_acquisite(i) temp_critiche(k+1)=temp_acquisite(i);
k=k+1;
end
end
end
In questo caso non c'è bisogno del while perche sai benissimo quante volte devi andare a ciclare , ovvero quante volte devi fare la verifica che c'è scritta nell' if come condizione. Infatti la funzione deve confrontare tutti i valori di temperatura contenuti nel vettore temp_acquisite con il valore temp_riferimento che immette l' utente. Quanti sono i valori contenuti nel vettore temp_acquisite non lo conosci a priori, ma essendo il vettore un dato che la funzione ti da come input, puoi ricavarti il numero di elementi con il comando lenght(temp_acquisite). Il comando lenght ti restituisce la lunghezza del vettore, ovvero il numero di valori contenuti da temp_acquisite, quindi a questo punto hai tutte le informazioni che servono per innestare il for.
Dunque alla domanda:"quante volte devo fare la verifica che c'è scritta nell' if come condizione?" La risposta è: lo devi fare per i che va da 1 alla lunghezza del vettore temp_acquisite (che tradotto in MatLab si scrive: for i=1:length(temp_acquisite)) dove i è l' indice del vettore temp_acquisite.
Il while era obbligatorio nel caso in cui la traccia non ti avesse dato in input il vettore temp_acquisite, allora non avresti potuto usare il for e la funzione risultava molto più complessa da eseguire.


io questo lo ho risolto cosi, puoi dirmi se è giusto, perchè nn so far partire il programma x verificare se è corretto
function temp_critiche=elabora_temperature(temp_acquisite)
temp_riferimento=input('inserisci temp_riferimento:');
n=length(temp_acquisite);
k=1;
for i=1:n
if temp_acquisite(i) temp_critiche(k)=temp_acquisite(i);
k=k+1;
end;
end;
end


#94
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
Allora gli errori sono tre:

numero scalare=input('inserisci scalere:') % nell' assegnazione di una variabile, il nome della variabile non va mai con gli spazi, dunque non è corretto scrivere numero scalare, mentre lo è numero_scalare
v1=scalare*(v) % gli errori qui sono due: il primo è l'uso del segno di prodotto di uno scalare per un vettore che è .* e non solo *; il secondo errore è di concetto: il valore dello scalare che hai chiesto all' utente di digitare, tu lo hai chiamato numero_scalare. Ora, nel momento in cui alla stringa numero_scalare assegni qualche cosa, quella stringa diventa una variabile ed è quella la variabile che devi moltiplicare per il vettore v e non la variabile scalare, che di fatto in questa funzione non esiste!



#95
giulia

giulia

    Advanced Member

  • Utente
  • StellaStellaStella
  • 285 Messaggi:
@peppepeppo

ulteriore domanda, quando mi chiede:
1. Genera un vettore v di 10 numeri interi random compresi tra 0 e 10. (Nota: devi usare le funzioni built-in in Matlab) [4 punti]
posso scrivere in tutti e due i modi:
 v=round(rand(1,10)*(10-0)+0)

v=ceil(rand(1,10)*(10-0)+0)

grazie x la disponibilità!!!!! :notworthy: :notworthy: :notworthy: :notworthy:

#96
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
Si ok la tua soluzione è corretta , c' è solo qualche imperfezione:
1. dopo gli end non serve il ;, gli end servono per terminare l' esecuzione di una particolare funzione (ciclo, condizione, intera funzione, etc.), quindi pur essendo una "funzione"(sarebbe più un comando in realtà, cmq..) non restituisce output già da se quindi il ; non serve.
2.Più che un' imperfezione questo è un consiglio: non scrivere tutto sulla stessa colonna, cerca di intentare con il tab, altrimenti potresti confonderti con gli end.
Per richiamare la funzione, invece, te l' ho spiegato: basta che nella current folder compare il file che in questo caso si chiama elabora_temperature.m, quindi vai nella command window e digiti: temp_critiche=elabora_temperature(temp_acquisite).

#97
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:

ulteriore domanda, quando mi chiede:
1. Genera un vettore v di 10 numeri interi random compresi tra 0 e 10. (Nota: devi usare le funzioni built-in in Matlab) [4 punti]
posso scrivere in tutti e due i modi:

 v=round(rand(1,10)*(10-0)+0)
v=ceil(rand(1,10)*(10-0)+0)

Si, entrambe le sintassi sono corrette. Leggendo l' help puoi notare la differenza fra ceil e round, ma in questo caso l' uno vale l' altro.

#98
giulia

giulia

    Advanced Member

  • Utente
  • StellaStellaStella
  • 285 Messaggi:

ulteriore domanda, quando mi chiede:
1. Genera un vettore v di 10 numeri interi random compresi tra 0 e 10. (Nota: devi usare le funzioni built-in in Matlab) [4 punti]
posso scrivere in tutti e due i modi:

 v=round(rand(1,10)*(10-0)+0)
v=ceil(rand(1,10)*(10-0)+0)

Si, entrambe le sintassi sono corrette. Leggendo l' help puoi notare la differenza fra ceil e round, ma in questo caso l' uno vale l' altro.

ok grazie ancora!!!!

#99
renaulto

renaulto

    Member

  • Utente
  • StellaStella
  • 10 Messaggi:

Mi spiace, ma nn so cosa dirti, l' ho appena provata e funziona correttamente!
Non hai modo di provare su MatLab?


con matlab tutto ok! grazie ancora e...a risentirci per futuri dubbi :D :D

#100
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:

con matlab tutto ok! grazie ancora e...a risentirci per futuri dubbi :D :D

Ok!Grazie dell' avvertimento!




Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi