Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
Универзитет у Београду Основе програмирања у MatLab-у
Грађевински факултет
© Наташа Прашчевић, мај 2020. 1
Вежбе: потпрoграми – први део
1) а) Написати потпрограм којим се рачуна факторијел броја N.
б) Написати главни програм у коме се за дате бројеве N и I штампа )!(!
!
INI
NC
−
=
Потпрограм
function f=faktor(n) f=1; for i=2:n f=f*i; end return
Главни програм
n=input('Unesi broj n '); i=input('Unesi broj i '); c=faktor(n)/faktor(i)/faktor(n-i); disp (c);
или
Универзитет у Београду Основе програмирања у MatLab-у
Грађевински факултет
© Наташа Прашчевић, мај 2020. 2
2) а) Написати потпрограм за множење два броја К и М.
б) Написати главни програм у коме се коришћењем написаног потпрограма штампа таблица множења
у Декадном систему.
Потпрограм
function a=proizvod(k,m) a=k*m; return
Главни програм
fprintf(1,' 1 2 3 4 5 6 7 8 9 10 \n'); for i=1:10 fprintf(1,'%2d',i); for j=1:10 a=proizvod(i,j); fprintf(1,'%4d',a); end fprintf(1,'\n'); end
Универзитет у Београду Основе програмирања у MatLab-у
Грађевински факултет
© Наташа Прашчевић, мај 2020. 3
3) а) Написати потпрограм којим се за учитане величине X и Y рачуна вредност X*Y.
б) Написати главни програм којим се учитава реална променљива А и природан број N. Коришћењем
написаног потпрограма срачунати AN.
Главни програм
a=input('Unesi broj a '); n=input('Unesi stepen n '); b=1; for i=1:n b=proizvod(a,b); end fprintf(1,'Broj %3d na stepen %2d iznosi %5d',a,n,b);
4) а) Написати потпрограм којим се рачуна сума елемената низа X дужине М.
б) Написати главни програм у коме се за дати низ X дужине N штампа вредност 1
)(
1
2
−
−
=
=
N
XX
N
i
i
σ
где је N
X
X
N
i
i=
=1
Потпрограм
function s=suma(n,x); s=0; for i=1:n s=s+x(i); end return
Главни програм
fid=fopen('podaci.txt'); n=fscanf(fid,'%d',1); x=fscanf(fid,'%f',n); fclose(fid); xsr=suma(n,x)/n; for i=1:n y(i)=(xsr-x(i))^2; end sd=sqrt(suma(n,y)/(n-1)); fprintf(1,'SD=%10.4f',sd);
Датотека podaci.txt
10 2 3 5.5 -1 4 6.5 10 8 0 -10
Универзитет у Београду Основе програмирања у MatLab-у
Грађевински факултет
© Наташа Прашчевић, мај 2020. 4
5) а) Написати потпрограм којим се испитује да ли је број М прост број. Ако јесте потпрограм треба да
врати вредност 1 у супротном 0.
б) Написати главни програм у коме се коришћењем написаног потпрограма штампају сви прости
бројеви од 1 до 1000.
Потпрограм
function ok=prost(m) ok=0; for i=2:m/2 if rem(m,i)==0 return end end ok=1; return
Главни програм
fprintf(1,'Prosti brojevi od 1 do 1000 \n'); for i=1:1000 if prost(i)==1 fprintf(1,'%3d \n',i); end end
6) а) Написати функцијски потпрограм којим се испитује да ли је број М прост број. Ако јесте потпрограм
треба да врати вредност 1 у супротном 0.
б) Написати главни програм којим се штампа сума свих двоцифрених простих бројева.
Универзитет у Београду Основе програмирања у MatLab-у
Грађевински факултет
© Наташа Прашчевић, мај 2020. 5
7) а) Написати потпрограм којим се одређује растојање између две тачке задате Декартовим
координатама.
б) Написати главни програм којим се врши учитавање N тачака задатих Декартовим координатама.
Тачке одређују N-тоугао у равни XoY. Одредити дужину најдуже странице N-тоугла као и између
којих тачака се она налази.
Потпрограм
function d=rast(xa,ya,xb,yb) d=sqrt((xa-xb)^2+(ya-yb)^2); return
Датотека podaci_zad7.txt
4 0 0 3 2 2.5 5.5 -2.5 5
Главни програм
fid=fopen('podaci_zad7.txt'); n=fscanf(fid,'%d',1); for i=1:n x(i)=fscanf(fid,'%f',1); y(i)=fscanf(fid,'%f',1); end fclose(fid); dmax=rast(x(1),y(1),x(n),y(n)); t1=1; t2=n; for i=1:n-1 d=rast(x(i),y(i),x(i+1),y(i+1)); if d>dmax dmax=d; t1=i; t2=i+1; end end fprintf(1,'Najduza stranica je izmedju tacaka %3d i %3d i iznosi %10.3f',t1,t2,dmax);
Универзитет у Београду Основе програмирања у MatLab-у
Грађевински факултет
© Наташа Прашчевић, мај 2020. 6
8) а) Написати потпрограм којим се одређује сума елемената низа X дужине N.
б) Учитати матрицу А димензија MxN. Коришћењем написаног потпрограма формирати низ V чији су
чланови једнаки суми одговарајућих врста матрице А.
Датотека podaci_zad8.txt
3 4 1 1 1 1 2 2 2 2 3 3 3 3
Главни програм
fid=fopen('podaci_zad8.txt'); m=fscanf(fid,'%d',1); n=fscanf(fid,'%d',1); a=fscanf(fid,'%f',[n,m])'; fclose(fid); for i=1:m v(i)=suma(n,a(i,:)); end fprintf(1,'Sume po vrstama matrice A \n'); fprintf(1,'%7.3f',v);
Универзитет у Београду Основе програмирања у MatLab-у
Грађевински факултет
© Наташа Прашчевић, мај 2020. 7
9) а) Написати потпрограм којим се за број М налази сума цифара.
б) Дат је низ A дужине N. Коришћењем написаног потпрограма формирати низ К чији је елемент
једнак збиру цифара одговарајућег елемента низа A.
Потпрограм
function s=sumacif(m) k=abs(m); s=0; while 1==1 c=rem(k,10); s=s+c; k=fix(k/10); if k==0 return end end
Главни програм
fid=fopen('podaci_zad8.txt'); m=fscanf(fid,'%d',1); n=fscanf(fid,'%d',1); a=fscanf(fid,'%f',[n,m])'; fclose(fid); for i=1:m v(i)=suma(n,a(i,:)); end fprintf(1,'Sume po vrstama matrice A \n'); fprintf(1,'%7.3f',v);
Датотека podaci_zad8.txt
3 4 1 1 1 1 2 2 2 2 3 3 3 3
10) а) Написати потпрограм којим се испитује да ли је број једнак збиру кубова својих цифара
(Армстронгов број). Ако јесте потпрограм треба да врати вредност 1 у супротном 0.
б) Написати главни програм којим се за учитани низ X дужине N штампају сви Армстронгови бројеви.
11) а) Написати потпрограм којим се испитује да ли су бројеви X и Y пријатељски. (Број X једнак је збиру
цифара броја Y).
б) Написати главни програм којим се за дате низове К и L дужине N штампају сви парови пријатељских
бројева.
Универзитет у Београду Основе програмирања у MatLab-у
Грађевински факултет
© Наташа Прашчевић, мај 2020. 8
12) а) Написати потпрограм којим се за дати број I формира низ од нетривијалних делитеља броја I.
б) Написати главни програм у коме се учитава низ X дужине N. Коришћењем написаног потпрограма
одштампати све нетривијалне делитеље сваког елемента низа X.
Потпрограм
function [m,d]=nd(k) m=0; d=[]; for i=2:abs(k)/2 if rem(k,i)==0 m=m+1; d(m)=i; end end return
Датотека podaci_zad12.txt
5 333 -555 463 -1257 12
Главни програм
fid=fopen('podaci_zad12.txt'); n=fscanf(fid,'%d',1); x=fscanf(fid,'%d',n); fclose(fid); fprintf(1,'Broj Netrivijalni delioci \n') for i=1:n [m,y]=nd(x(i)); fprintf(1,'%5d',x(i)); fprintf(1,'%5d',y); fprintf(1,'\n'); end
Универзитет у Београду Основе програмирања у MatLab-у
Грађевински факултет
© Наташа Прашчевић, мај 2020. 9
13) а) Написати потпрограм којим се низ X дужине N сортира у неопадајући редослед.
б) Написати главни програм у коме се учитава матрица А реда М. Сортирати главну и споредну
дијагоналу матрице А.
Потпрограм
function x=opadajuci(n,x) for i=1:n-1 for j=i+1:n if x(i)<x(j) pom=x(i); x(i)=x(j); x(j)=pom; end end end return
Датотека podaci_zad13.txt
4 1 3 2 5 7 -1 12 0 -3 9 12 96 0 34 57 9
Главни програм
fid=fopen('podaci_zad13.txt'); m=fscanf(fid,'%d',1); a=fscanf(fid,'%f',[m,m])'; fclose(fid); fprintf(1,'Matrica A \n'); for i=1:m fprintf(1,'%7.2f',a(i,:)); fprintf(1,'\n') x(i)=a(i,i); y(i)=a(i,m-i+1); end x=opadajuci(m,x); y=opadajuci(m,y); fprintf(1,'Transformisana matrica A \n') for i=1:m a(i,i)=x(i); a(i,m-i+1)=y(i); fprintf(1,'%7.2f',a(i,:)); fprintf(1,'\n') end
Универзитет у Београду Основе програмирања у MatLab-у
Грађевински факултет
© Наташа Прашчевић, мај 2020. 10
14) а) Написати општи потпрограм којим се низ X дужине N сортира у нерастући редослед.
б) Написати главни програм којим се учитава матрица А димензија MxN. Сортирати врсте матрице А
у нерастући редослед..