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

#1
quasar

quasar

    Advanced Member

  • Utente
  • StellaStellaStella
  • 50 Messaggi:
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
  • 2474 Messaggi:
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
  • StellaStellaStella
  • 50 Messaggi:
casuali

#4
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
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
  • StellaStellaStella
  • 50 Messaggi:
non gira

#6
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
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
  • StellaStellaStella
  • 50 Messaggi:
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
  • 2474 Messaggi:
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
  • StellaStellaStella
  • 50 Messaggi:
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
  • 2474 Messaggi:

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
  • StellaStellaStella
  • 50 Messaggi:
grz...gira
non so io dove sbagliavo.
cmq grz

#12
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:

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
  • StellaStella
  • 13 Messaggi:
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
  • 2474 Messaggi:

"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
  • StellaStella
  • 13 Messaggi:
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
  • 2474 Messaggi:
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
  • StellaStella
  • 13 Messaggi:
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
  • 2474 Messaggi:
scusa potresti postare la data di questa traccia, così evito di rifarla?

#19
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:
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
  • StellaStellaStella
  • 97 Messaggi:
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 :)




Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi