matematykaszkolna.pl
Wyszukiwanie liniowe Knic: Próbuje napisać program wyszukiwanie liniowe w jednowymiarowej tablicy dynamicznej i mam problem,a,że wiem,że tu niektórzy też się interesują informatyką to pytam,bo to chyba najbardziej przyjazne miejsce porównując z forami multijęzycznymi... int main() { int size; int value; std::cin >> size; //array size std::cin >> value; int* array = new int[size]; for (int z = 0; z < size; z++) { array[z] = z; } for (int i = 0; i < size; ++i) { if (array[i] == value) { return i; } } delete[] array; return −1; } Najpierw wypełniam tablicę kolejnymi liczbami naturalnymi o ostatnim elemencie równym size−1,potem następna pętla pełni rolę właśnie wyszukiwania liniowego. Co tu jest źle?Wracam po przerwie długiej bardzo,więc mogą być tu gdzieś błędy w rozumowaniu/kodzie/gdziekolwiek
26 maj 21:09
jc: Wygląda dobrze, tylko nie wiem, jak odczytać wartość przekazywaną do systemu. Poza tym, jeśli liczba jest w zakresie, to opuszczasz program przed zwolnieniem pamięci (myślę, że pamięć i tak zostanie zwolniona). zamiast return i; wpisz cout << i << endl;
27 maj 00:23
27 maj 12:26
Knic: Dzięki za pomoc.Jeszcze tak na marginesie,czy nie powinno się czyścić też delete [] array[i]; ?
27 maj 13:08
Knic: No i czy nie powinno być std::cout << "Found " << value << " at index " << i +1 << std::endl; bo np. w tablicy 10 elementowej wartosc 5 znajduje sie w indexie rownym 6.
27 maj 13:15
Marian P.: Nie, bo uzupełniasz tablicę od 0 do z−1 (z < size): for (int z = 0; z < size; z++) { array[z] = z; } więc 5 jest pod indeksem 5 delete[] używasz do tablic większych niż jednowymiarowych np: #include <iostream> using namespace std; int main() { int sizeX = 4; int sizeY = 3; int **array = new int *[sizeX]; // array of multiplied indexes for (int x = 0; x < sizeX; x++) { array[x] = new int[sizeY]; for (int y = 0; y < sizeY; y++) { array[x][y] = x*y; std::cout << array[x][y] << " "; } std::cout << std::endl; } // delete array for (int x = 0; x < sizeX; x++) { delete[] array[x]; } delete[] array; } Za każdym użyciem 'int *x = new int[3];' robisz 'delete[] x;' Za każdym użyciem 'int x = new int;' robisz 'delete x;'
27 maj 22:44