tablica w c++

miggot
Użytkownik
Użytkownik
Posty: 83
Rejestracja: 11 lis 2009, o 00:03
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 3 razy
Pomógł: 5 razy

tablica w c++

Post autor: miggot »

mam prosbe: Czy ktos moglby napisac mi kawalek programu, funkcje ktora policzy ile razy w tablicy wystepuje kazdy z jej elementow, czyli ze nr
1 wystepuje 2x
2 wystepuje 3x
itd
za pomoc z gory dziekuje
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

tablica w c++

Post autor: soku11 »

Kod: Zaznacz cały

template<class T>
void fun(vector<T>& input,map<T,int>& output)
{
  output.clear();

  typename map<T,int>::iterator iter;
  for(unsigned int i=0;i<input.size();++i)
  {
    iter=output.find(input[i]);
    if(iter==output.end())
      output.insert(pair<T,int>(input[i],1));
    else
      ++(iter->second);
  }
}
Proszę bardzo
Pozdrawiam.
miggot
Użytkownik
Użytkownik
Posty: 83
Rejestracja: 11 lis 2009, o 00:03
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 3 razy
Pomógł: 5 razy

tablica w c++

Post autor: miggot »

hy ... wiesz co z tym ze ja programy na zajeciach pisze mp tak jak nizej:
potrafilbys jakosc napisac ta funkcje tak, zeby bylo podobnie jak program ponizej, w tym co napisałeś uzyles stwierdzen ktorych nie miałam na zajeciach.

#include <iostream>

using namespace std;

void wczytaj(int *tab, int ilosc);
int ile_nieparzystych(int *tab, int nr);
int ilepunktow(void);

int main()
{
const int rozmiar=50;
int A[rozmiar];
int n = ilepunktow();
if((n >= 1) && (n <= rozmiar))
{
wczytaj(A, n);
int ilosc=ile_nieparzystych(A, n);
if(ilosc > 0)
{
cout<<endl<<"Ilosc elementow nieparzystych= "<<ilosc<<endl;
}
else
{
cout<<endl<<"Brak elementów nieparzystych."<<endl;
}

}
else
{
cout<<"Bledna liczba elementow."<<endl;
}
cout<<endl<<endl;
system("pause");
return 0;
}

int ilepunktow(void)
{
int n = 0;
cout<<"Program wyznacza ilosc elementow nieparzystych"<<endl;
cout<<"Podaj liczbe elementow tablicy: ";
cin>>n;
cout<<endl;
return n;
}

int ile_nieparzystych(int *tab, int nr)
{
int ile = 0;
for(int i = 0; i < nr; ++i)
{
if(tab%2!=0)
{
++ile;
}
}
return ile;
}


void wczytaj(int *tab, int ilosc)
{
cout<<endl;
for(int i = 0; i < ilosc; ++i)
{
cout<<"Podaj "<<i + 1<<" element: ";
cin>>*tab++;
}
}
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

tablica w c++

Post autor: soku11 »

Twoje podejście nie korzysta z dobrodziejstw C++. Mogę przerobić na takie same tablice, proszę:

Kod: Zaznacz cały

template<class T>
void fun(T* tab,const unsigned int size,map<T,int>& output)
{
  output.clear();

  typename map<T,int>::iterator iter;
  for(unsigned int i=0;i<size;++i)
  {
    iter=output.find(tab[i]);
    if(iter==output.end())
      output.insert(pair<T,int>(tab[i],1));
    else
      ++(iter->second);
  }
}
Pozdrawiam.
miggot
Użytkownik
Użytkownik
Posty: 83
Rejestracja: 11 lis 2009, o 00:03
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 3 razy
Pomógł: 5 razy

tablica w c++

Post autor: miggot »

i tak dalej nie znam nazw ktorych tu uzyłeś ... ja mam podstawy programowania ... oddałam juz jeden program ktory byl napisany podobnie jak ty napisałeś i dostałam 2, dlatego ze uzyte byly nazwy o ktorych nic nie bylo powiedziane na wykładzie ... trudno ... dzieki za fatyge
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

tablica w c++

Post autor: soku11 »

To jak chcesz dostać rezultat tej funkcji? Nic nie zostało sprecyzowane, więc zrobiłem najprościej jak się da. Jeśli nie możesz używać map i tym podobnych, to będziesz miała mnóstwo roboty z tym (zbędnej). I ogólnie rzecz biorąc to są podstawy języka C++...

Pozdrawiam.
Leeq3
Użytkownik
Użytkownik
Posty: 60
Rejestracja: 10 kwie 2007, o 11:38
Płeć: Mężczyzna
Lokalizacja: Gorzów Wlkp.
Podziękował: 13 razy
Pomógł: 9 razy

tablica w c++

Post autor: Leeq3 »

Dla jednego elementu:

Kod: Zaznacz cały

int ile_elementow(int *tab, int nr, int element)
{
    int liczba=0;
    for(int i=0; i<nr; i++)
        if(tab[i]==element)
            liczba++;
    return liczba;
}
*tab to tablica
nr to rozmiar tablicy
element to numer jakiego szukasz
liczba to wartość ile razy element występuje w tablicy



Dla każdego elementu:

Kod: Zaznacz cały

void ile_elementow(int *tab, int nr)
{
    int liczba=0;
    int element;
    for(int j=0; j<nr; j++)
    {
         element = tab[j];
         if(element != 0L)
         {
              for(int i=0; i<nr; i++)
              {
                   if(tab[i]==element)
                   {
                       liczba++;
                       tab[i]=0L;
                   }
              }
              cout<<"
Element "<<element<<" wystepuje "<<liczba<<" razy.";
              liczba = 0;
         }
    }
}
0L to brak wartości (null).
Wada: usuwa wpisy z tablicy. Żeby nie usuwało wystarczy stworzyć nową tablicę pomocniczą i przepisać ("skopiować") do niej wartości ze starej tablicy.
ODPOWIEDZ