Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z szukaniem największej liczby w tablicy

Ostatnio zmodyfikowano 2017-12-07 14:53
Autor Wiadomość
Wolfff
Temat założony przez niniejszego użytkownika
Problem z szukaniem największej liczby w tablicy
» 2017-12-07 14:32:05
Dzień dobry, szukam pomocy z kodem. Przeszukałem całość 30 razy i nie mogę znaleźć żadnego błędu. Program zawsze wyświetla jako wynik liczbę 3. Rozumiem że można to inaczej napisać, ale mi chodzi o to żeby zrozumieć co stwarza ten problem w kodzie.

C/C++
#include<stdio.h>

int Znajdznajw( int tab[] )
{
    int wieksza;
   
    for( int i = 0; i < 9; i++ )
    {
        if( tab[ i ] > tab[ i + 1 ] )
        {
            wieksza = tab[ i ];
        }
        else
        {
            wieksza = tab[ i + 1 ];
        }
    }
   
    return wieksza;
}

int main()
{
    int tab[ 10 ];
    int wieksza;
   
   
    for( int i = 0; i < 10; i++ )
    {
        printf( "Podaj %d element tablicy: ", i + 1 );
        scanf( "%d", & tab[ i ] );
       
    }
   
    wieksza = Znajdznajw( tab );
   
    printf( "Najwieksza liczba to: %d ", wieksza );
   
    return 0;
   
}

[ / i ]
P-167695
pekfos
» 2017-12-07 14:45:51
Twoja funkcja zwraca większą liczbę z dwóch ostatnich w tablicy, a nie maksimum z całej tablicy.
P-167698
meghtar
» 2017-12-07 14:48:43
Główny problem masz tutaj
C/C++
if( tab > tab[ i + 1 ] )
{
    wieksza = tab[ i ]; // <- tutaj w kodzie jest tab[ i ] a nie tab
}
else
{
    wieksza = tab[ i + 1 ];
}
Sprawdzasz czy początek tablicy(jako adres) jest większy od i+1-szego elementu w tablicy, co już powinno zaświecić lampkę nad głową.
A jeszcze ten else.
Pewnie zauważyłeś, że zawsze będzie zwracało po prostu przedostatnią wartość, którą podasz - wina else'a. // EDIT racja pefkos - większą z 2 ostatnich.
Szukając największej wartości w tablicy nie potrzebujesz wykonać innej instrukcji. Sam algorytm wygląda mniej więcej tak:
Biorę element -> sprawdzam czy jest większy od aktualnej największej znalezionej -> jeśli tak to zmień wartość zmiennej wieksza.
Ale już poza tymi rzeczami, weź pod uwagę że szukając największego elementu w tablicy powinieneś sprawdzać czy ten element jest większy - czyli w ifie bardziej coś w stylu if(wieksza > tab). Pamiętaj też o nadaniu wartości początkowej zmiennej wieksza - np jako pierwszy element tablicy.
P-167700
Wolfff
Temat założony przez niniejszego użytkownika
» 2017-12-07 14:49:27
Ahaa, czyli else wstawia mi w wieksza przed ostatnią liczbę w tablicy? Jeżeli nadam większej wartość 0 i będę porównywał wtedy jak piszesz pierwszą do większej i potem zamieniał to powinno wyjść lepiej? Dzięki wielkie!
P-167701
pekfos
» 2017-12-07 14:50:44
Nie rozumiem, przecież w pętli porównuje pierwsze dwie i zamienia miejscami jak jest większa
I gdzie twoim zdaniem zamieniasz ze sobą 2 elementy tablicy?
P-167702
Wolfff
Temat założony przez niniejszego użytkownika
» 2017-12-07 14:53:51
@Pekfos masz kompletnie racje tylko nie zrozumiałem za pierwszym razem, teraz widzę że w pętli nie porównuje następnej liczby to poprzedniej większej tylko następną z następną i rzeczywiście, sprowadza się z największej z ostatnich dwóch.
P-167703
« 1 »
  Strona 1 z 1