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? :)