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

#41
paolino791

paolino791

    Advanced Member

  • Utente
  • StellaStellaStella
  • 97 Messaggi:

Il quinto era tt sbagliato, l' ho rifatto.
Infine per richiamare le funzioni nel main, che in questo caso è il file traccia1.m non devi scrivere solo il nome della funzione, ma anche tutto ciò che sta dopo il function della funzione da richiamare. In generale per richiamare la funzione si scrive [output]=nome_funzione(input)


Vuaa come sei pignolo XD il 5 alla fine dava il risultato giusto..xD ho aggiunto l'if dopo non so per quale motivo o.O cmq grazie per queste correzioni solo una non l ho capita..il fatto della matrice A..dove la devo avviare?? Xk non so se hai visto le traccie di gennaio che la matrice la metteva sotto la spiegazione dell'esercizio nel main..xò pensavo si dovesse portare sempre nello script...
Un ultima cosa sto facendo anche le altre tracce solo che non mi ricordo na cosa e non riesco a trovarla..come si fa a visualizzare due sole cifre decimali di un numero??..ho trovato da na parte che si usa format bank xò non so come usarlo :nono:

Poi cmq con il solo nome del file nel main mi pare che cmq partono il 4 e il 5..

#42
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
per il fatto dell' esercizio numero 5, non l' ho lanciato, l' ho rifatto direttamente......
Invece, per il problema dei decimali da stampare ti riporto qullo che ho trovato nelle slide del prof.Genna, si tratta della sintassi dell' fprintf, con il disp, non so come si fa.

fprintf(file_id,’%+6.2f’,a);
 %6.2f sta ad indicare la formattazione del dato che sarà scritto nel file di dati. In questo caso diciamo che a è un float e vogliamo che si stampi il segno e si usino in tutto 6 cifre di cui 2 dopo la virgola

Infine la matrice A non va caricata al' interno del codice della funzione, semplicemente perchè A lo deve avere in input la funzione, dunque a limite la devi scrivere prima di function, perchè la funzione deve andare ad operare direttamente su quella matrice, non crearla per poi operarci su. In realtà non è propriamente un errore, perchè alla fine la funzione fa quello che deve fare (però solamente per quella matrice A che tu hai caricato), si tratta di una questione teorica nei confronti della definizione stessa di algoritmo (un insieme finito di istruzioni che risolve una classe di problemi relativi a dati in input della stessa specie).
Lo so può sembrare un appunto di pignoleria estrema, ma se ci pensi è così perchè una cosa è l' algoritmo e una cosa sono i dati, l' algoritmo deve funzionare comunque.
Dimenticavo: le funzioni le puoi si richiamare come dici tu, ma poi l' output che ti restituisce non si capisce, perchè salva tutto in ans, che è la variabile di output standard, è una questine di precisione (questa è pignoleria, hai ragione... :D )

#43
paolino791

paolino791

    Advanced Member

  • Utente
  • StellaStellaStella
  • 97 Messaggi:

per il fatto dell' esercizio numero 5, non l' ho lanciato, l' ho rifatto direttamente......
Invece, per il problema dei decimali da stampare ti riporto qullo che ho trovato nelle slide del prof.Genna, si tratta della sintassi dell' fprintf, con il disp, non so come si fa.

fprintf(file_id,’%+6.2f’,a);
 %6.2f sta ad indicare la formattazione del dato che sarà scritto nel file di dati. In questo caso diciamo che a è un float e vogliamo che si stampi il segno e si usino in tutto 6 cifre di cui 2 dopo la virgola

Infine la matrice A non va caricata al' interno del codice della funzione, semplicemente perchè A lo deve avere in input la funzione, dunque a limite la devi scrivere prima di function, perchè la funzione deve andare ad operare direttamente su quella matrice, non crearla per poi operarci su. In realtà non è propriamente un errore, perchè alla fine la funzione fa quello che deve fare (però solamente per quella matrice A che tu hai caricato), si tratta di una questione teorica nei confronti della definizione stessa di algoritmo (un insieme finito di istruzioni che risolve una classe di problemi relativi a dati in input della stessa specie).
Lo so può sembrare un appunto di pignoleria estrema, ma se ci pensi è così perchè una cosa è l' algoritmo e una cosa sono i dati, l' algoritmo deve funzionare comunque.
Dimenticavo: le funzioni le puoi si richiamare come dici tu, ma poi l' output che ti restituisce non si capisce, perchè salva tutto in ans, che è la variabile di output standard, è una questine di precisione (questa è pignoleria, hai ragione... :D )


Benissimo meglio sapere anche queste cose :D Gracias..In giornata poi vedrò di fare le altre prove di Gennaio ;)

#44
paolino791

paolino791

    Advanced Member

  • Utente
  • StellaStellaStella
  • 97 Messaggi:
Ho finito traccia 2 e traccia 3 ma gli ultimi due es della traccia 4 proprio non li capisco :( sto da due ore su questi es e non capisco dove sbaglio..Se puoi vederli quando hai tempo ti ringrazio..

% Definisci una funzione vet=crea_vettore(a,b, w) che, dati in ingresso
% i vettori a e b e un valore w, crei un nuovo vettore vet come di seguito
% specificato:
% - vet = la somma di a e b se a e b sono entrambi maggiori del valore w;
% - vet = la differenza di a e b se uno solo tra a e b è minore del valore w;
% - vet = 0 altrimenti [7 punti]

%
% Esempio:
%
% a: 1 9 3 -> vet: 1-5=4 9+6=15 0
% b: 5 6 -4
% w=4 vet
%


function vet=crea_vettore(a,b,w)

a=[1,6,3,9,4,3,1,6,23,67,-3,7,-2];
b=[1,5,1,10,-4,5,9,0,23,-4,-3,7,0];
w=2;
n=length(a);
m=length(b);
k=1;
for i=1:n
for j=1:m
if a(i)>w && b(j)>w
vet(k)=a(i)+b(j);
k=k+1;
elseif a(i) vet(k)=a(i)-b(j);
k=k+1;
else vet(k)=0;
k=k+1;
end
end
end
end





%   ESERCIZIO 5
% Definisci una funzione somma = calcola_somma_righe(A) che, senza
% utilizzare le funzioni built-in in Matlab, calcoli la somma degli
% elementi di ciascuna riga della matrice e la inserisca nel vettore
% 'somma'. [10 punti].
%
% Esempio:
%
% A: -> somma
% 1 3 3 3 10
% 4 2 6 0 12
% 1 7 -1 2 9
% 4 2 3 2 11


function somma=calcola_somma_righe(A)
A=[1,2,3;4,5,6;7,8,9;21,19,18];
[n,m]=size(A);
k=1;
for i=1:n
for j=1:m
???


#45
ROKY88

ROKY88

    Advanced Member

  • Utente
  • StellaStellaStella
  • 40 Messaggi:
Si svolge in questo modo:

ESERCIZIO 5
% Definisci una funzione somma = calcola_somma_righe(A) che, senza
% utilizzare le funzioni built-in in Matlab, calcoli la somma degli
% elementi di ciascuna riga della matrice e la inserisca nel vettore
% 'somma'. [10 punti].

A=[1,2,3;4,5,6;7,8,9;21,19,18];
disp('La matrice A è: ')
disp(A)
[n,m]=size(A);
for i=1:n
somma(i)=0;
for j=1:m
somma(i)=A(i,j)+somma(i);
end
end
disp('Il vettore somma è: ');
disp(somma)
Ora faccio l'altro...

#46
paolino791

paolino791

    Advanced Member

  • Utente
  • StellaStellaStella
  • 97 Messaggi:
Queste sono le tracce 2 e 3 svolte di Gennaio '12...Nella 2 c'è un piccolo errore all'esercizio 5 che non sono riuscito a risolvere ma cmq parte..x il resto dovrebbe essere fatto tutto bene..

#47
ROKY88

ROKY88

    Advanced Member

  • Utente
  • StellaStellaStella
  • 40 Messaggi:
E questo è l'altro:

% Definisci una funzione vet=crea_vettore(a,b,w) che, dati in ingresso
% i vettori a e b e un valore w, crei un nuovo vettore vet come di seguito
% specificato:
% - vet = la somma di a e b se a e b sono entrambi maggiori del valore w;
% - vet = la differenza di a e b se uno solo tra a e b è minore del valore w;
% - vet = 0 altrimenti [7 punti]


function vet=crea_vettore(a,b,w)

a=[1,6,3,9,4,3,1,6,23,67,-3,7,-2];
b=[1,5,1,10,-4,5,9,0,23,-4,-3,7,0];
w=2;
dim=length(a);
for i=1:dim
if a(i)>w & b(i)>w
vet(i)=a(i)+b(i);
elseif a(i) vet(i)=a(i)-b(i);
else
vet(i)=0;
end
end
disp(vet)
end


#48
paolino791

paolino791

    Advanced Member

  • Utente
  • StellaStellaStella
  • 97 Messaggi:
E questa è la traccia 4 :)

#49
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
@ paolino791:Nella traccia 4 ho corretto l' esercizio 3 .
Mi sono permesso di aggiungere le soluzioni che hai postato in questo topic di riordino.

P.S. Il file traccia4.m corretto lo trovi nel topic segnalato sopra.

#50
paolino791

paolino791

    Advanced Member

  • Utente
  • StellaStellaStella
  • 97 Messaggi:

@ paolino791:Nella traccia 4 ho corretto l' esercizio 3 .
Mi sono aggiungere le soluzioni che hai postato in questo topic di riordino.

Mica hai visto anche l'esercizio 5 della traccia 2?...Pure in quello c'era qlksina di sbagliato..

#51
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
Questi sono gli errori del tuo svolgimento:

function visualizza_alcuni_elementi(A)
[n,m]=size(A);
k=1;
for i=1:n
for j=1:m
if mod(A(i,j),2)~=0
v1(k)=A(i,j);
k=k+1;
end % nn devi far terminare un if e poi innestarne un' altro subito dopo, esiste elseif
if mod(A(i,j),4)==0
v2(k)=A(i,j); %nn puoi utilizzare lo stesso indice sia per v1 che per v2
k=k+1;
end
end
end
disp('I numeri dispari sono: ');
disp(v1);
disp('Il vettore generato è: ');
disp(v2);
end


Qui trovi l' esercizio corretto!

#52
celafaro

celafaro

    Member

  • Utente
  • StellaStella
  • 13 Messaggi:
ragazzi mi aiutate con la 3 funzione???io ho fatto così
%Sia dato il file matrix.txt, contenente una matrice. Le dimensioni di essa sono specificate dai primi due elementi de file Bisogna:

(1) Scrivere una funzione che legge i dati dal file matrix.txt elemento per elemento e li carica in una matrice. Deve visualizzare un errore se la matrice non è quadrata.Il prototipo è [mat,esito]= leggimat(nome_file) con esito=1 -> c'è un errore durante l'apertura del file con esito=2 -> ERRORE, la matrice non è quadrata.

(2) Scrivere una funzione che letto un intero n da input, genera una nuova matrice nxn di numeri interi minori di 10.Il prototipo è [B] = creamat(n)

(3) Scrivere una funzione che svolge il prodotto righe per colonne tra la matrice caricata e quella casuale (senza usare le built-in).visualizza un errore se le due matrici non sono compatibili per questa operazione. Il prototipo è [P, errore]=prodottomat(A,B) con errore=0 ->le dimensioni sono compatibili con errore=1 -> le dimensioni NON sono compatibili.
[P, errore]=prodottomat(A,B)
prod=0
[A,B]=size(A)
[n,m]=size(B)
P=zeros(a,m)
for i=1:a
for j=1:m
if size(A)=size(B)
prod=prod+A(i,j)*B(j,i)
else
errore=1
end
end
end

cosa sbaglio?

#53
salvo

salvo

    Advanced Member

  • Utente
  • StellaStellaStella
  • 485 Messaggi:
ciao ragazzi, averi un problema con l'esercizio della seconda traccia dell'esame di gennaio 2012; il primo esercizio mi dice di creare un vettore di numeri interi pari,compresi tra 6 e 30,
ed io l'ho svolto in questo modo:

function v=genera_vet()
k=0;
for i=6:2:30
if mod(i,2)==0
v(k+1)=i;
k=k+1;
end
end
per quando riguarda il secondo esercizio mi dice di trovare il massimo ed il minimo del vettore creato, ed io l'ho svolto in questo modo:

function posizione=cerca(v,massimo,minimo,N)
x=input('immetti un numero compreso tra il massimo e il minimo: ');
if x>minimo && x<=massimo
t=x;
else
x=input('immetti un numero compreso tra massimo e minimo: ');
end
posizione=0;
for j=1:N
if v(j)==x
end
end
end
end
solo che il primo esercizio mi gira, ma quando vado ad inserire il secondo nello stesso file del primo ovviamente, continua a girare solo il primo, il secondo e come se non ci fosse, potete aiutarmi grazie mille.

#54
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
Allora, le tracce le trovi tt svolte quì
l' esercizio uno specifica chiaramente che dovevi usare le funzioni built-in di MatLab, dunque nn dovevi creare tu la funzione, come invece hai fatto.
Ecco lo svolgimento corretto:
v=randi([3,15],[1,13]);
v=v*2;
disp('Il vettore generato è: ')
disp(v)

function v=genera_vet() %la funzione che hai creato è sicuramente corretta, però :
1) la traccia richiede funzioni built-in
2)la traccia nn ti dice di creare un vettore che abbia per elementi tt i numeri pari da 6 a 30, ma ti dice di creare semplicemente un vettore che abbia dei numeri compresi nell' intervallo [6;30], purchè siano pari, quindi in teoria il vettore può essere costituito pure da tt 8
;
k=0;
for i=6:2:30
if mod(i,2)==0 % a che serve verificare se i è pari se il for scorre i numeri due per volta partendo da 6, quindi scorre sostanzialmente solo i numeri pari?
v(k+1)=i;
k=k+1;
end
end

Per quanto riguarda il secondo esercizio hai commesso lo stesso errore perchè la traccia ti chiede di utilizzare funzioni buil-in, quindi nn devi creare la funzione.
Lo svolgimento corretto è il seguente:
a=max(v);
b=min(v);
disp('il valore massimo del vettore v è: ');
fprintf('%3.2f\n',a);
disp('il valore minimo del vettore v è: ');
fprintf('%3.2f\n',b);
Riguardo gli errori della tua funzione, bee.....è completamente sbagliata, nn ci ho capito nulla di cosa hai combinato.

#55
salvo

salvo

    Advanced Member

  • Utente
  • StellaStellaStella
  • 485 Messaggi:
ha ecco! ora ho capito, solo che siccome io non ho seguito il nuovo corso, inizialmente volevo fare la vecchia tipologia, ma ho notato che forse la nuova risulta più semplice, solo che in questo caso devo utilizzare le funzioni built-in di matlab, credo che entrambe le funzioni a mio parere siano corrette, solo che non essendoci il codice iniziale per poi implementarle non potevano partire, anzi non partiva la seconda, perché la prima mi partiva, comq. grazie dei consigli.

#56
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:

le funzioni a mio parere siano corrette

Ti sbagli la seconda nn è corretta ed è per questo che nn partiva, il main non centra assolutamente nulla.

#57
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
@ celafaro

%Sia dato il file matrix.txt, contenente una matrice. Le dimensioni di essa
%sono specificate dai primi due elementi de file Bisogna:
% (1) Scrivere una funzione che legge i dati dal file matrix.txt elemento
% per elemento e li carica in una matrice. Deve visualizzare un errore
% se la matrice non è quadrata.Il prototipo è [mat,esito]= leggimat(nome_file)
% con
% esito=1 -> c'è un errore durante l'apertura del file con
% esito=2 -> ERRORE, la matrice non è quadrata.

Svolgimento:
function [mat,esito]= leggimat(nome_file)
fid=fopen(nome_file,'rt');
if fid==-1
esito=1;
mat=[];
return
end
esito=0;
r=fscanf(fid,'%d',1);
c=fscanf(fid,'%d',1);
if r~=c
esito=2;
disp('ERRORE, la matrice non è quadrata.');
mat=[];
else
for i=1:r
for j=1:c
mat(i,j)=fscanf(fid,'%f',1);
end
end
end
fclose(fid);
end

% (2) Scrivere una funzione che letto un intero n da input,
% genera una nuova matrice nxn di numeri interi minori di 10.
% Il prototipo è [B] = creamat(n)

Svolgimento:
function [B] = creamat(n)
B=randi([0,10],[n,n]);
end

(3) Scrivere una funzione che svolge il prodotto righe per colonne tra la matrice caricata e quella casuale (senza usare le built-in).visualizza un errore se le due matrici non sono compatibili per questa operazione. Il prototipo è [P, errore]=prodottomat(A,B) con errore=0 ->le dimensioni sono compatibili con errore=1 -> le dimensioni NON sono compatibili.

non ho capito se deve restituire il prodotto dei prodotti ottenuti moltiplicando riga per colonna o deve restituire la matrice prodotto

#58
paolino791

paolino791

    Advanced Member

  • Utente
  • StellaStellaStella
  • 97 Messaggi:
Non capisco quest'esercizio cosa vuole...:) Secondo voi è giusto così??


% Generare un vettore vet di 30 elementi interi casuali compresi tra 1 e 100.
% Completa la seguente funzione in modo che verifichi se il valore
% 'numero' sia presente all'interno del vettore vet.
% La funzione deve restituire 1 se il valore è presente, 0 altrimenti.
% Si visualizzi infine il valore calcolato (0/1).
function presente=verifica_presenza(vet, numero)

vet=randi([1,100],30,1);
disp('Il vettore è: ');
disp(vet);
numero=input('Inserisci un numero tra 1 e 100: ');
n=length(vet);
if vet(n)==numero
disp('1');
else
disp('0');
end

end


#59
salvo

salvo

    Advanced Member

  • Utente
  • StellaStellaStella
  • 485 Messaggi:
ma qualcuno sa dove posso reperire qualche esercizio svolto che usi le funzioni built-in in modo da esercitarmi su quello, aiutatemi per favore, se qualcuno ha esercizi o conosce qualche sito in qui ci sono esercizi che usano queste tipo di funzioni me lo segnali grazie infinite!!!!!

#60
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
@ paolino791
Questa è la funzione :
function presente=verifica_presenza(vet, numero)
l= length(vet);
presente=0;
for i=1:l
if vet(i)==numero
presente=1;
end
end
disp(presente);
end
Questo invece è il contenuto del main, non puoi generare vet e chiedere il numero all' interno della funzione , se la funzione li vuole come input.
% Generare un vettore vet di 30 elementi interi casuali compresi tra 1 e 100.
clear
clc
vet=randi([1,100],30,1);
disp('Il vettore è: ');
disp(vet);
numero=input('Inserisci un numero tra 1 e 100: ');

% Funzione da implementare
presente=verifica_presenza(vet, numero);

@ salvo quì c'è quello che cerchi!




Leggono questa discussione 1 utenti

0 utenti, 1 ospiti, 0 utenti anonimi