Scilab - program segregujący liczby(parzyste, nieparzyste). Problem z zapisem w nowych tablicach.

0

Witam,

Program poprawnie segreguje liczby, ale zapisuje w macierzy z zerami. Dokładnie chodzi o to, że zapisuje liczby w nowej macierzy w miejscu odpowiadającym macierzy(Wejście), a brakujące miejsca zastępuję zerami. Jeszcze zastanawiam się czy mogę zapisać warunek parzystości w inny sposób, jakieś pomysły? Jeśli ktoś mocno ogarnia Matlaba/Scilaba może mi podrzuci jakiś ciekawy skrypt/podręcznik :)

function [parzyste, nieparzyste]=segregacja(A)
 // Funkcja wykrywa parzysty lub nieparzysty składnik macierzy i przydziela go do odpowiedniej macierzy.
 // Wejście :        A - tablica nieposegregowana
 // Wyjście : parzyste - tablica z liczbami parzystymi
 //        nieparzyste - tablica z liczbami nieparzystymi
[n m]=size(A)
for i=1:n
    for j=1:m
        if (modulo(A(i,j),2)==0)
            parzyste(i,j)=A(i,j)
        else
            nieparzyste(i,j)=A(i,j)
        end
     end
end
endfunction 
0

Możesz jeszcze na przykład:
1.Sprawdzić czy zapalony jest ostatni bit liczby.
2.Sprawdzić czy podczas faktoryzacji liczby pojawia się 2 (choć to zapewne będzie ileś rzędów wolniejsze w porównaniu do modulo czy też testowania bitów).

0

Nie wspominałem, że jestem początkujący, ale dodatkowe możliwości sformułowania warunku sprawdzę. Jednak głównym moim problemem są zera w macierzy.
Nie chcę ich usuwać z macierzy, ale raczej zapisać w taki spósób, aby nie było zer.

Ad.1
Jak to zrobić w Scilabie?

1

Opisujesz jak program segreguje, a nie napisałeś jak chcesz segregować.
Konkretnie A = [1 2;4 3], jak maja wyglądać tablice parzyste i nieparzyste?
Parzystość możesz sprawdzać tak (-1)^n = 1

0

Masz rację, nie napisałem bo dopiero teraz zorientowałem się, że w niektórych przypadkach nawet po usunięciu zer macierz nie będzie mogła zostać utworzona.
Dlatego, że w niektórych wierszach może być więcej zer.
Najlepiej będzie to zapisać w wektorze zarówno parzyste jaki nieparzyste. A(1,x)

1
 parzyste = []
nieparzyste = []
for i=1:n
    for j=1:m
        if (modulo(A(i,j),2)==0)
            parzyste = [parzyste A(i,j)]
        else
            nieparzyste = [nieparzyste A(i,j)]
        end
     end
end

W tablicy nieparzyste nie będzie zer, ale w tablicy parzyste mogą być - jeżeli były w tablicy A. Możesz dodać warunek by zera były pomijane przy segregowaniu.

1

można użyć "zwektoryzowanego" kodu, który jest krótszy i zazwyczaj szybszy

parzyste = A(mod(A,2) == 0);
nieparzyste = A(mod(A,2) == 1);

update po komentarzu (pojedyncze badanie parzystości)

x = mod(A, 2) == 0
parzyste = A(x);
nieparzyste = A(~x);

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