problem z funkcja i zmiennymi

0

Witam,

mam drobny problem. Otóż program nie chce działać poprawnie po podaniu zmiennych x,m,y oraz przypisaniu do tablicy B[]. Program ma szukać największą wartość z tablicy B[], ale nie większa od y i wypisac jej index. Jeżeli nie ma takiej wartosci to wypisuje wartosc m. Z góry dzięki za pomoc.

 
#include <iostream>
using namespace std;

int szukaj(int B[], int m, int y)
{
    int max, x, index;
    max=B[0];
    for(int i=1; i<x; i++)
    {
            if((max < B[i]) && (B[i]<=y )){
                  max=B[i];
                  index = i;
                  }
    }
    if(max>y)
             index = m;

    return index;
}

int main()
{
    int m, y, x, wartosc, index, max; 
    int B[x];  
    
    cout << "Podaj wielkosc tablicy: ";
    cin >> x;
    cout << "Podaj m: ";
    cin >> m;
    cout << "Podaj u: ";
    cin >> y;
    
    for(int i=0; i<x; i++)
    {
            cin >> wartosc;
            B[i] = wartosc;
    }
    szukaj(B, m, y);
    
    cout << "Index wynosi: " << szukaj(B, m, y) << endl;
    
system("pause");
    
}
0

Dziwisz sie ze nie dziala? Na pierwszy rzut oka najbardziej razace bledy to:

  • jako ze to c++ to nie deklarujemy tablic w sposob int tab[x] jesli x nie jest const.
  • wedlug Ciebie jaka wielkosc bedzie miala tablica B w drugiej linijce? 12523123? 123213? 0? a moze jeszcze jakas inna
  • zbedne wywolanie funkcji szukaj po forze i tak nic nie robi
  • blad logiczny powiedzmy ze tablica wyglada tak {6,5,2,8}
    Jako max przypisujesz 6 na starcie i zakladamy ze szukana liczba ma byc nie wieksza niz 5. Tak wiec po wyjsciu z petli 6 nadal bedzie max na pozycji 0. Sprawdzasz czy max>y no jest wiec przypisujesz mu m, jednak jak wiemy najwieksza liczba/cyfra nie wieksza od 5 jest 5 o indeksie 1 w tablicy. Przemysl to jeszcze raz. Do tego co to m ma oznaczac? Wpisuje sobie liczbe 1000, a tablica ma 10 miejsc jedynie i co nam to wtedy mowi? Nic.

Keep thinkin'

0
mkjsobkowiak napisał(a):
 
int szukaj(int B[], int m, int y)
{
    int max, x, index;
    max=B[0];
    for(int i=1; i<x; i++)
    {
            if((max < B[i]) && (B[i]<=y )){
                  max=B[i];
                  index = i;
                  }
    }
    if(max>y)
             index = m;

    return index;
}

Ja tam na C++ się nie znam, ale według mnie zmienna x nie ma zainicjowanej żadnej wartości, a według niej określasz koniec tablicy w warunku pętli for.
Dodatkowo (aczkolwiek w C++ może być inaczej), w funkcji tak właściwie nie wiesz jak długa jest przekazana tablica, gdyż dostajesz wskaźnik. Reszty nie chciało mi się już sprawdzać, bo zbytnio nie ma sensu.

0

Poprawiłem i jest ok, ale mam w związku z tym pytanie co mam zrobić, aby zamiast wpisywac w petlach funkcji konkretnej ilosci liczb z tablicy B[] automatycznie pobrało mi z maina?

 int szukaj(int B[], int m, int y)
{
    int min, index;
    min=B[0];
    for(int i=1; i<4; i++)
    {
             if(min>B[i])
                     min = B[i];
    }
    if(min<=y){
               for(int i=0; i<4; i++)
               {
                       if((min <= B[i]) && (B[i]<=y ))
                       {
                               min=B[i];
                               index = i;
                       }
               }
    }
    else if(min>y)
             index = m;

    return index;
}

int main()
{
    int m, y, min, index;   
    int B[4]={6,5,7,9};
    cout << "Podaj m: ";
    cin >> m;
    cout << "Podaj y: ";
    cin >> y;
    
    cout << "Index wynosi: " << szukaj(B, m, y) << endl;
    
system("pause");
    
} 
0
int size;
cin >> size;
int *tab = new int[size];

Dynamiczna alokacja pamieci(na stercie). Poczytaj troche o tym.

0
Autor napisał(a):

Poprawiłem i jest ok, ale mam w związku z tym pytanie co mam zrobić, aby zamiast wpisywac w petlach funkcji konkretnej ilosci liczb z tablicy B[] automatycznie pobrało mi z maina?

Musisz przekazać do funkcji ilość elementów tablicy jako jej argument

0

@Krycho
Nie rozumiem co to ma do rzeczy.

@Autor
Skorzystaj z std::vector ( jeśli to C++ ).
Jeśli piszesz w czystym C, funkcja musi przyjmować wielkość tablicy, którą ma przeszukać.

A że nie piszesz w czystym C, skorzystaj z std::vector.

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