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

Operacje na zbiorach [C] (suma, różnica, część wspólna, zawieranie itp.)

Object Storage Arubacloud
0 głosów
2,506 wizyt
pytanie zadane 20 czerwca 2017 w C i C++ przez asndtn Nowicjusz (120 p.)

Cześć,

mam do napisania program, który będzie posiadał takie funkcje:

  1. Read( int T[], int len) – wczytuje do tablicy zbiór o liczbie elementów len,
  2. Write(int T[], int len) – wypisuje elementy zbioru po 10 elementów w linii
  3. Find(int T[], int len, int x) – zwraca 1 gdy x występuje w zbiorze T[]
  4. Sum(int A[], int nA, int B[], int nB) - wyznacza sumę zbiorów (A∪B)
  5. Product(int A[], int nA, int B[], int nB) - wyznacza część wspólną zbiorów (A∩B)
  6. Difference(int A[], int nA, int B[], int nB) - wyznacza różnicę zbiorów (A\B)
  7. Inclusion (int A[], int nA, int B[], int nB) – zwraca 1 gdy A ⊂B
  8. Equality (int A[], int nA, int B[], int nB) - zwraca 1 gdy zbiory A i B są równe

No i fajnie, pierwsze trzy funkcje mam, ogarniam, ale jak zrobić resztę? Po wczytaniu dwóch zbiorów ich sumę mogę na chłopski rozum wypisać tak, że po prostu wypiszę oba, no i działa, ale tylko w momencie kiedy elementy się nie powtarzają. A jakiego ifa (bo podejrzewam, że tu trzeba użyć funkcji if) trzeba wstawić, żeby program sprawdził czy się elementy nie powtarzają i wypisał te unikatowe?

I jak zrobić resztę? Proszę o jakieś naprowadzenie :)

Oto mój wybrakowany fragment kodu:

#include <stdio.h>
#include <stdlib.h>
#define LENGHT 150 // zdefiniowana dlugosc //

void wczytaj(int tab[], int len) // wczytywanie //
    {
        int i;
        for (i = 0; i < len; i++)
        {
            printf("    tab[%i]= ", i);
            scanf("%i", & tab[i]);
        }
    }

void wypisz(int tab[], int len) // wypisywanie //
    {
        int i;

        printf("\n  Elementy zbioru to: ");

        for (i = 0; i < len; i++)
        {
            printf("%i ", tab[i]);
        }
    printf("\n");
  }

int znajdz(int t[], int len, int x) // znajdowanie //
    {
        int i;
        for (i = 0; i < len; i++)
        if (x == t[i])
        {
            return i;
        }
    return len;
    }

int main (void)
{
    int odp, x, p;
    int li = 0;
    int tab[LENGHT];
    int li1, li2, A[LENGHT], B[LENGHT];

    do
    {
        printf("\n______________________________\n");
        printf("Operacje na zbiorach:\n");
        printf("    1. Wczytaj\n");
        printf("    2. Wypisz\n");
        printf("    3. Znajdz\n");
        printf("    4. Suma zbiorow\n");
        printf("    5. Czesc wspolna zbiorow\n");
        printf("    6. Roznica zbiorow\n");
        printf("    7. Sprawdz czy A c B\n");
        printf("    8. Sprawdz czy A = B\n");
        printf("    9. Koniec programu\n");
        printf("Wybierz opcje: ");
        scanf("%d", &odp);
        printf("______________________________\n");

    switch (odp)
    {
        case 1:
            printf("\n  Podaj liczbe elementow zbioru: ");
            scanf("%d", &li);
            wczytaj(tab, li);
            printf("\n  Pobrano wartosci.\n");
        break;
        case 2:
            wypisz(tab, li);
        break;
        case 3:
            printf("\n  Podaj szukany element: ");
            scanf("%d", & x);
            p = znajdz(tab, li, x);
            if (p == li)
            {
                printf("\n  Brak szukanego elementu\n");
            }
            else
            {
                printf("\n  Szukany element jest na pozycji: %d\n", p);
            }
        break;
        case 4:
            printf("Zbior A.\n");
            printf("Podaj liczbe elementow: ");
            scanf("%d", &li1);
            wczytaj(A, li1);

            printf("\nZbior B.\n");
            printf("Podaj liczbe elementow: ");
            scanf("%d", &li2);
            wczytaj(B, li2);
        break;
        case 5:
        break;
        case 6:
        break;
        case 7:
        break;
        case 8:
        break;
        case 9:
        return 0;
        default:
            printf("\n  Nie ma takiej odpowiedzi.\n");
        break;
    }
    }
    while (odp != 9);

    return 0;
}

1 odpowiedź

0 głosów
odpowiedź 20 czerwca 2017 przez mbabane Szeryf (79,280 p.)
Najprościej to będzie siłowo tzn. przed wyświetleniem sprawdzasz czy dany element znajduje się w drugim zbiorze i jeśli tak to nie wyświetlasz go jeśli nie to wyświetlasz (najlepiej iteruj po większym zbiorze i przyrównuj z mniejszym).

Podobne pytania

0 głosów
0 odpowiedzi 96 wizyt
pytanie zadane 23 stycznia 2020 w C# przez maciek_xz Nowicjusz (120 p.)
0 głosów
1 odpowiedź 876 wizyt
0 głosów
2 odpowiedzi 198 wizyt
pytanie zadane 6 grudnia 2016 w Matematyka, fizyka, logika przez chris Gaduła (3,680 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 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!

...