Szukanie elementu podobnego tablica.

0

Dobrze skończyłem Matlaba, pora zająć się C++. Jest to jeden z podpunktów zadania, resztę już mam. Muszę stworzyć funkcję:

int znajdz_podobny(int wartosc_zadana, int *tab)

która będzie wyszukiwała wartość zbliżoną do podanej przeszukując całą tablicy,

myślałem o wyznaczanie różnicy kolejnych elementów i szukaniu najmniejszej na laboratoriach, ale coś mi nie wychodziło, znacie może jakiś algorytm, żeby tą różnicę odnaleźć to kod, który do tej pory udało mi się stworzyć tzn. na laboratoriach (oczywiście wstawiam tylko kod tej funkcji):

int znajdz_podobny(int zadana, int* liczby)
{
	int r1 = 0, r2 = 0, wynik=0;

	for (int x = 0; x < 9; x++)
	{
		r1 = zadana - liczby[x];
		r2 = zadana - liczby[x + 1];

		if (r1 > r2) wynik = liczby[x + 1];
		else if (r1 > r2 && r2<0) wynik = liczby[x];
		else if (r2>r1 && r1 < 0) wynik = liczby[x];
	}

Sam muszę przyjrzeć się co jest źle. Ale prosiłbym o pomoc, rady. A już mi się przypomniało z czym miałem problem, z tym, że liczby mogą być ujemne i jeśli np:

wartość zadana = -5

tablicę=[1,2,3,6,-5]

to -5-(-5)=10 etc.

PS: Bym zapomniał tablica ma mieć tylko 10 elementów:P

0
int znajdz_podobny(int zadana, int liczby[], int ile)
  {
   int wynik=0,r,R=abs(zadana-liczby[wynik]);
   for(int i=1;i<ile;++i)
     {
      r=abs(zadana-liczby[i]);
      if(R>r)
        {
         R=r;
         wynik=i;
        }
     }
   return wynik;
  }
0

A ten dodatkowy argument czemu służy? Sory, nie zauważyłem, że jest w kodzie funkcji:P A bo pewnie nie wiedziałeś ile elementów ma tablica:P

0

Aby działało nie tylko na 9-elementowych tablicach.

0

No akurat tu jest 10 elementowa, dana z góry już:P

A i mały błąd się wkradł w twój kod:

wynik=liczby[i]

Ale tak to dziękuje:P

0
SPOJowiecaa napisał(a):

A i mały błąd się wkradł w twój kod:

wynik=liczby[i]

Nie! Jest poprawnie.

0

Dlaczego, w zadaniu mam znajduje element podobny i go wyświetla?

0

W takim razie: return liczby[wynik];

0

Ok.

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