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

#441
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
@paky18
Hai sbagliato a scrivere giri_riferimento_max nell' if, devi aggiungere la n!

#442
paky18

paky18

    Member

  • Utente
  • StellaStella
  • 24 Messaggi:
Grazie peppepeppo! Scusatemi per l'errore stupido, ma proprio non me ne ero accorta :rosso:

#443
ales

ales

    Advanced Member

  • Utente
  • StellaStellaStella
  • 46 Messaggi:
vorrei un aiuto su questo esercizio uscito allo scorso appello. mi dava una matrice di 6 colonne in cui nella prima colonna c'erano le matricole dei dipendenti di un'azienda, nelle altre colonne informazioni varie per ciascun dipendente (permessi, ore di straordinario, ecc). voglio trovare le matricole dei dipendenti che abbiano una delle caratteristiche maggiore di un certo numero (per esempio esempio A(i,6)>8) e contemporaneamente la media delle rimanenti caratteristiche maggiori di 38. scusate ma non ricordo la traccia precisa quindi spero che qualcuno riesca a comprendere la traccia così esposta. grazie.
function dipendenti_premiati=calcola_premi(A)

#444
ales

ales

    Advanced Member

  • Utente
  • StellaStellaStella
  • 46 Messaggi:
sempre nell'appello di febbraio il quarto esercizio era:
function ImpulsiCorrente=calcola_correnti(vet, corr_minimo,corr_massimo)
mi chiedeva poi di visualizzare il vettore vet e il vettore ImpulsiCorrente su uno stesso grafico con relativi marker, colori e tratti ma non ho capito se i plot vadano messi prima o dopo gli end.
io l'ho svolto così e partiva:
function ImpulsiCorrente=calcola_correnti(vet, corr_minimo,corr_massimo)
k=1;
n=length(vet);
for i=1:n
if vet(i)>corr_minimo && vet(i) ImpulsiCorrente(k)=vet(i);
k=k+1;
end
end
end


#445
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:

vorrei un aiuto su questo esercizio uscito allo scorso appello. mi dava una matrice di 6 colonne in cui nella prima colonna c'erano le matricole dei dipendenti di un'azienda, nelle altre colonne informazioni varie per ciascun dipendente (permessi, ore di straordinario, ecc). voglio trovare le matricole dei dipendenti che abbiano una delle caratteristiche maggiore di un certo numero (per esempio esempio A(i,6)>8) e contemporaneamente la media delle rimanenti caratteristiche maggiori di 38. scusate ma non ricordo la traccia precisa quindi spero che qualcuno riesca a comprendere la traccia così esposta. grazie.
function dipendenti_premiati=calcola_premi(A)

Per come ho capito la traccia, lo svolgimento è questo:
function dipendenti_premiati=calcola_premi(A)
r=size(A,1);
k=1;
for i=1:r
if A(i,6)>8 && ((A(i,2)+A(i,3)+A(i,4)+A(i,5))/4)>38
dipendenti_premiati(k)=A(i,1);
k=k+1;
end
end
end


#446
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:

sempre nell'appello di febbraio il quarto esercizio era:
function ImpulsiCorrente=calcola_correnti(vet, corr_minimo,corr_massimo)
mi chiedeva poi di visualizzare il vettore vet e il vettore ImpulsiCorrente su uno stesso grafico con relativi marker, colori e tratti ma non ho capito se i plot vadano messi prima o dopo gli end.

Si mettono prima dell' end della funzione, così:
function ImpulsiCorrente=calcola_correnti(vet, corr_minimo,corr_massimo)
k=1;
n=length(vet);
for i=1:n
if vet(i)>corr_minimo && vet(i) ImpulsiCorrente(k)=vet(i);
k=k+1;
end
end
plot(vet,'-*r');
hold on
plot(ImpulsiCorrente,'o-g');
end


#447
ales

ales

    Advanced Member

  • Utente
  • StellaStellaStella
  • 46 Messaggi:
grazie mille!!! il problema del primo esercizio era più semplice di quanto pensassi! io pensavo di dover utilizzare il procedimento somma=0 e media=0 per poi fare somma(i)=somma+A(i,j) e poi media(i)=somma(i)/n invece era molto più semplice! grazie ancora!!!

#448
ales

ales

    Advanced Member

  • Utente
  • StellaStellaStella
  • 46 Messaggi:
solo un'ultima cosa... nell'esercizio della matrice con le matricole dei dipendenti, nel caso mi chiedesse anche solo le matricole pari o dispari potrei mettere due vole && cioè potrei scrivere:
if mod (A(i,j),2)==0 && A(i,6)>8 && ((A(i,2)+A(i,3)+A(i,4)+A(i,5))/4)>38

#449
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:

solo un'ultima cosa... nell'esercizio della matrice con le matricole dei dipendenti, nel caso mi chiedesse anche solo le matricole pari o dispari potrei mettere due vole && cioè potrei scrivere:
if mod (A(i,j),2)==0 && A(i,6)>8 && ((A(i,2)+A(i,3)+A(i,4)+A(i,5))/4)>38

Si certo, va bene!

#450
domenico18

domenico18

    Advanced Member

  • Utente
  • StellaStellaStella
  • 43 Messaggi:

@paky18
Hai sbagliato a scrivere giri_riferimento_max nell' if, devi aggiungere la n!


ciao...scusa se ti disturbo..magari però puoi aiutarmi...praticamente ho provato a fare anch'io questo programma e l'ho fatto in questo modo:

function dati_critici=elabora_dati(n,giri_riferimento_min,giri_riferimento_max)
n=input('inserisci il numero di giri: ');
giri_riferimento_min= input ('inserisci il numero min : ');
giri_riferimento_max= input ('inserisci il numero max: ');
h=1;
for i=1:n
x(i)= input('inserisci il valore della temperatura: ');
if x(i)< giri_riferimento_min || x(i)> giri_riferimento_max
dati_critici(h) = x(i);
h=h+1;
else
end
end
end
solo ke quando lo vado ad eseguire, scrivento: "dati_critici=elabora_dati(n,giri_riferimento_min,giri_riferimento_max)" mi esce:
??? Undefined function or variable 'n'.

se invece lo eseguo scrivendo : "dati_critici=elabora_dati()
mi funziona
dove sbaglio???????? :badmood:

ps: scusami ma nn mi ricordo quale codice si doveva mettere per visualizzare correttamente la funzione :scratch:

#451
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
@domenico18 Errori:

function dati_critici=elabora_dati(n,giri_riferimento_min,giri_riferimento_max)
n=input('inserisci il numero di giri: '); %non bisogna inserire l'input dopo aver avviato la funzione perchè l'input ce l'hai nella firma della funzione
giri_riferimento_min= input ('inserisci il numero min : '); %stesso discorso di n
giri_riferimento_max= input ('inserisci il numero max: '); %stesso discorso di n
h=1;
for i=1:n
x(i)= input('inserisci il valore della temperatura: ');
if x(i)< giri_riferimento_min || x(i)> giri_riferimento_max
dati_critici(h) = x(i);
h=h+1;
else % l'else non serve
end
end
end

solo ke quando lo vado ad eseguire, scrivento: "dati_critici=elabora_dati(n,giri_riferimento_min,giri_riferimento_max)" mi esce:
??? Undefined function or variable 'n'.

se invece lo eseguo scrivendo : "dati_critici=elabora_dati()
mi funziona
dove sbaglio????????

Ecco questo è il classico errore sulla firma di funzione: in MatLab ogni funzione inizia con function [output]=nome_funzione(input) , tutto quello che trovi scritto dopo function prende il nome di firma della funzione.
Nella firma della funzione vengono specificate:
1. la variabile/i (max 2) di output;
2. il nome della funzione;
3. la/le variabile/i di input.
Le variabili di input che trovi nella firma sono quelle variabili che matlab deve necessariamente avere prima che la funzione parta, nel tuo caso queste variabili sono n,giri_riferimento_min,giri_riferimento_max. Ora il fatto che queste variabili la funzione le deve avere necessariamente prima che parta, significa (lo so che sembra banale dirlo) che immediatamente dopo il function queste variabili devono poter essere utilizzate dalla funzione, qualsiasi sia il loro compito. Ma per poter essere utilizzate queste variabili devono esistere, cioè devono essere assegnate ed è proprio quì che sta il tuo errore: l'assegnazione di tali variabili deve essere necessariamente o antecedente al richiamo della funzione, o contestuale.
L'assegnazine è antecedente quando per richiamare la funzione vai nella command e scrivi nell' ordine:
n=10;
giri_riferimento_min=900;
giri_riferimento_max=200;
dati_critici=elabora_dati(n,giri_riferimento_min,giri_riferimento_max)
L'assegnazione è contestuale quando nel richiamare la funzione, inserisci i valori delle variabili nella "zona" input della firma di funzione, ciè vai nella command e digiti:
dati_critici=elabora_dati(10,900,200)
Ti faccio notare che i valori delle variabili saranno inseriti in n,giri_riferimento_min,giri_riferimento_max nello stesso ordine in cui queste variabili sono state scritte nello script, cioè n=10, etc...
L'assegnazione delle variabili di input non può essere successiva al richiamo della funzione , cioè non puoi scrivere nello script come hai scritto tu:
function dati_critici=elabora_dati(n,giri_riferimento_min,giri_riferimento_max)
n=input('inserisci il numero di giri: ');
giri_riferimento_min= input ('inserisci il numero min : ');
giri_riferimento_max= input ('inserisci il numero max: ');
Facendo così Matlab fa partire la funzione , ma far partire la funzione significa che esegue il function, ma nell' eseguire il function MatLab va a verificare se esistono le variabili di input e se la verifica va a buon fine, allora MatLab prosegue con la successiva istruzione, altrimenti appena trova una variabile non assegnata ti dice ??? Undefined function or variable 'n' e non prosegue più.
L' assegnazione delle variabili di input può essere successiva al richiamo della funzione solo nel caso in cui richiamando la funzione scrivi:
dati_critici=elabora_dati()

ma questo è un modo scorretto di operare perchè richiamare la funzione in questo modo significa che in questa funzione le variabili di input non esistono e infatti tu sei stato costretto a farle digitare dall' utente successivamente. In realtà però le tue variabili di input esistono, perchè nello script tu scrivi: dati_critici=elabora_dati(n,giri_riferimento_min,giri_riferimento_max), quindi se richiami la funzione così:
dati_critici=elabora_dati()
e poi fai inserire successivamente all'utente i valori delle variabili di input e come se chiedessi all'utente di specificare a MatLab quello che MatLab (tramite la funzione) dovrebbe sapere a prescindere.
Ora tu potresti dire: si ok è sbagliato fare così, però alla fine funziona lo stesso!
Si è vero che funziona lo stesso, però fai conto che la tua funzione andrà richiamata in un main, nel quale sicuramente saranno già state assegnate le variabili di input prima che la funzione sia richiamata. Chiedendo all' utente di specificare di nuovo l'input, MatLab andrà sovrascrivere i valori che erano stati assegnati nel main e in questo modo non potrai verificare il corretto funzionamento della tua funzione!
Scusa se mi sono dilungato, am questo è un errore abbastanza comune e andava chiarito bene!

#452
domenico18

domenico18

    Advanced Member

  • Utente
  • StellaStellaStella
  • 43 Messaggi:
si...e cmq ti ringrazio per la pazienza ke hai avuto a scrivere..sei stato molto ma molto chiaro...non lo so tu ki sia in realtà....ma ti suggerisco di fare domanda all'università per insegnare informatica....
sei molto bravo e sai spiegare molto bene le cose...i miei complimenti ^_^
;)
grazie dell'aiuto...!!!!

#453
stella

stella

    Advanced Member

  • Utente
  • StellaStellaStella
  • 50 Messaggi:
qualcuno potrebbe risolvere questo esercizio,il mio svolgimento non gira..

  ESERCIZIO 1
% Definisci una funzione C=calcola_matrice(A,B) che, date
% due matrici A e B, crea una matrice C in modo che:
% - Elemento di C=Elemento di A per Elemento di B se l?elemento
% di A è multiplo di 5 ma non di 2;
% - Elemento di C=Elemento di A diviso Elemento di B se l?elemento
% di A multiplo di 2 ma non di 5;
% - Elemento di C=Elemento di A altrimenti.
%
% A B
% 5 10 1 3
% 8 22 4 11
%
% C
% 5*1=5 10
% 8/4=2 22/11=2
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ESERCIZIO 2
% Definisci una funzione salva_matrice(A,nomefile) che salvi sul file
% "C.txt" la matrice C visualizzando 4 cifre decimali.
%


function traccia4()
clear;
clc;

nomefile='C.txt';
A=[5,10;8,22];
B=[1,3;4,11];

C=calcola_matrice(A,B);
salva_matrice(C,nomefile);

end


#454
stella

stella

    Advanced Member

  • Utente
  • StellaStellaStella
  • 50 Messaggi:
Risolto.. Grazie lo stesso..:)

#455
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:

Risolto.. Grazie lo stesso..:)

ok , perfetto!

#456
stella

stella

    Advanced Member

  • Utente
  • StellaStellaStella
  • 50 Messaggi:
Ho un dubbio se il prototipo di un esercizio è : function v=carica_vettore (B, righe, colonne) è errato scrivere [righe, colonne] =size(B)???

#457
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:

Ho un dubbio se il prototipo di un esercizio è : function v=carica_vettore (B, righe, colonne) è errato scrivere [righe, colonne] =size(B)???

Si è errato perché così vai a sovrascrivere i valori delle variabili righe e colonne che ha in input

#458
stella

stella

    Advanced Member

  • Utente
  • StellaStellaStella
  • 50 Messaggi:
Nonostante mi parte la funzione?

#459
stella

stella

    Advanced Member

  • Utente
  • StellaStellaStella
  • 50 Messaggi:
Questo è lo svolgimento:

  ESERCIZIO 1
% Dato il file 'matrice.txt', realizza la funzione
% B=carica_matrice(nomefile,righe,colonne) per acquisire la matrice
% in esso contenuta. Il caricamento avviene prendendo gli elementi
% non negativi presenti nel file così come sono e sostituendo agli elementi
% negativi, il numero 99.
% Il nome del file e le dimensioni della matrice sono passate come parametri alla funzione.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ESERCIZIO 2
% Definisci una funzione v = costruisci_vettore(B, righe, colonne, s1, s2, s3) che data
% la matrice B, conta gli elementi minori di s1, gli elementi minori di s2
% e gli elementi minori di s3 e carica questi tre valori nel vettore v.
% B, righe, colonne, s1, s2, s3 sono passati come parametri alla funzione.
%
% ESEMPIO DI ESECUZIONE:
% Matrice B caricata dal file:
% 15 3 99 21
% 18 99 25 45
% 99 21 27 26
%
% Vettore v costruito:
% 1 5 8

function traccia7()
clear;
clc;

nomefile='matrice.txt';
righe=3;
colonne=4;

B=carica_matrice(nomefile,righe,colonne);
disp('Matrice B caricata dal file:');
disp(B);

s1=10;
s2=25;
s3=40;
v = costruisci_vettore(B, righe, colonne, s1, s2, s3);
disp('Vettore v costruito:');
disp(v);

end



function B=carica_matrice(nomefile,righe,colonne)
%DA COMPLETARE
B=zeros(righe,colonne);
f_id=fopen(nomefile,'rt');

for i=1:righe
for j=1:colonne
temp=fscanf(f_id,'%d',1);
if temp >=0
B(i,j)=temp;
else
B(i,j)=99;
end
end
end
fclose(f_id);
end


function v = costruisci_vettore(B, righe, colonne, s1, s2, s3)
%DA COMPLETARE
[righe,colonne]=size(B);
v(1)=0;
v(2)=0;
v(3)=0;
for i=1:righe
for j=1:colonne
if B(i,j) v(1)=v(1)+1;
end
if B(i,j) v(2)=v(2)+1;
end
if B(i,j) v(3)=v(3)+1;
end
end
end
end


#460
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:

Nonostante mi parte la funzione?

il fatto che la funzione parta non significa che fa correttamente il suo lavoro, e pure se lo facesse quello che vuoi fare rimane cmq concettualmente sbagliato!




Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi