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 nome_file=completa_file(nome_file,n)Prova così, ma nn l' ho provata su MatLab.
fid=fopen(nome_file,'w+');
mat=rand(n,5);
fprintf(nome_file,'%d',n);
fprintf(nome_file,'\n');
for i=1:n
for j=1:5
fprintf(nome_file,'%f',mat(i,j));
end
fprintf(nome_file,'\n');
end
fclose(fid);
end
function nome_file=completa_file(nome_file,n)
fid=fopen(nome_file,'w+');
mat=rand(n,5);
fprintf(fid,'%d',n);
fprintf(fid,'\n');
for i=1:n
for j=1:5
fprintf(fid,'%f',mat(i,j));
end
fprintf(fid,'\n');
end
fclose(fid);
end
dati=completa_file('dati.txt',3)
function [numrighe,numcol,A]=Leggimat(nume)
i=0;
j=0;
numrighe=0;
numcol=0;
fd=fopen('nume','rt');
numrighe=fscanf(fd,'%d',1);
numcol=fscanf(fd,'%d ',1);
A=zeros(numrighe,numcol);
A=fscanf(fd,'%f',[numrighe numcol]);
fclose(fd);
return;
Ecco il mio svolgimento (spero di nn aver frainteso la traccia):scrivere una funzione che prende in input il
nome di un file (creato precedentemente) apre il
file legge in numero di righe e di colonne, gli
elementi della matrice li stampa e li restitusce in
output.
function [n_rig,n_col,A]=Leggimat(nome_file)Prima di richiamarla creati il file dati.txt, con questo contenuto di esempio (si tratta della matrice che mi è uscita con l' esercizio precedente, ci ho messo solo il 5 vicino al 3):
fid=fopen(nome_file,'rt');
n_rig=fscanf(fid,'%d',1);
n_col=fscanf(fid,'%d',1);
for i=1:n_rig
for j=1:n_col
A(i,j)=fscanf(fid,'%f',1);
end
end
fclose(fid);
disp(n_rig);
disp(n_col);
disp(A);
end
3 5Infine richiamala così:
0.7060460.0461710.6948290.0344460.765517
0.0318330.0971320.3170990.4387440.795200
0.2769230.8234580.9502220.3815580.186873
[n_rig,n_col,A]=Leggimat('dati.txt')P.S.Mi raccomando il file Leggimat.m e il file dati.txt devono stare nella stessa cartella!
non so io dove sbagliavo.
function [numrighe,numcol,A]=Leggimat(nume)
i=0; % a che serve inizializzare i se i sarà poi il numero delle righe , ovvero numrighe?
j=0; %vale lo steso discorso di i, ma questa volta riferito alle colonne.
numrighe=0; %a che serve inizializzare numrighe, se numrighe lo devi prendere dal file come hai scritto dopo?
numcol=0; % stesso discorso di numrighe
fd=fopen('nume','rt'); % hai sbagliato la sintassi dell' fopen, il nome del file si scrive senza virgolette.
numrighe=fscanf(fd,'%d',1);
numcol=fscanf(fd,'%d ',1);
A=zeros(numrighe,numcol); %questo passaggio è inutile perchè poi va a sovrascrivere
% qui bisognava innestare i cicli for per creare la matrice leggendo elemento per elemento nel file, e poi hai inizializzato per ben tre volte ciascuno il numero di righe e il numero di colonne e alla fine nn li hai usati per quello che servivano, cioè per far girare i for
A=fscanf(fd,'%f',[numrighe numcol]); %errore di concetto e di sintassi: se scrivi A=fscanf(......) significa che A è una variabile, mentre A deve essere una matrice;
l' errore di sintassi è quel [numrighe numcol] che nn ho capito cosa avrebbero dovuto indicare ,forse volevi che fscanf leggesse l' elemento A(i,j) ovvero l' elemento della matrice A di riga numrighe e colonna numcol uno per volta, ma cosa legge se A la deve creare?
fclose(fd);
function[B]=creamat(n)
f_id=fopen(matrix.txt,'rt');
mat=B(r,c);
for r=1:n
for c=1:n
if n<=10
B(r,c)=fscanf(f_id,'%d',1);
end
return
end
end
fclose(f_id)
end
Onestamente nn capisco la traccia, gli elementi della matrice da creare devono essere presi dalla matrice contenuta nel file matrix.txt oppure la matrice B da creare deve avere tutti elementi casuali purchè siano interi e minori di 10?"Sia dato il file matrix.txt, contenente una matrice. Le dimensioni di essa sono specificate dai primi due elementi de file Bisogna:
Scrivere una funzione che letto un intero n da input, genera una nuova matrice nxn di numeri interi minori di 10.Il prototipo è = creamat(n)"
function [B] = creamat(n)
B = ceil(0 + (10-0).*rand(n,n));
end
function [A,m,n]=carica_dati_da_file(nome_f)
nome_f=input('dammi nome file: ','s');
f_id=fopen(nome_f,'r');
A=zeros(m,n)
for i=1:m
for j=1:n
A(i,j)=fscanf(f_id,'%d',1);
end
end
fclose(f_id)
end
function [A,m,n]=carica_dati_da_file(nome_f)richiamala così:
fid=fopen(nome_f,'rt');
m=fscanf(fid,'%d',1);
n=fscanf(fid,'%d',1);
for i=1:m
for j=1:n
A(i,j)=fscanf(fid,'%d',1);
end
end
fclose(fid);
end
[A,m,n]=carica_dati_da_file('matrice.txt')Errori:
function [A,m,n]=carica_dati_da_file(nome_f)
nome_f=input('dammi nome file: ','s'); % non serve questa operazione, perchè nome_f ce l' hai in input;
f_id=fopen(nome_f,'r');
A=zeros(m,n) %nn è errore ma il passaggio è inutile perchè poi va a sovrascrivere
for i=1:m % chi sono m e n? Hai mancato la loro assegnazione.
for j=1:n
A(i,j)=fscanf(f_id,'%d',1);
end
end
fclose(f_id)
end
n=input('inserisci un numero: ');
vet=[];
if mod (n/2)==0
for i=1:2:(n-1)
vet=i;
end
else
for i=1:2:n
vet=i;
end
end
disp ('Il vettore generato è: ');
disp(vet);
0 utenti, 0 ospiti, 0 utenti anonimi