C++ - wartość zerowa...

0

Witam mam taki kod, zliczający ilość wystąpień elementu w tablicy nieuporządkowanej. Problem w tym, że zwraca niepoprawny wynik wystąpień 0. Skąd ten błąd? Ma ktoś jakiś pomysł?
Z góry dziękuję i pozdrawiam -Maciek

#include <iostream>
#include <conio.h>
using namespace std;
 
void wypelnij(int tab[8])
{
  for (int i=0; i<8; i++)
  {
    cout << "Podaj wartosc elementu[" << i << "] " ;
    cin >> tab[i];
  }
}

/*************************************************/

void wyswietl(int tab[8])
{
  for (int i=0; i<8; i++)
    cout << tab[i] << "  ";
  cout << endl;
}

/*************************************************/

void licz_elementy(int tab[8])
{
	int element[8];
	
	cout << "ZEROWANIE" << endl;
	for(int i=0;i<8;i++){
		element[i]=0;
		cout << i << "=>" << element[i] << endl;
	}

	cout << "POBRANE DANE" << endl;
	for(int i=0;i<8;i++){
		cout << i << "=>" << tab[i] << endl;
	}
	
	cout << "OPERACJE" << endl;
	for(int i=0;i<9;i++){
		cout << element[tab[i]] << "+1="; 
		element[tab[i]]++;
		cout << element[tab[i]] << endl;
	}	
	
	cout << "WYNIK" << endl;
	for(int i=0;i<8;i++){
		cout << i << "=>" << element[i] << endl;
	}		
}
 
/*************** Poczštek funkcji glównej programu *************/
int main()
{
  cout << "ELEMENTY TABLICY (CYFRY OD 0 DO 8):" << endl;
  int tablica[8];
  wypelnij(tablica);
  licz_elementy(tablica);
  getch();
  return 0;
}
0

Po części winowajcą jest ten idiotyczny zapis:

cin >> tab[i];

0

tzn? Jak to poprawić?

0
int x = 0;
cin >> x;
int * tab = new int[x];

//iteracja
for(int i = 0; i < x; ++i);

//zwolnienie pamieci
delete [] tab;
0

O mój boże, teraz zauważyłem, że jest ustawiona wielkość.
Cóż, mój błąd.. ale w ten sposób się nie ograniczysz wielkością >.<

0

Nie zależy mi na wielkość, bo to szczegóły tylko skąd bierze się to 0

0

A dlaczego w seksji "OPERACJE" masz warunek w pętli "i < 9" ? :)

0

Po poprawieniu warunku Martynkaa, program działa.
Zapewne odwoływałeś się do elementu tablicy, który nie był nadpisany przez Ciebie.

0

O dzięki. Wydawało mi się, że wszędzie zmieniłem na 8 :)

0

Przy zliczaniu powinieneś sprawdzić czy ((0<=tab[i])&&(tab[i]<8)) i tylko wtedy zwiększać ++element[tab[i]]; bo inaczej się prosisz o mazanie po pamięci.

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