• 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.)

VPS Starter Arubacloud
0 głosów
2,563 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,300 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 119 wizyt
pytanie zadane 23 stycznia 2020 w C# przez maciek_xz Nowicjusz (120 p.)
0 głosów
1 odpowiedź 999 wizyt
0 głosów
2 odpowiedzi 223 wizyt
pytanie zadane 6 grudnia 2016 w Matematyka, fizyka, logika przez chris Gaduła (3,680 p.)

93,012 zapytań

141,977 odpowiedzi

321,266 komentarzy

62,354 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 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...