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

Chiarimento ciclo while

% ESAME DI FONDAMENTI DI INFO

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

#1
angelo

angelo

    Member

  • Utente
  • StellaStella
  • 25 Messaggi:
Ho messo dei commenti vicino alle righe per chiarire quello che penso di star facend
 
 
 
 
 
% ESAME DI FONDAMENTI DI INFORMATICA DEL 15/01/2010
%
% Sia dato il file dati.txt contenente 50 interi. Il candidato implementi
% le seguenti funzioni.
%
% 1) Leggere gli elementi del file inserendo in una matrice 6x5 i soli
% numeri non negativi (i numeri negativi devono essere ignorati). 
% Il prototipo della funzione è il seguente:
% function m=carica_mat(nome_f).
%
% 2) Analizzare la matrice creata con la funzione precedente e calcolare
% la media degli elementi compresi tra i valori x e y forniti in input
% dall'utente (letti interattivamente da tastiera). Il prototipo della
% funzione è il seguente: function [media, x, y]=media_mat(m).
%
% Un esempio di esecuzione del programma è il seguente:
%
%   71    83    44    49    28
%   50     4    42    70    39
%   62    45    68    96    28
%   32    77     0    65    66
%   35     0     5    96    80
%   71     5    17     1    59
%
% dammi il valore di x: 20
% dammi il valore di y: 40
% la media degli elementi compresi tra 20 e 40 è 32.400000 
%
% IL CANDIDATO NON PUò CAMBIARE IL CODICE FORNITO.
%
 
function traccia1_sol()
    clc;
    mat=zeros(6,5);
    mat=carica_mat('dati.txt');
    disp('la matrice letta è');
    disp(mat);
    [media_el,x,y]=media_mat(mat);
    fprintf('la media degli elementi compresi tra %d e %d è %f \n\n', x,y,media_el);
end
 
function m=carica_mat(nome_f)
    m=zeros(6,5); %qui sto intestando a tutti zeri la matrice m
    f_id=fopen(nome_f,'r'); %apro il canale di comunicazione col file
    for i=1:6 %instauro il ciclo for più esterno
        for j=1:5 instauro %il ciclo for per incrementare l' indice j
            el=fscanf(f_id,'%d',1); %asssocio di volta in volta(dopo)ogni incremento alla veriabile el il volre letto
            while el<0
                el=fscanf(f_id,'%d',1);
            end
                m(i,j)=el;
        end
    end
    fclose(f_id);
end




#2
angelo

angelo

    Member

  • Utente
  • StellaStella
  • 25 Messaggi:

Quello che vi volevo chiedere è col cilco for più interno io leggo  il primo numero del file giusto ?.Non capisco quel while che viene dopo non dovrebbe essere while el>0

A me interessano solo i numeri positivi

Poi come funziona eseguo prima il while e una volta chiuso passo a valutare il for j=1:5??

Spero di essermi spiegato



#3
angelo

angelo

    Member

  • Utente
  • StellaStella
  • 25 Messaggi:

el=fscanf(f_id,'%d',1); %legge il primo elemento del file

while<0 % è come se dicessi vedi se il primo elemento è minore di 0

 

A questo punto che succede se l' elemento è minore di 0 va avanti e fa  il secondo 

 

el=fscanf(f_id,'%d',1);  %cioè va a leggere il numero successivo???

 

poi cicla sta leggendo il successivo lo valuta e se <0 legge il terzo ; mentre se el~<0 esce dal while e assegna

 

m(i,j)=el ????






Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi