[C] elementy o tej samej wartosci


(O2350695) #1
#include 


int fun(int tab[], int size)

{

  int i,liczlokalnie=0, liczmax=0;

  for(i=1;i
  {

	while(tab[i-1]==tab[i])

	{

	liczlokalnie++;

	i++;

    }

   if(liczlokalnie>liczmax) liczmax=liczlokalnie;

   liczlokalnie=0;

  }


return liczmax;	

}


int main()

{ 	

  int size=9;

  int tab[]={2,2,4,4,4,2,2,1,3}; // odp 3	


  printf("%d", fun(tab,size));

  return 0;

  }

Mam taki kodzik nie wiem gdzie jest problem, czy wykraczam za tablicę bo licz zwraca mi 4 a powinno 3.

Prog powinien zwrócić wartość najdłuższej serii takich samych znaków, w tym przypadku 3.

problem jest w tym ze licznik sie nie zeruje (chyba) jakiś warunek muszę dorzucić?


(Copycona) #2

Nie.

Skoro wiesz jaki jest problem, to skąd dodatkowe przypuszczenie, że wykraczasz poza zakres tablicy? :wink:

Potrzebujesz dodatkową zmienną “liczmax”. Zmienną “licz” wykorzystana zostanie do liczenia aktualnej serii, natomiast w nowej zmiennej będzie przechowywana wartość maksymalnej serii. Tuż po definicji przyda się warunek, czy rozmiar tablicy jest większy niż zero - jeżeli nie od razu można zwrócić zero, w innym wypadku ta maksymalna seria wynosi co najmniej 1 element (i taką wartość ustawiamy).

Dalej pętla taka, jaką już masz, tyle, że z dodatkowym warunkiem wewnętrznym. Wartość w indeksie i-2 inna niż w i-1 daje znak, że sprzyjająca seria została zakłócona. Wartość zmiennej licz znów trzeba zmienić na 1, i jeżeli “licz” jest większe niż “liczmax” zmienić wartość “liczmax”.

Podobnie na końcu. Zwracamy większą liczbę - licz lub liczmax.

Poprawiony Twój kod (uzupełniony o opisane elementy):

#include

(O2350695) #3

O właśnie, tak przy okazji:

co oznacza

unsigned int size = sizeof(tab)/sizeof(int);

bo z miom przekazywaniem do funkcji rozmiaru tablicy kiepsko, robie to na sztywno.


([alex]) #4

Ale fajne rady dajesz niema co!


(Copycona) #5

Fakt, przepraszam.


(etam) #6

Nie prawda. http://en.cppreference.com/w/cpp/language/types według standardu typ int ma co najmniej 2 bajty, a nie dokładnie 4. Dlatego lepiej używać sizeof(int).


(O2350695) #7

btw nie mogę używać bibliotek innych niż stdio.h :slight_smile:


([alex]) #8

Nie musisz, math nie jest potrzebny.