sto provando una soluzione alternativa per la seconda function con un if invece che col mod però una volta messo l'input poi continua a richiederlo non capisco perchè
% TRACCIA 2 % sia dato il file dati.txt contenente gli elementi di una matrice di numeri % interi postivi. le dimensioni della matrice (numero di righe e numero di % colonne) sono specificati dai primi due elementi del file (vedi la % struttura del file per maggiori dettagli). Il candidato deve: % % (1) scrivere una funzione che legge i dati dal file dati.txt e li carica % in una matrice opportunamente inizializzata. I dati devono essere letti % elemento per elemento. % il prototipo della funzione è il seguente: % function [mat, esito] = leggi_dati(nome_file) % Il significato dei valori assunti dalla variabile esito sono: % 0 (zero) - se la matrice è stata carica con successo % 1 - se non è possibile aprire il file % % (2) Scrivere una funzione che ritorna 1 se il valore del parametro % passato in input è un numero pari, 0 (zero) altrimenti. % % (3) Scrivere una funzione che partendo dalla matrice mat genera due % vettori vet1 e vet2. il vettore vet1 contiene tutti gli elementi della % matrice la cui somma degli indici è un numero pari, mentre vet2 contiene % gli elementi della matrice la cui somma degli indici è un numero dispari. % il prototipo della funzione è il seguente: % function [vet1,vet2]=genera_vet(mat). % % IL CANDIDATO NON PUO' CAMBIARE I PROTOTIPI DELLE FUNZIONI function traccia2 [matrice,ris]=leggi_dati('dati.txt'); if ris==1 disp('errore nell''apertura del file'); return end disp('la matrice letta è:'); disp(matrice); [v1,v2]=genera_vet(matrice); fprintf('il vettore v1 ha %d elementi \n', numel(v1)); disp('il contenuto di v1 è:'); disp(v1); fprintf('il vettore v2 ha %d elementi \n', numel(v2)); disp('il contenuto di v2 è:'); disp(v2); end function [mat, esito] = leggi_dati(nome_file) % funzione da implementare esito=0; mat=0; fid=fopen(nome_file,'r'); if fid==-1 esito=1; return %il ; è opzionale(lo posso mettere oppure no) end righe=fscanf(fid,'%d',1); col=fscanf(fid,'%d',1); mat=zeros(righe,col); for i=1:1:righe for j=1:1:col mat(i,j)=fscanf(fid,'%d',1); end end fclose(fid); end %function pari=check_pari(num) %[variabile di uscita]=nomefunzione[variabile di ingresso] % funzione da implementare % pari=~mod(num,2); %col tilde significa che se num/2(non è divisibile mod restituirebbe % 1 ma poichè io voglio che intal caso restituisca 1 metto il not %che mi dà una negazione (mod=0 divisibile mod=1 non divisibile)~mod=1 se divisibile %~mod=0 se non divisibile restituisce il contrario di quello %che è(sostanzialmente pari= al contrario di quello che restituisce mod normalmente %end function pari=check_pari(num)%non capisco perchè continui a richiedere il parametro in input?????????? x=num; x=input('inserisci un parametro in input:'); if mod(num,2)==0 pari=1; else pari=0; end disp( pari) end function [vet1,vet2]=genera_vet(mat) % funzione da implementare righe=size(mat,1); col=size(mat,2); k=1; %indice per il vettore vet1 l=1; %indice per il vettore vet2 for j=1:1:col for i=1:1:righe %if mod(i+j,2)==0 %io lo faccio funzionare col mod non capisco a che scopo richiamare la funzione di prima if check_pari(i+j); %OPPURE DEVO RICHIAMARE LA FUNCTIO 2 %CHECK_PARI???????? vet1(k)=mat(i,j); k=k+1; else vet2(l)=mat(i,j); l=l+1; end end end end