Suma sąsiednich elementów zbioru/macierzy

0

Witajcie,
proszę was o pomoc, jestem początkującym programistą i niestety utknąłem w jednym miejscu.
Mając zbiór elementów np. (2, 1, 3, 4, 5, 6, 7, 6, 9, 9) chciałbym sumować poszczególny pary liczb i sprawdzać czy wartość sumy jest większa od wartości maksymalnego elementu. Gdy wartość sumy jest większa od MAX elementu muszę zapisać te pary do odpowiedniej tabeli.
Nie wiem czy mój tok rozumowanie był dobry ale zacząłem od posortowania tego zbioru.
Wydaje mi się, że potrzebne są dwa fory, które sprawdzają poszczególne elementy, nie wiem czy nie trzeba wprowadzić tymczasowych zbiorów (macierzy).
Napisałem coś takiego (piszę w MATLABIE):

x=[3, 4, 6, 8, 9, 1, 2];

%Określenie granic przedziału
up=max(x);
down=min(x);

%Sortowanie przedziału
xx=sort(x);

%Sprawdenie warunku
k=1;
for i=1
   for j=i+1
       suma=xx(i)+xx(j);
       if suma>up
       m_par(k,1)=xx(i);
       m_par(k,2)=xx(j);
       k=k+1;
       end
   end
end

wstawienie kodu do posta z linku - fp

0

Pętle i inne takie rzeczy to w Matlabie zło. ;-) Trzeba zawsze pomyśleć jakby tu wykorzystać macierze i wbudowane funkcje.

O ile dobrze Cię zrozumiałem (sąsiednie pary):

set = [3, 4, 6, 8, 9, 1, 2];

% Sasiednie pary
pairs = [set(1 : end - 1); set(2 : end)];

% Wybieramy te pary, ktorych suma jest wieksza od najwiekszego elementu `set`
pairs(:, sum(pairs) > max(set))

Jeżeli mają być wszystkie pary:

set = [3, 4, 6, 8, 9, 1, 2];

% Wszyskie pary
pairs = nchoosek(set, 2)';

% Wybieramy te pary, ktorych suma jest wieksza od najwiekszego elementu `set`
pairs(:, sum(pairs, 2) > max(set))

Poczytaj o nchoosek: http://www.mathworks.com/help/matlab/ref/nchoosek.html reszta to standardowe rzeczy.

Pytaj jak nie wiesz jak coś działa. Matlab jest fajny. Na studiach doszliśmy do etapu, w którym sprawozdania w zasadzie same się generowały. ;-)

dodanie znaczników <code class="matlab"> - fp

1 użytkowników online, w tym zalogowanych: 0, gości: 1