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