This shows you the differences between two versions of the page.
— |
zadatak_3 [2012/02/06 15:43] (current) milos.simic created |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ===== 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 ==== | ||
+ | |||
+ | <file m 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 | ||
+ | </file> | ||
+ | |||
+ | Deo koda <code m>round(1000-999*rand(1,1))</code> | ||
+ | zaokrugljuje proizvoljan razlomljen broj iz intervala (1,1000) na najbliži ceo broj. Tako dobijamo dimenziju vektora. Na isti način generišemo proizvoljni vektor((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**.)). | ||
+ | |||
+ | ==== Glavna skripta ==== | ||
+ | |||
+ | <file m 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 | ||
+ | </file> | ||
+ | |||
+ | 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**, **c** ... **x**. 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**, **n**2 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. | ||