• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyznaczyć najmniejszą wartość spośród elementów leżących pod drugą przekątną macierzy

0 głosów
981 wizyt
pytanie zadane 13 grudnia 2017 w C i C++ przez corrot Nowicjusz (200 p.)

Mam problem z wyznaczeniem najmniejszej wartości spośród elementów leżących pod drugą przekątną macierzy (kwadratowej).

Warunek, który spełniają te elementy to:

( w+k > x-1 )

w-wiersz, k-kolumna, x-wymiar macierzy

Problem pojawia się, kiedy muszę znaleźć najmniejszą wartość, mianowicie nie wiem, jak ma wyglądać warunek. 

    for( w=1 ; w<x+1 ; w++)
        {
        for( k=1 ; k<x+1 ; k++)
            {
                if( w+k > x+1 )
                {
                    if( tab[w][k-1] < tab[w][k])
                        najmniejsza = tab[w][k-1];
                }
            }
        }

w oraz k dałem wartość 1, aby program nie sprawdził elementu o indeksie większym niż rozmiar macierzy. Właśnie tutaj mam ogromny problem żeby zrozumieć jak to napisać, aby elementy były sprawdzane jeden po drugim i kończyły się na ostatnim elemencie.

Bardzo proszę o wyjaśnienie :)

2 odpowiedzi

+1 głos
odpowiedź 14 grudnia 2017 przez Piotr Batko Stary wyjadacz (13,190 p.)
wybrane 15 grudnia 2017 przez corrot
 
Najlepsza

w oraz k dałem wartość 1, aby program nie sprawdził elementu o indeksie większym niż rozmiar macierzy.

Coś mi tu nie gra... Zobacz: załóżmy, że mamy macierz 3x3.

  k = 0 k = 1 k = 2
w = 0      
w = 1      
w = 2      

Teraz napisałeś pierwszą pętlę w taki sposób:

for( w=1 ; w<x+1 ; w++)

Czyli jeżeli w naszym przypadku x = 3, to w przyjmie wartości: 1, 2, 3. Dalej piszesz:

if( tab[w][k-1] < tab[w][k])
    najmniejsza = tab[w][k-1];

Na pewno wiesz, że jeżeli mamy tablicę o wymiarze 3, to jej elementy mają indeksy 0, 1, 2. Jeżeli napiszemy tablica[3] to sięgamy do elementu, który jest poza tablicą. A zauważ, że u Ciebie w przyjmuje wartości 1, 2, 3.

A zatem, jeżeli chcesz przejść po wszystkich wierszach, powinieneś napisać pętlę tak, żeby w przyjmowało wartości 0, 1, 2. Czyli tak:

for (int w = 0; w < x; ++w)

Zakładam, że w tym miejscu poprawiłeś już sobie te pętle tak, że nie wychodzisz poza tablice. Tutaj napiszę pseudokodem przykładowe rozwiązanie tego problemu:

najmniejszy = dowolny element, który na pewno leży pod tą przekątną
dla (każdego wiersza)
{
    dla (każdej kolumny)
    {
        jeżeli (wskazany element jest pod tą przekątną)
          oraz (wskazany element jest mniejszy, niż najmniejszy element jaki do tej pory widziałem)
        {
            najmniejszy = wskazywany element
        }
    }
}

U Ciebie brakuje linijki 1. oraz 7.. Linijkę 9. pseudokodu masz już u siebie, ale musisz ją troszeczkę przerobić. Podpowiem, że wskazywany element czyli ten, którego współrzędne aktualnie (w tym obiegu pętli) trzymamy, to macierz[k][w].


Myślę, że już sobie poradzisz. Jeśli nie, to śmiało pisz tutaj co nadal sprawia problem. Może coś niejasno napisałem? :)

komentarz 15 grudnia 2017 przez corrot Nowicjusz (200 p.)
Dzięki bardzo, teraz wszystko się wyjaśniło!
+1 głos
odpowiedź 13 grudnia 2017 przez k222 Nałogowiec (30,150 p.)
for(int w = 1; w < N; w++)
for(int k = N - w; k < N; k++)
   {
    ...
   }

co powiesz na takie pętle? - nie wiem czy dobrze zrozumiałem ale jeżeli tu leżał problem to one dadzą Ci sprawdzane elementy po kolei (N to rozmiar macierzy o indeksach od 0 do N-1 - to możesz łatwo zmienić jak chcesz ,mieć od 1 do N)

Podobne pytania

0 głosów
2 odpowiedzi 1,041 wizyt
0 głosów
0 odpowiedzi 215 wizyt
0 głosów
1 odpowiedź 1,153 wizyt
pytanie zadane 14 listopada 2017 w C i C++ przez artur96 Początkujący (250 p.)

93,759 zapytań

142,716 odpowiedzi

323,364 komentarzy

63,357 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...