• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zliczanie różnych elementów [C] Pomocy

Object Storage Arubacloud
0 głosów
1,214 wizyt
pytanie zadane 31 marca 2017 w C i C++ przez hacker09 Użytkownik (520 p.)
Dobry wieczór.

Dostałem takie zadanie i kompletnie nie wiem jak zacząć do niego podejść, prosiłbym was o jakąś wskazówkę.

Napisz funkcję zwracającą informację o liczbie elementów różnych w wektorze (tablicy jednowymiarowej liczb typu float) będącym jej parametrem. Wykorzystaj tą funkcję w programie sprawdzającym, w którym wierszu tablicy dwuwymiarowej znajduje się największa liczba elementów różnych.

3 odpowiedzi

0 głosów
odpowiedź 1 kwietnia 2017 przez mokrowski Mędrzec (155,700 p.)
wybrane 1 kwietnia 2017 przez hacker09
 
Najlepsza

Miałem obliczanie elementów unikalnych w jakimś projekcie. Wyciąłem kod. Masz dla liczb int. Myślę że sobie poradzisz z dostosowaniem :-)

#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b) {
    int *x = (int *) a;
    int *y = (int *) b;
    return *x - *y;
}

size_t calcUniqueElements(int *table, size_t table_length) {
    if(!table_length) {
        return table_length;
    }

    qsort(table, table_length, sizeof(int), compare);

    int * last = table + table_length;
    int * first = table;
    int * result = table;
    while(++table != last) {
        if(!(*result == *table) && ++result != table) {
            *result = *table;
        }
    }
    return (++result) - first;
}

int main(void) {
    int table[] = {5, 1, 2, 5, 4, 5, 3, 4};
    size_t table_length = sizeof(table) / sizeof(table[0]);
    printf("%zu\n", calcUniqueElements(table, table_length));

    return EXIT_SUCCESS;
}

 

0 głosów
odpowiedź 31 marca 2017 przez tangarr Mędrzec (154,860 p.)
Jeżeli piszesz w C to najłatwiej będzie posortować tablicę i wtedy zliczenie różnych elementów będzie proste. Wystarczy sprawdzić czy element w tablicy jest różny od poprzedniego.
Jeżeli piszesz w C++ to możesz użyć zbioru (std::set) lub jakiejś innej tablicy hashującej. Wystarczy wrzucić do niej wszystkie elementy z tablicy a potem pobrać długość zbioru/hashtabeli.
0 głosów
odpowiedź 31 marca 2017 przez Dexterim Dyskutant (8,370 p.)
Mozesz napisac funkcje która bedzie zwracała liczbę równych elementów liczoną w nastepujacy sposób.

ustawiasz sobie jedna zmienna np. powtórzenia i ustawiasz ja na zero następnie bierzesz tablice i bierzesz jej pierwszy element i porównujesz z każdym następnym jeśli jest jakaś równa to inkrementujesz powtorzenia i potem znowu bierzesz nastepna z kolei i dzialasz w podobny sposób. Skoro liczy są typu float to musisz wziac je w granice tzn nie równe tylko mniejsze badz wieksze od liczby która porównujesz np. o 0.01

Mam nadzieje że w miarę prosto wytłumaczone :)
komentarz 31 marca 2017 przez 10kw10 Pasjonat (22,880 p.)
Mozna by było jeszcze wrzucac do tablicy liczby które juz byly żeby nie sprawdzać kilka razy.
komentarz 31 marca 2017 przez tangarr Mędrzec (154,860 p.)

@ Dexterim : Nie wziąłeś pod uwagę tego, że podczas brania kolejnego indeksu musiałby cofać się po tablicy, żeby sprawdzić czy badany element przypadkiem już nie występuje na wcześniejszej pozycji. Złożoność algorytmu O(n^3) smiley

komentarz 31 marca 2017 przez Dexterim Dyskutant (8,370 p.)
W sumie racja nie wziąłem tego pod uwage :)
komentarz 31 marca 2017 przez hacker09 Użytkownik (520 p.)
rozumiem jak to zrobić tylko jak przypisać nastepny element po wykonaniu się sprawdzania w tablicy dwuwymiarowej ?
1
komentarz 31 marca 2017 przez Dexterim Dyskutant (8,370 p.)
Mozna sobie stowrzyc dodatkową tablicę która przechowa wynik z każdego rzędu

Podobne pytania

0 głosów
1 odpowiedź 108 wizyt
pytanie zadane 8 listopada 2016 w JavaScript przez Napromieniowany Użytkownik (570 p.)
0 głosów
1 odpowiedź 142 wizyt
pytanie zadane 16 listopada 2016 w C# przez jankustosz1 Nałogowiec (35,880 p.)
+2 głosów
3 odpowiedzi 407 wizyt

92,623 zapytań

141,478 odpowiedzi

319,818 komentarzy

62,005 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...