Wydobywanie informacji w tablicy

zxcvkolos
Użytkownik
Użytkownik
Posty: 23
Rejestracja: 13 maja 2009, o 21:34
Płeć: Kobieta
Podziękował: 5 razy

Wydobywanie informacji w tablicy

Post autor: zxcvkolos »

Witam mam problem z zadaniem, który ma sprawdzać ile w tablicy jest różnych liczb. Mój problem jest taki:
wydobywanie informacji z tablicy nie powinno powodować zmiany zawartości tej tablicy, a mój program to robi.
Proszę o pomoc

Kod: Zaznacz cały

#include <iostream>



int main()
{

	const int N=10;

	
std::cout<<"Zostaniesz poproszony o wpisanie "<<N<<
" liczb. Uwaga nie moga zawierac czesci ulamkowej.
";
	int tab[N];
	int i,licznik=1;
	
	int nowaTablica[N];

	int nowaTablica[tab[N].length];

for(int i=0; i < tab[N].length; i++)
{
    nowaTablica[i] = tab[i];
}
 
	for(i=0;i<N;i++) 
	
	std::cin>>nowaTablica[i];

	std::sort(nowaTablica,nowaTablica+10);
	
	for(i=0;i<N-1;i++)
	
  	if(nowaTablica[i]!=nowaTablica[i+1]) licznik++;
  	
	std::cout<<"W tablicy jest "<<licznik<<" roznych liczb
";
}
Ostatnio zmieniony 1 cze 2009, o 18:32 przez zxcvkolos, łącznie zmieniany 1 raz.
Awatar użytkownika
kolanko
Użytkownik
Użytkownik
Posty: 1905
Rejestracja: 9 gru 2006, o 14:23
Płeć: Mężczyzna
Lokalizacja: Łańcut
Podziękował: 32 razy
Pomógł: 172 razy

Wydobywanie informacji w tablicy

Post autor: kolanko »

Moze pierwsze je posortuj, póżniej przeleć tablice i sprawdz liczby, wg mnie tak jest najprościej. sortowanie bąbelkowe znajdziesz na wiki na przyklad.
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

Wydobywanie informacji w tablicy

Post autor: kadiii »

Może zwygzajnie skopiuj tablicę przed sortowaniem? Tak będzie chyba najprościej.
Awatar użytkownika
kolanko
Użytkownik
Użytkownik
Posty: 1905
Rejestracja: 9 gru 2006, o 14:23
Płeć: Mężczyzna
Lokalizacja: Łańcut
Podziękował: 32 razy
Pomógł: 172 razy

Wydobywanie informacji w tablicy

Post autor: kolanko »

A w jakim celu kopiowac tĥ tablice ? bo nie do konca rozuoie Twoj pomysl
Awatar użytkownika
Dedemonn
Użytkownik
Użytkownik
Posty: 689
Rejestracja: 21 lut 2007, o 19:40
Płeć: Mężczyzna
Lokalizacja: Z kompa
Podziękował: 26 razy
Pomógł: 137 razy

Wydobywanie informacji w tablicy

Post autor: Dedemonn »

Nie wiem co robi funkcja sort, ale jeśli robi to, jak się rzeczywiście nazywa, to już kompletnie nie wiem po co tu sortowanie.

Pierwsza myśl jaka mi do łba przychodzi, to taki algorytm:

Kod: Zaznacz cały

//  w tablicy 'tab' mamy już wklepane liczby

max = najwieksza_liczba_znaleziona_w_tab

bool boolTab[max]  // wszystkie komórki mają początkowo wartość false (chyba xD)

for( wszystkie liczby w 'tab' )
     boolTab[ tab[i] ] = true;

int suma = 0;

for( wszystkie boole w 'boolTab' )
    if( boolTab[i] == true )
          suma++;
Żadnego sortowania (?!) i zmieniania wartości tablicy bazowej.

Pzdr.
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

Wydobywanie informacji w tablicy

Post autor: kadiii »

A w jakim celu kopiowac tą tablice ? bo nie do konca rozumie Twoj pomysl
Mój problem jest taki:
wydobywanie informacji z tablicy nie powinno powodować zmiany zawartości tej tablicy, a mój program to robi
Co do rozwiązania Dedemonna - już gdzies to tu pisałem - takie rozwiązanie jest dobre kiedy różnych liczb jest stosunkowo mało a zbiór wejściowych liczb niezbyt rozpięty. Oczywiście liczby musiałby byc taże całkowite. Rozwiązanie z sortowaniem danych jest poprawne dla ogólnego przypadku choć istnieją szczególne przypadki, które można rozwiązać lepiej (to tak jak z sortowaniem przez zliczanie - niby złozoność liniowa, ale zawsze zastosować się nie da).
zxcvkolos
Użytkownik
Użytkownik
Posty: 23
Rejestracja: 13 maja 2009, o 21:34
Płeć: Kobieta
Podziękował: 5 razy

Wydobywanie informacji w tablicy

Post autor: zxcvkolos »

a jak skopiwoać tablice do drugiej?
Awatar użytkownika
Dedemonn
Użytkownik
Użytkownik
Posty: 689
Rejestracja: 21 lut 2007, o 19:40
Płeć: Mężczyzna
Lokalizacja: Z kompa
Podziękował: 26 razy
Pomógł: 137 razy

Wydobywanie informacji w tablicy

Post autor: Dedemonn »

Kod: Zaznacz cały

//  mojaTablica - tę, którą chcesz skopiować
int nowaTablica[mojaTablica.length];

for(int i=0; i < mojaTablica.length; i++)
     nowaTablica[i] = mojaTablica[i];
Pewnie jest od tego funkcja biblioteczna, ale to nie należy do zbyt skomplikowanych algorytmów...
PS. Polecam zacząć od jakiegoś tutoriala, bo widzę, że brakuje podstaw. Stąd się niczego nie nauczysz w taki sposób.

@kadiii: Kolega używa zbioru liczb całkowitych. Algorytm zadziała, jeśli zrobi się dodatkową linijkę dla liczb nieujemnych. Do tego strzelam, że nawet jeśli liczb będzie 1kk, to czas wykonania nie przekroczy 0.5s - wątpię aby ktoś patrzył na wydajność kodu na tym poziomie. ;]


I ja się pytam po co tu sortowanie?! XD


Pzdr.
zxcvkolos
Użytkownik
Użytkownik
Posty: 23
Rejestracja: 13 maja 2009, o 21:34
Płeć: Kobieta
Podziękował: 5 razy

Wydobywanie informacji w tablicy

Post autor: zxcvkolos »

masz racje mam braki, ale muszę zrobić to zadanie

Kod: Zaznacz cały

#include <iostream>



int main()
{

	const int N=10;

	
std::cout<<"Zostaniesz poproszony o wpisanie "<<N<<
" liczb. Uwaga nie moga zawierac czesci ulamkowej.
";
	int tab[N];
	int i,licznik=1;
	
	int nowaTablica[N];

	int nowaTablica[tab[N].length];

for(int i=0; i < tab[N].length; i++)
{
    nowaTablica[i] = tab[i];
}
 
	for(i=0;i<N;i++) 
	
	std::cin>>nowaTablica[i];

	std::sort(nowaTablica,nowaTablica+10);
	
	for(i=0;i<N-1;i++)
	
  	if(nowaTablica[i]!=nowaTablica[i+1]) licznik++;
  	
	std::cout<<"W tablicy jest "<<licznik<<" roznych liczb
";
}
Jak zrobić żeby kod był poprawny?
ODPOWIEDZ