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
nome_f=input(dammi il nome del file: ','s');
f_id=fopen(dati.txt,'r');
dim_mat=size(m,n);
m=input('dammi il numero di righe: ');
n=input('dammi il numero di colonne: ');
mat(m,n)=fscanf(f_id,'%d',1);
if m*n>=n_el
for i=1:n_el
v(i)=fscanf(f_id,'%d',1);
else
disp(m=0; n=0; v=0;)
return
end
end
fclose(f_id);
end
function [v,m,n]=carica_dati_da_file(nome_f)
m=input('dammi il numero di righe: ');
n=input('dammi il numero di colonne: ');
fid=fopen(nome_f,'rt');
num_el=fscanf(fid,'%d',1);
if (m*n)<=num_el
v=fscanf(fid,'%d',inf);
else
v=0;
m=0;
n=0;
end
fclose(fid);
end
[v,m,n]=carica_dati_da_file('dati.txt')Ecco gli errori:
nome_f=input(dammi il nome del file: ','s'); %nn so se la sintassi è corretta, ma non serve specificare nome_f con questa stringa, quando poi nome_f lo specifichi quando richiami la funzione dalla command window
f_id=fopen(dati.txt,'r'); % questo errore è conseguenza di quello precedente
dim_mat=size(m,n); % qua hai fatto due errori in un colpo solo: 1) hai sbagliato la sintassi, avresti dovuto scrivere [m,n]=size(dim_mat), dove dim_mat ti faccio notare dovrebbe essere la matrice che noi dobbiamo costruire, non si tratta di una variabile, perchè la funzione size restituisce un vettore le cui componenti rappresentano righe e colonne della matrice di cui calcola le dimensioni; 2) questa stringa è concettualmente sbagliata perchè stai cercando di calcolare le dimensioni di una matrice che nn esiste e di dimensioni che deve scegliere l' utente, infatti dopo hai messo gli input per m e n, che sono proprio righe e colonne della matrice da costruire:
m=input('dammi il numero di righe: ');
n=input('dammi il numero di colonne: ');
mat(m,n)=fscanf(f_id,'%d',1); % quello che ti chiede di costruire la funzione 1 della traccia è il vettore v, che c' entra mat(m,n), che tra le altre cose è solo una variabile, senza contare che sia la m che la n non assumono mai un valore perchè non hai innestato i for
if m*n>=n_el % hai sbagliato la condizione dell' if infatti se m*n fosse maggiore di n_el (che ti faccio notare che nn lo hai assegnato da nessuna parte,quindi come fa a capire chi è n_el) la matrice (che nn è richiesta nella funzione1) nn la puoi proprio costruire, perchè nn ci sono elementi a sufficienza, almeno che la funzione 2 della traccia dia indicazioni precise a proposito.
for i=1:n_el % il for si poteva evitare, bastava mettere inf al posto di 1 nell' fscanf
v(i)=fscanf(f_id,'%d',1);
else
disp(m=0; n=0; v=0;) %a parte la sintassi scorretta, ma la traccia n ti dice di mostrare valore di m,n, e v uguali a zero , ma di assegnare che è diverso
return % nn ci azzecca assolutamente niente;
end
end
fclose(f_id);
end
function A=crea_matrice(v,m,n)
k=0;
for j=1:n
for i=1:m
A(i,j)=v(k+1);
k=k+1;
end
end
end
f_id=fopen(nomefile,'rt')
A=zeros(n,m)
for r=1:n
for c=1:m
A(i,j)=fscanf(f_id,'%d',inf);
end
end
fclose(f_id)
end
function A=crea_matrice(nomefile)Richamala così dalla command window (ricorda che il file matrici.txt e la funzione devono stare nella stessa cartella):
f_id=fopen(nomefile,'rt');
for r=1:3
for c=1:3
A(r,c)=fscanf(f_id,'%d',1);
end
end
fclose(f_id);
end
A=crea_matrice('matrici.txt')Note:
function[mat,esito]=carica_mat(dim,nome_file)
esito=0
f_id=fopen(nome_file,'rt');
if f_id==-1
esito=1
return
end
dim=fscanf(f_id,'%d',1);
mat=zeros(dim)
for i=1:dim
for j=1:dim
A(i,j)=fscanf(f_id,'%',1);
if (dim^2)<=50
else
esito=2
end
end
end
fclose(f_id)
end
eccola trovata e quella di febbraio 2008
scusa ma questa non è la modalità vecchia di esame?io so che l'hanno cambiatoSia dato il file dati.txt contenente dei numeri interi. Il numero degli interi presenti non è noto apriori, il primo elemento indica quanti sono gli elementi presenti, ovvero quelli da esaminare.Il programma deve chiedere all'utente di specificare un numero di righe e un numero di colonne, quindi creare una matrice con gli elementi letti dal file caricandoli nella matrice colonna per colonna.Se le dimensioni della matrice sono tali da non poter essere riempita con i dati a disposizione, visualizzare un messaggio all'utente. Viceversa, la matrice viene creata e visualizzata all'utente.
FUNZIONE 1: prende nome_f in input tramite il quale viene passata una stringa con il nome del file da aprire in lettura "dati.txt". La funzione chiede all'utente di specificare le dimensioni m e n della matrice. Il primo elemento del file contiene il numero di interi in esso presenti. Se questo è sufficiente a creare la matrice di dimensioni m*n, la funzione legge tutti gli elementi e li carica nel vettore v. Altrimenti assegna 0 a v, m e n. Il prototipo della funzione è il seguente:
function [v,m,n]=carica_dati_da_file(nome_f)...Io ho cercato di svolgerla in questo modo:nome_f=input(dammi il nome del file: ','s');
f_id=fopen(dati.txt,'r');
dim_mat=size(m,n);
m=input('dammi il numero di righe: ');
n=input('dammi il numero di colonne: ');
mat(m,n)=fscanf(f_id,'%d',1);
if m*n>=n_el
for i=1:n_el
v(i)=fscanf(f_id,'%d',1);
else
disp(m=0; n=0; v=0;)
return
end
end
fclose(f_id);
end
Sicuramente ho scritto delle diavolerie...saresti così gentile a farmi capire quali?grazie
0 utenti, 0 ospiti, 0 utenti anonimi