sashachca

задание 3 (пункт 2)

Jun 16th, 2018
477
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 1.63 KB | None | 0 0
  1. function task3_2(X)
  2.  
  3.     % ПУНКТ 2
  4.    
  5.   % необходимо перемножить элементы массива между первым встретившимся
  6.   % положительным элементом и первым встретившимся отрицательным элементом (включительно)
  7.  
  8.   X = [0, -2.9, -0.01, -4.915, -15.05, -5, 0.35, -0.364, 67, 0.6, -0.22, -0.192, 1, 0, -0.04, 0.092, -37.6];
  9.   printf(' Входной массив X:\n\n');
  10.   disp(X)
  11.   len = length(X);
  12.   [n1, n2] = findIndecies(X, len);
  13.  
  14.   y = 1;
  15.   if n1 ~= 0 && n2 ~= 0 && n2 > n1 + 1
  16.     for n = n1:n2-1
  17.       y *= X(n);
  18.     endfor
  19.   endif
  20.  
  21.   printf('\n Произведение элементов от 1-го отриц. до 1-го полож.: %i\n\n', y);
  22. endfunction
  23.  
  24.  
  25. function [n1, n2] = findIndecies(X, len) % подпрограмма для процедуры отыскания n1 и n2
  26.   n1 = n2 = 0;
  27.  
  28.   for i = 1:len
  29.     if n1 == 0
  30.    
  31.       if X(i) > 0
  32.         break % т.к. индекс положительного элемента должен быть больше индекса отрицательного (по условию n2 > n1 + 1), сначала нужно найти отрицательный:
  33.       endif
  34.       if X(i) < 0
  35.         n1 = i; % нашли первый отрицательный
  36.         continue
  37.       endif
  38.      
  39.     else % теперь ищем положительный:
  40.    
  41.       if X(i) > 0
  42.         n2 = i; % нашли первый положительный
  43.         break
  44.       endif
  45.      
  46.     endif
  47.   endfor
  48.      
  49. endfunction
Advertisement
Add Comment
Please, Sign In to add comment