Program zliczający ilość wystąpień wartości podanych przez użytkonwika

0

Czesc

Jestem nowy na forum i od niedawna zainteresowalem sie C++,chcialbym stworzyc program ktory zliczy wartosci wprowadzone przez uzytkownika. Nie znajac kryteriow np. wprowadzamy do tablicy liczby 5,2,3,4,2,3 a program odpowie ile razy wystapila wprowadzona wartosc ( 5-1, 2-2, 3-2, 4,1), na koncu zapisze je do pliku.

Jakby ktos mogl mi wytluczmaczyc konceptualnie jak to ogarnac to bede bardzo wdzieczny. Na chwile obecna stanalem na tym etapie i nie mam pomyslu jak wywolac mozliwosc zliczania bez podawania kryteriow. Dziekuje za wyrozumialosc,pomoc i pozdrawiam serdecznie.

Ponizszy program z wsparciem informacji znalezionych w internecie:

#include <stdio.h>
#undef main()
{

    int i, n;
    int a[100]; //tyle chcailbym wprowadzac wartosci

    printf("podaj ilosc elementow tablicy\n");
    scanf("%d", &n);

    for (i = 0; i < n; i++) {
        printf("podaj element a[%d]:  ", i); //tego nie do konca rozumiem
        scanf("%d", &a[i]);
    }

    int x;

    printf("podaj szukany element\n ", x);
    scanf("%d", &x);

    int ile(int n, int a[], int x)
    {
        int i, wynik;
        wynik = 0;

        for (i = 0; i < n; i++)
            if (a[i] == x)
                wynik++;
        return wynik;
    }
    int w;
    w = ile(n, a, x);

    if (w == 0)
        printf("brak szukanego elementu");
    else
        printf("element %d wystepuje %d razy", x, w);
    return 0;
}
0

Zrób sobie mapę <int liczba, int ilosc_wystapien>
Potem iterujesz sobie po całej tablicy i dla każdej liczby jeśli nie ma w mapie to dodajesz z wartością 1 a jeśli jest to zwiększasz ilosc_wystapien.

0

"Potem iterujesz sobie po całej tablicy" - moglbys cos wiecej o tym ? czy wyszukujemy wystapien przez wskazniki czy ifami ?

0

Piszesz, że zainteresowałeś się C++ a wątek otagowałeś jako C. Jak to w końcu jest?

0

ide w dobrym kierunku ?

for(int i=1;i<10;i++)
    {
          cin>>tab[i];
    }

//kopiowanie z tablicy do tablicy
for(int i=1;i<10;i++)
    {
    tab[i]=kopia[j];
    j++;
    }

if(tab[i]==kopia[j])
{
    wypisz liczbe tab[i]=licznik 
    -jak zliczyc ilosc jej wystapien ? 
}else
j++;
0

@widzo66: musisz coś wiedzieć o liczbach, jeśli są z jakiegoś sensownie małego przedziału (min..max) to po prostu tworzysz tablice:

size_t zakres = max - min + 1;
vector<int> liczba_wystapien(zakres, 0);

i później żeby sprawdzić ile liczb wystąpiło lub zwiększyć liczbę wystąpień to odnosisz się do liczba_wystapien[X - min] gdzie X to Twoja liczba.

sensownie mały to w zależnośc ile masz liczb zliczyć, ale generalnie do kilku milionów nie powinno być to odczuwalne - zacząłbym od tego rozwiązania

Jak większy przedział (liczony w setkach milionów/miliardów lub jakieś big inty) to std::map się pobaw, ale idea taka sama

0

Dzięki za wszelkie wskazówki, Panowie pewnie próbujecie pomóc mi w C a niektóre fragmenty kodu są skopiowane z poradnika nie do końca rozumiem ich działania (a okazuje sie za sa w C) - wybaczcie za zamieszanie z tym C i C++ wiem że kopiowanie kodu jest słabe ale chciałem mieć jakiś punkt odniesienia.

Stanąłem w miejscu kiedy mam przykładowe liczby:

24
24
24
34
34
32

prosto jest zapytac o liczbe 24 i o ilosc jej wystapien jednak nie moge poradzic sobie z tym że program szuka liczbe sam i wypisuje jej wartosc bez zapytania.
czyli sam znajdzie wyjatek i wypisze 24-3, 34-2 ,32-1. - moze nalezy je usunac ze zbioru czy cos - nie wiem jak to ogarnac

Pomyślałem żeby użyć funkcję count do zliczenia, czy istnieje w c++ jakas metoda na zignorowania powtórek wartosci lub zliczania wyjatkow?

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