Jump to content

Modifica Stile
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
-->
Photo

aiutoooo esercizio


  • Please log in to reply
486 replies to this topic

#1
quasar

quasar

    Advanced Member

  • Utente
  • PipPipPip
  • 50 posts
qualcuno puo' aiutarmi con questo esercizio???

scrivere una funzione che prende in input il
nome di un file e un parametro n, genera una
matrice n x 5 e scrive su un file (il cui nome è
stato fornito in input) sulla prima riga il
parametro n e 5 e sulle altre righe la matrice



#2
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2,474 posts
ma la matrice da generare deve essere casuale o i numeri bisogna prenderli dal file in input (ammesso che ci sia, visto che la traccia ci dice che in input abbiamo il nome del file, nn il file)?

#3
quasar

quasar

    Advanced Member

  • Utente
  • PipPipPip
  • 50 posts
casuali

#4
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2,474 posts
function nome_file=completa_file(nome_file,n)
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
Prova così, ma nn l' ho provata su MatLab.

#5
quasar

quasar

    Advanced Member

  • Utente
  • PipPipPip
  • 50 posts
non gira

#6
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2,474 posts
si, si...ho sbagliato la sintassi dell' fprintf.
Prova così:
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

richiamala così:
dati=completa_file('dati.txt',3)
:ciao:

#7
quasar

quasar

    Advanced Member

  • Utente
  • PipPipPip
  • 50 posts
questo è quello che mi dice:

??? Input argument "nome_file" is undefined.

Error in ==> completa_file2 at 2
fid=fopen(nome_file,'w+');

>> dati=completa_file('dati.txt',3)
dati.txtdati.txtdati.txtdati.txtdati.txtdati.txtdati.txtdati.txtdati.txtdati.txtdati.txtdati.txtdati.txtdati.txtdati.txtdati.txtdati.txtdati.txtdati.txtdati.txt
dati =

dati.txt

??? Input argument "nome_file" is undefined.

Error in ==> completa_file2 at 2
fid=fopen(nome_file,'w+');

#8
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2,474 posts
sicura che richiami bene la funzione, perchè a me funziona correttamente.
Il fatto che ti dice "??? Input argument "nome_file" is undefined" significa il file nn esiste e infatti con la stringa fid=fopen(nome_file,'w+'); io gli sto dicendo: apri il file "nome_file" in scrittura, ma se nn lo trovi crealo, per questo c'è "w+".
Quindi il problema è che a te nn riesce a creare il file e quindi non sa dove scrivere.
Controlla se sta tt a posto nella current folder e controlla che nella cartella dove hai salvato la funzione nn ci sia già un file denominato dati.txt.

#9
quasar

quasar

    Advanced Member

  • Utente
  • PipPipPip
  • 50 posts
no so perchè non va....
ora posto un altro esercizio che pure non riesco a risolvere non riesco a capire l'errore

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.


io l'ho fatto così ma non va

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;


#10
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2,474 posts

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.

Ecco il mio svolgimento (spero di nn aver frainteso la traccia):
function [n_rig,n_col,A]=Leggimat(nome_file)
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
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):
3 5
0.7060460.0461710.6948290.0344460.765517
0.0318330.0971320.3170990.4387440.795200
0.2769230.8234580.9502220.3815580.186873
Infine richiamala così:
[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!

#11
quasar

quasar

    Advanced Member

  • Utente
  • PipPipPip
  • 50 posts
grz...gira
non so io dove sbagliavo.
cmq grz

#12
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2,474 posts

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);


Scusa se ho messo tt nel quote, ma altrimenti nn si capiva nulla!

#13
celafaro

celafaro

    Member

  • Utente
  • PipPip
  • 13 posts
Salve ragazzi mi aiutate per favore con questo esercizio?
"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 è [B] = creamat(n)"

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

Ho sbagliato qualcosa ragazzi?mi aiutate a capire? :(

#14
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2,474 posts

"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)"

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?
Il problema è che nel primo caso, può capitare che la matrice contenuta nel file matrix.txt non abbia elementi a sufficienza per riempire la nuova matrice [b]B
, e in questo caso nn viene specificato cosa fare; nel secondo caso si ha che di fatti la matrice contenuta nel file matrix.txt nn serve più a niente ai fini dell' esercizio!
Chiarisci meglio la traccia.

#15
celafaro

celafaro

    Member

  • Utente
  • PipPip
  • 13 posts
La nuova matrice deve avere tutti elementi casuali,anch'io non avevo letto bene la traccia! a questo punto lo svolgimento che ho postato suppongo sia errato...qual è quello esatto?grazie mille

#16
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2,474 posts
Bo...per me bisogna chiarire la traccia perchè se è come dici tu l' esercizio si risolve con una stringa di codice, cioè:
function [B] = creamat(n)
B = ceil(0 + (10-0).*rand(n,n));
end


#17
celafaro

celafaro

    Member

  • Utente
  • PipPip
  • 13 posts
Ragazzi cosa ho sbagliato?
FUNZIONE 1: prende nome_f in input tramite il quale viene passata una stringa con il nome del file da aprire in lettura "matrice.txt" e restituisce in output una matrice A in cui caricare gli interi letti dal file e le sue dimensioni m e n. I primi due elementi nel file sono proprio il numero di righe m e il numero di colonne n.Il prototipo della funzione è:

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


#18
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2,474 posts
scusa potresti postare la data di questa traccia, così evito di rifarla?

#19
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2,474 posts
Vabbè, l' ho fatta...
function [A,m,n]=carica_dati_da_file(nome_f)
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
richiamala così:
[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



#20
paolino791

paolino791

    Advanced Member

  • Utente
  • PipPipPip
  • 97 posts
Approfitto del post per chiedere aiuto ad un esercizio abb banale ma che essendo agli inizi non riesco a svolgere..L'esercizio chiede: scrivere un file script,che letto da tastiera un numero n,definisce un vettore contenente i numeri dispari compresi tra 1 ed n. Io lo svolgo così:
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);

Cos'è che sbaglio??? Grazie :)




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users