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

help esercizio


  • Effettua l'accesso per rispondere
Questa discussione ha avuto 2 risposta/e

#1
angelo

angelo

    Member

  • Utente
  • StellaStella
  • 25 Messaggi:

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
 




#2
peppepeppo

peppepeppo

    Moderatore di sezione

  • Moderatore
  • 2474 Messaggi:

 

 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

Io più che altro non capisco perchè vuoi chiedere in input il numero se poi dalla traccia risulta che il numero da testare sta già in firma.

Cmq a me il tuo algoritmo, preso singolarmente, funziona bene.

 

%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

Nella traccia non è richiesto il richiamo all'altra funzione, quindi va bene fare col mod.

 

P..S. La prossima volta, per piacere, quando devi scrivere del codice e devi commentarlo a fianco, magari non utilizzare lo script per il codice sennò non si capisce nulla, usa piuttosto  il quote e magari cambi colore (o metti grasetto/corsivo) il commento accanto al codice. Scritto così diventa difficile da capire.


  • A angelo piace questo post

#3
ciccio bianco

ciccio bianco

    Newbie

  • Utente
  • Stella
  • 8 Messaggi:

Salve ragazzi, vi volevo chiedere dov' era possibile prendere le ultime tracce, oppure se qualcuno gentilmente me le allega.

Grazie...






Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi