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
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
Per come ho capito la traccia, lo svolgimento è questo: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)
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
Si mettono prima dell' end della funzione, così: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.
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
Si certo, va bene!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
@paky18
Hai sbagliato a scrivere giri_riferimento_max nell' if, devi aggiungere la n!
function dati_critici=elabora_dati(n,giri_riferimento_min,giri_riferimento_max)solo ke quando lo vado ad eseguire, scrivento: "dati_critici=elabora_dati(n,giri_riferimento_min,giri_riferimento_max)" mi esce:
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
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
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.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????????
n=10;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:
giri_riferimento_min=900;
giri_riferimento_max=200;
dati_critici=elabora_dati(n,giri_riferimento_min,giri_riferimento_max)
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...
function dati_critici=elabora_dati(n,giri_riferimento_min,giri_riferimento_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ù.
n=input('inserisci il numero di giri: ');
giri_riferimento_min= input ('inserisci il numero min : ');
giri_riferimento_max= input ('inserisci il numero max: ');
dati_critici=elabora_dati()
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.
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
ok , perfetto!Risolto.. Grazie lo stesso..
Si è errato perché così vai a sovrascrivere i valori delle variabili righe e colonne che ha in inputHo un dubbio se il prototipo di un esercizio è : function v=carica_vettore (B, righe, colonne) è errato scrivere [righe, colonne] =size(???
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
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!Nonostante mi parte la funzione?
0 utenti, 0 ospiti, 0 utenti anonimi