algorytm.org

Algorytm - operacje na zbiorach

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Forum www.algorytm.org :: Pozostałe
Witaj Gość   
[Zarejestruj się]  
[Zaloguj się]
Zamieść odpowiedź
 Algorytm - operacje na zbiorach

Witam,
mam problem z nastepujacym zadaniem:
Napisz program w Javie, który ilustruje następujące operacje na zbiorach reprezentowanych w tablicach.
Program powinien zawierać klasę Set, zawierającą metody:insert(), find(x), display() oraz klasę SetApp zawierającą metody :

1. madeset(n) – tworzy zbiór n-elementowy
2. sum(a, b, c) // C = AÈB //przepisujemy pierwszy zbiór, uzupełniamy elementami z drugiego zbioru, których nie było w pierwszym
3. product(a, b, c) // C = AÇB //porównać elementy z pierwszego zbioru z elementami z drugiego
4. difference(a, b, c) // C = A/B //porównać elementy z pierwszego zbioru z drugim, jak wystepuje w drugim, to się nie zalicza
5. inclusion (a, b) // true == A Ì B // porównujemy pierwszy zbiór z drugim
6. equality (a, b) // true == A = B //czy mają tyle samo elementów

oraz metode main(), która powinna umożliwić wybór dowolnej operacji na zbiorach.
(zbiory nie zawierają powtórzeń)

Gdy próbuję dodać nowy element dostaje odpowiedz "brak miejsca w zbiorze"
proszę o pomoc co jest przyczyną błędu

import java.io.*;

class Set
{
public long[] Tab;
public int n = 0; // n-elementowy
public int current = -1; // ostatni element, aktualnie pusto


public Set () // konstruktor
{
Tab = new long[0];
}

public Set (int m) //tworzy tablice n-elementowa
{
Tab = new long[m];
n = m;
}

public void insert (long value)
{
int i;
for (i = 0; i <= current; i++)
if (Tab[i] == value)
break;
if (i > current)// nie znaleziono takiego elementu w tablicy
{
if (current < (n - 1) )
{
current++;
Tab[current] = value;
} else {
System.out.println ("Brak miejsca w zbiorze");
}
}
}


public boolean find(long searchKey) // szukanie w zbiorze
{
int i;
for (i=0; i < Tab.length; i++)
if (Tab[i] == searchKey)
break;
if (i == Tab.length)
return false;
else
return true;
}

public void display() // wyswietl zbior n-elementowy
{
System.out.print("Ilosc elementow w zbiorze:");
System.out.println(current + 1);
for (int j = 0; j <= current ; j++)
System.out.print(Tab[j] + " ");
}
public int size(){
return Tab.length;
}
public long get(int i){
return Tab[i];
}
}


//MAIN
import java.io.*;

class SetApp
{

public static void main (String[] args)
{

Set A = new Set(); // tworzymy tablice
Set B = new Set();

int num;
long el, searchKey;

do{
menu();

num = (int) getLong();
switch (num)
{
case 1: { // dodaj element A

System.out.println("Podaj element: ");
el = getLong();
A.insert(el);
break;
}
case 2: { // dodaj element B

System.out.println("Podaj element: ");
el = getLong();
B.insert(el);
break;
}
case 3: { // Wyszukiwanie w A
System.out.println("Podaj szukany element: ");
searchKey = getLong();

if(A.find(searchKey))
System.out.println("Znaleziono " + searchKey + " w zbiorze A");
else
System.out.println("Nie znaleziono " + searchKey + " w zbiorze A");
break;
}
case 4: { // wyszukiwanie w B
System.out.println("Podaj szukany element: ");
searchKey = getLong();

if(B.find(searchKey))
System.out.println("Znaleziono " + searchKey + " w zbiorze B");
else
System.out.println("Nie znaleziono " + searchKey + " w zbiorze B");
break;
}
case 5: { // pokaz zbiory A,B
System.out.println("Zbior A: ");
A.display();
System.out.println("Zbior B: ");
B.display();
break;
}

/* case 6: { // suma
System.out.println("Suma elementow zbiorow A i B: " + Set.sum());
break;
}
case 7: { //iloczyn
System.out.println("Czesc wspolna zbiorow A i B: " + Set.product());
break;
}
case 8: { //roznicaAB
System.out.println("Roznica zbiorow A i B: " + Set.differenceAB());
break;
}
case 9: { //roznicaBA
System.out.println("Roznica zbiorow B i A: " + Set.differenceBA());
break;
}
case 10: { //inkluzja
if (Set.inclusion()) System.out.println("Zbior A zawiera sie w zbiorze B");
else System.out.println("Zbior A nie zawiera sie w zbiorze B!");
break;
}
case 11: { //dlugosc
if (Set.equality()) System.out.println("Zbior A jest rowny zbiorowi B");
else System.out.println("Zbior A nie jest rowny zbiorowi B");
break;
}*/
case 0: {
System.out.println("Do zobaczenia!");
break;
}
default:
System.out.println("Nie ma takiej opcji! ");

} // koniec switch

} while (num != 0); // koniec petli do.. while




} // koniec main


public static Set madeset (int n)
{
return new Set (n);
}


public static void sum(Set A, Set B, Set C){
int i;
Set S1;
Set S2;
if (A.size() > B.size()){
S1 = A;
S2 = B;
} else {
S1 = B;
S2 = A;
}

for (i = 0; i < S1.size(); i++)
C.insert(S1.get(i));

for (i = 0; i < S2.size(); i++){
if (C.find(S2.get(i))){
// nic nie rob
} else
C.insert(S2.get(i));
}
}

// wynikiem jest czesc wspolna ze zbioru A i B
public static void product(Set A, Set B, Set C){
int i;
Set S1;
Set S2;
if (A.size() > B.size()){
S1 = A;
S2 = B;
} else {
S1 = B;
S2 = A;
}

for (i = 0; i < S2.size(); i++)
if (S1.find(S2.get(i)))
C.insert(S2.get(i));
}

// zbiór A bez elementów ze zbioru B
public static void differenceAB(Set A, Set B, Set C){
for (int i = 0; i < A.size(); i++)
if (B.find(A.get(i))){
// nic nie rob
} else
C.insert(A.get(i));
}


// odwrotnie
public static void differenceBA(Set A, Set B, Set C){
for (int i = 0; i < B.size(); i++)
if (A.find(B.get(i))){
// nic nie rob
} else
C.insert(B.get(i));
}

// sprawdza czy zbior A zawiera sie w zb B
public static boolean inclusion(Set A, Set B){
boolean include = true;
for (int i = 0; i < A.size(); i++)
if (B.find(A.get(i))){
// nic nie rob
} else{
include = false;
break;
}
return include;
}

// sprawdza czy obydwa zbiory sa takie same
public static boolean equality(Set A, Set B){
boolean equal = true;
if (A.size() == B.size()){
for (int i = 0; i < A.size(); i++)
if (B.find(A.get(i))){
// nic nie rob
} else{
equal = false;
break;
}
} else {
equal = false;
}
return equal;
}

public static String getString()
{

String s;
InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader br = new BufferedReader (isr);
try{
s = br.readLine();
return s;
}
catch(IOException e) {
System.out.println ("Blad podczas odczytu danych");
return "0";
}
}


public static long getLong()
{
long lnum;

String s = getString();
try{
lnum = Long.parseLong(s);
return lnum;
}
catch(NumberFormatException e){
System.out.println("Blad podczas konwersji liczby");
return 0;
}
}

public static void menu()
{
System.out.println("*****************************");
System.out.println(" OPERACJE NA ZBIORACH");
System.out.println("*****************************");
System.out.println(" 1. Dodaj element do zbioru A");
System.out.println(" 2. Dodaj element do zbioru B");
System.out.println(" 3. Znajdz element w zbiorze A");
System.out.println(" 4. Znajdz element w zbiorze B");
System.out.println(" 5. Pokaz zbiory A,B");
System.out.println(" 6. Zsumuj zbiory A,B");
System.out.println(" 7. Iloczyn zbiorow A,B");
System.out.println(" 8. Roznica A/B");
System.out.println(" 9. Roznica B/A");
System.out.println("10. Sprawdz czy A zawiera sie w B");
System.out.println("11. Porownaj ilosc elementow w zbiorach A,B");
System.out.println(" 0. Wyjscie z programu");
System.out.println("******************************");
System.out.println("Wybierz operacje:");
} // koniec menu

}// koniec klasy
Cytuj
Zamieść odpowiedź Strona # 
Szybka odpowiedź

Kod:    


Powered by ccBoard