• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
1,405 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 (156,260 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 (155,140 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 (155,140 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ź 124 wizyt
pytanie zadane 8 listopada 2016 w JavaScript przez Napromieniowany Użytkownik (570 p.)
0 głosów
1 odpowiedź 190 wizyt
pytanie zadane 16 listopada 2016 w C# przez jankustosz1 Nałogowiec (36,720 p.)
+2 głosów
3 odpowiedzi 545 wizyt

93,099 zapytań

142,063 odpowiedzi

321,520 komentarzy

62,442 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...