• 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

Object Storage Arubacloud
0 głosów
789 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 589 wizyt
0 głosów
0 odpowiedzi 147 wizyt
0 głosów
1 odpowiedź 854 wizyt
pytanie zadane 14 listopada 2017 w C i C++ przez artur96 Początkujący (250 p.)

92,565 zapytań

141,418 odpowiedzi

319,602 komentarzy

61,951 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...