Postavka problema

Neka su date 3 ulazne datoteke, ulaz1.txt, ulaz2.txt i ulaz3.txt gde svaka sadrži isti broj vrednosti u decimalnom zapisu koje su rezultati nekog eksperimenta. Vrednosti ima onoliko koliko je bilo vremenskih trenutaka u kojima je vrednost posmatrana. Odrediti aritmetičku srednju vrednost za svaki vremenski trenutak na osnovu vrednosti u sve 3 datoteke. Zatim odrediti koja datoteka sadrži najviše vrednosti koji su najudaljenije od srednje vrednosti (vrednost se najviše razlikuje).


Primer : Neka ima 1000 vrednosti u svakoj datoteci. Ako se desilo da u prvoj ima 340, u drugoj 450 i trećoj 210 vrednosti koje su najviše udaljene od srednje vrednosti u trenutku posmatranja, onda ispisujemo ime datoteke ulaz2.txt.

Rešenje

Pomoćna skripta za generisanje proizvoljnih vektora

pomocna.m
% generise tri proizvoljne kolone
% i upisuje ih u tri datoteke
% ulaz1.txt, ulaz2.txt i ulaz3.txt
 
n=round(1000-9999*rand(1,1));
 
vektor1=round(1000-999*rand(1,n))';
vektor2=round(1000-999*rand(1,n))';
vektor3=round(1000-999*rand(1,n))';
 
save ulaz1.txt vektor1
save ulaz2.txt vektor2
save ulaz3.txt vektor3

Deo koda

round(1000-999*rand(1,1))

zaokrugljuje proizvoljan razlomljen broj iz intervala (1,1000) na najbliži ceo broj. Tako dobijamo dimenziju vektora. Na isti način generišemo proizvoljni vektor1).

Glavna skripta

glavna.m
% Ucitava vrednosti tri vektora,
% Nalazi aritmeticku sredinu (takodje vektor),
% i vektor koji najvise odstupa od nje
 
load ulaz1.txt vektor1
load ulaz2.txt vektor2
load ulaz3.txt vektor3
 
aritmeticka=(vektor1+vektor2+vektor3)/3;
domen=1:1:numel(vektor1);
 
od1=abs(vektor1-aritmeticka);
od2=abs(vektor2-aritmeticka);
od3=abs(vektor3-aritmeticka);
n1=0;
n2=0;
n3=0;
for i=domen
 z=[od1(i) od2(i) od3(i)];
 m=max(z);
 if od1(i)==m
  n1=n1+1;
 endif
 if od2(i)==m
  n2=n2+1;
 endif
 if od3(i)==m
  n3=n3+1;
 endif
end
 
m=max([n1 n2 n3]);
 
if n1==m
 'ulaz1.txt'
endif
if n2==m
 'ulaz2.txt'
endif
if n3==m
 'ulaz3.txt'
endif

Niz aritmeticka* čuva aritmetičku sredinu vrednosti vektora. U okviru petlje, za svaku vrstu pronađemo maksimum i smestimo ga u promenljivu m. Odstupanje svakog vektora smestićemo u odgovarajući vektor. Naredba max( [ a b c … x] ) nalazi maksimum vektora čiji su elementi a, b, cx. Promenljive n1, n2 i n3 sadrže informacije o tome u koliko vrsta su vektori vektor1, vektor2, odnosno vektor3 imali najveće odstupanje od aritmetičke sredine. Na kraju pronađemo maksimalni broj odstupanja i uporedimo ga sa svakom od vrednosti n1, n2 i n3 zato što se može desiti da bar dve od njih budu jednake maksimalnoj vrednosti. Svaka vrednost jednaka maksimumu dovodi do štampanja naziva datoteke na koju se odnosi.

1) Matrica dimenzija m x n, koja sadrži proizvoljne vrednosti iz intervala (0,1), može se napraviti pomoću funkcije rand(m,n). Vektor je matrica čija je jedna dimenzija 1.
 
zadatak_3.txt · Last modified: 2012/02/06 15:43 by milos.simic
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki