mam do zrobienia program realizujacy podstawowe dzialania na zbiorach (suma, roznica, iloczyn)
ma to byc zrobione na wskaznikach, zbiory jako kolejki
niby cos mam, ale w sytuacji gdy np. iloczyn jest zbiorem pustym program sie wysypuje
czy ktos moglby mi pomoc??
ponizej kod tego co mam zrobione
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <math.h>
#include <conio.h>
typedef struct lista{
int liczba;
lista *adres;
} wskaznik;
wskaznik *utworz_liste (unsigned int);
wskaznik *suma (wskaznik *A, wskaznik *B);
wskaznik *kopiuj (wskaznik *C);
wskaznik *czy_nalezy (wskaznik *element, wskaznik *ZBIOR);
wskaznik *roznica (wskaznik *A, wskaznik *B);
wskaznik *iloczyn (wskaznik *A, wskaznik *B);
void pokaz_liste(wskaznik *glowa);
void main()
{
wskaznik *A = utworz_liste(4);
wskaznik *B = utworz_liste(5);
pokaz_liste(A);
pokaz_liste(B);
cout << "A + B = ";
pokaz_liste(suma (A,B));
cout << "A - B = ";
pokaz_liste(roznica (A,B));
cout << "A * B =";
pokaz_liste (iloczyn(A, B));
}
------------ UTWORZ LISTE -------------------------//////
wskaznik *utworz_liste(unsigned int zakres)
{
if (zakres)
{
int a=zakres;
cout <<"Tworze liste "<<a<< " elementowa"<<endl;
wskaznik *p=NULL, *glowa;
while (zakres--)
{
if(!p)
{
p = new wskaznik;
glowa = p;
cout <<"podaj "<< (a-zakres)<<" element"<<endl;
cin >>p->liczba;
}
else
{
p -> adres = new wskaznik;
p = p -> adres;
cout <<"podaj "<< (a-zakres)<<" element"<<endl;
cin >>p->liczba;
}
}
p -> adres = NULL;
return (glowa);
}
else return(NULL);
}
-------------------- POKAZ LISTE --------------////////
void pokaz_liste(wskaznik *glowa)
{
while (glowa)
{
cout << glowa ->liczba << " ";
glowa = glowa ->adres;
}
cout << endl;
}
///--------------SUMA------------------///////
wskaznik *suma (wskaznik *A, wskaznik *B)
{
if (A && B)
{
wskaznik *nowa = kopiuj (A);
wskaznik *p;
while (B)
{
if (czy_nalezy (B, nowa))
{
p = new wskaznik;
p ->liczba = B ->liczba;
p ->adres = nowa;
nowa = p;
}
B = B ->adres;
}
return (nowa);
}
else if (A) return (kopiuj (A));
else return (kopiuj(B));
}
//////////*/ kopiuj *///////
wskaznik *kopiuj (wskaznik *C)
{
if (C)
{
wskaznik *p;
wskaznik *glowa;
p = new wskaznik;
glowa = p; //zapamietanie poczatku
p ->liczba= C ->liczba;
while (C->adres)
{
p ->adres = new wskaznik;
C = C->adres;
p = p ->adres;
p ->liczba = C ->liczba;
}
p ->adres = NULL;
return (glowa);
}
else return (NULL);
}
//* ---------- CZY NALEZY DO ZBIORU -------*//////////
wskaznik *czy_nalezy (wskaznik *element, wskaznik *ZBIOR)
{
while (ZBIOR)
{
if (element ->liczba == ZBIOR ->liczba)
return (NULL);
ZBIOR = ZBIOR ->adres;
}
return (element);
}
//----------- ROZNICA --------------////
wskaznik *roznica (wskaznik *A, wskaznik *B)
{
if (A && B)
{
wskaznik *glowa = NULL;
wskaznik *p = NULL;
while (A)
{
if (czy_nalezy (A, B))
{
if (!p)
{
p = new wskaznik;
glowa = p;
p ->liczba = A ->liczba;
}
else
{
p ->adres = new wskaznik;
p = p ->adres;
p ->liczba = A ->liczba;
}
}
A= A ->adres;
}
p -> adres = NULL;
return (glowa);
}
else if (A) return (NULL);
else return (kopiuj (A));
}
///////---------- ILOCZYN -----------//////
wskaznik *iloczyn (wskaznik *A, wskaznik *B)
{
if (A && B)
{
wskaznik *glowa = NULL;
wskaznik *p= NULL;
while (B)
{
if (!czy_nalezy(B, A))
{
if (!p) //tworzenie pierwszego elementu listy
{
p = new wskaznik;
glowa = p; // zapamietanie poczatku
p ->liczba = B ->liczba;
}
else
{
p ->adres = new wskaznik;
p = p ->adres;
p ->liczba = B -> liczba;
}
}
B = B ->adres;
}
p ->adres = NULL;
return (glowa);
}
else return (NULL);
}