import javax.swing.*;
public class fungsi {
String[] HimpunanA;
String[] HimpunanB;
String[] HimpunanRelasi;
String[] HimpunanAsal;
int jmlHimpunanA, jmlHimpunanB, jmlRelasi;
boolean satu2 ;
public void inputAnggota(){
String strA = JOptionPane.showInputDialog(null, "Masukkan jumlah himpunan A !", "Fungsi"
+" ", JOptionPane.QUESTION_MESSAGE);
jmlHimpunanA = Integer.parseInt(strA);
//Menampilkan dialog untuk menginput himpunan A sebanyak jmlHimpunanA
HimpunanA = new String[jmlHimpunanA];
for(int i = 0; i<= (jmlHimpunanA-1); i++){
HimpunanA[i] = JOptionPane.showInputDialog(null, "" +
"Himpunan A yang ke "+(i+1)+"/"+jmlHimpunanA+" : ", "Fungsi", JOptionPane.QUESTION_MESSAGE);
}
String strB = JOptionPane.showInputDialog(null, "Masukkan jumlah himpunan B !", "Fungsi"
+"", JOptionPane.QUESTION_MESSAGE);
jmlHimpunanB = Integer.parseInt(strB);
//menampilkan dialog untuk menginput himpunan B sebanyak jmlHimpunanB
HimpunanB = new String[jmlHimpunanB];
for(int i = 0; i<=(jmlHimpunanB-1); i++){
HimpunanB[i] = JOptionPane.showInputDialog(null, ""+
"Himpunan B yang ke "+(i+1)+"/"+jmlHimpunanB+" : ", "Fungsi", JOptionPane.QUESTION_MESSAGE);
}
}
public String cetakHimpunan(){
StringBuilder sbuff = new StringBuilder();
//fungsi append untuk menambahkan string ke dalam objek StringBuffer
sbuff.append("Anggota Himpunan A = { ");
for (int i = 0;i<=(jmlHimpunanA-1);i++){
sbuff.append(HimpunanA[i]).append(" ");
}
sbuff.append("} \n");
sbuff.append("Anggota Himpunan B = { ");
for (int i = 0;i<=(jmlHimpunanB-1);i++){
sbuff.append(HimpunanB[i]).append(" ");
}
sbuff.append("} \n");
//menconversi dan mengembalikan objek String
return sbuff.toString();
}
public void inputRelasi(){
int jmlRelasiMaks = jmlHimpunanA * jmlHimpunanB;
do{
String relasi = JOptionPane.showInputDialog(null, "Relasi maksimal adalah "+jmlRelasiMaks+ ""+
"\nMasukan Jumlah Relasi yang Terjadi : ", "Fungsi", JOptionPane.QUESTION_MESSAGE);
jmlRelasi = Integer.parseInt(relasi);
} while (jmlRelasi>jmlRelasiMaks);
HimpunanRelasi = new String[jmlRelasi];
HimpunanAsal = new String[jmlRelasi];
for(int i=0; i<=(jmlRelasi-1); i++){
String[] temp = new String[jmlRelasi]; //Menampung sementara inputan untuk daerah Asal
String[] temp2 = new String[jmlRelasi]; //Menampung sementara Inputan untuk daerah Tujuan
boolean SamaA = false; //Untuk menngecek apakah inputan untuk nilai Asal Ada di Himp A
boolean SamaB = false; //Untuk mengecek apakah inputan untuk nilai Tujuan Ada di Himp B
do{
temp[i] = JOptionPane.showInputDialog(null, cetakHimpunan()+"Relasi ke "+(i+1)+"/"+jmlRelasi+
"\nMasukkan Asal A : ", "Fungsi", JOptionPane.QUESTION_MESSAGE);
temp2[i] = JOptionPane.showInputDialog(null, cetakHimpunan()+"Relasi ke "+(i+1)+"/"+jmlRelasi+
"\nMasukkan Tujuan B : ", "Fungsi", JOptionPane.QUESTION_MESSAGE);
//cek apakah himpunan yang dimasukkan adalah anggota A
for (int j= 0; j<=(jmlHimpunanA-1);j++){
if(temp[i].equals(HimpunanA[j])){
SamaA=true;
}
}
//cek apakah himpunan yang dimasukkan adalah anggota B
for (int k= 0; k<=jmlHimpunanB-1;k++){
if(temp2[i].equals(HimpunanB[k])){
SamaB=true;
}
}
if(SamaA==false || SamaB==false){
JOptionPane.showMessageDialog(null, "Anggota Himpunan Tidak terdapat dihimpunan "+
"A atau B", "Fungsi", JOptionPane.ERROR_MESSAGE);
}
if(SamaA==true && SamaB==true){
HimpunanRelasi[i]=temp2[i];
HimpunanAsal[i]=temp[i];
}
//jika input yang dimasukkan tidak ada dalam anggota A maupun B
//maka perulangan dilakukan terus sampai input yang dimasukkan
//ada dalam anggota A dan B
}while(SamaA==false || SamaB==false);
}
}
public String cekFungsi(){
satu2 = false;
int jumlahAnggota = 0;
boolean adaSama = false;
StringBuilder tmp_buff = new StringBuilder();
for(int i =0;i<=(jmlHimpunanA-1);i++){
for(int j=0;j<=(jmlRelasi-1);j++){
if(HimpunanA[i].equals(HimpunanAsal[j])){
jumlahAnggota++;
}
}
}
for(int i = 0;i<=(jmlRelasi-1);i++){
for(int j=i+1;j<=(jmlRelasi-1);j++){
if(HimpunanAsal[i].equals(HimpunanAsal[j])){
adaSama=true;
}
}
}
if(jumlahAnggota==jmlHimpunanA && adaSama == false){
tmp_buff.append("Relasi yang diInput adalah Fungsi\n");
jumlahAnggota = 0;
for(int i =0;i<=(jmlHimpunanB-1);i++){
for(int j=0;j<=(jmlRelasi-1);j++){
if(HimpunanB[i].equals(HimpunanRelasi[j])){
jumlahAnggota++;
}
}
}
for(int i = 0;i<=(jmlRelasi-1);i++){
for(int j=i+1;j<=(jmlRelasi-1);j++){
if(HimpunanRelasi[i].equals(HimpunanRelasi[j])){
adaSama=true;
}
}
}
if(jumlahAnggota==jmlHimpunanB && adaSama == false){
tmp_buff.append("Fungsi Yang Diinput Adalah Fungsi satu-satu\n");
satu2= true;
}
return tmp_buff.toString();
}else {
return "Relasi yang di input Bukan Fungsi hanya relasi biasa\n";
}
}
public String cekInvers(){
StringBuilder strbuff = new StringBuilder();
if(satu2){
strbuff.append("Fungsi Inversnya Adalah : \n");
strbuff.append("Daerah Domain = { ");
for(int i=0;i<=jmlHimpunanA-1;i++){
strbuff.append(HimpunanB[i]).append(" ");
}
strbuff.append("}\n");
strbuff.append("Daerah Kodomain { ");
for(int i=0;i<=jmlHimpunanB-1;i++){
strbuff.append(HimpunanA[i]).append(" ");
}
strbuff.append("}\n");
strbuff.append("Daerah range adalah : { ");
for(int i= 0;i<= jmlRelasi-1;i++){
boolean adaSama=false;
for (int j = i+1;j<=jmlRelasi-1;j++){
if(HimpunanAsal[i].equals(HimpunanAsal[j]))
adaSama=true;
}
if(adaSama==false){strbuff.append(HimpunanAsal[i]).append(" ");}
}
strbuff.append("}\n");
}
return strbuff.toString();
}
public void cetakRelasi(){
StringBuilder strbuff = new StringBuilder();
strbuff.append("Daerah Domain : { ");
for(int i=0;i<=jmlHimpunanA-1;i++){
strbuff.append(HimpunanA[i]).append(" ");
}
strbuff.append("}\n");
strbuff.append("Daerah Kodomain : { ");
for(int i=0;i<=jmlHimpunanB-1;i++){
strbuff.append(HimpunanB[i]).append(" ");
}
strbuff.append("}\n");
strbuff.append("Daerah range adalah : { ");
for(int i= 0;i<= jmlRelasi-1;i++){
boolean adaSama=false;
for (int j = i+1;j<=jmlRelasi-1;j++){
if(HimpunanRelasi[i].equals(HimpunanRelasi[j])){
adaSama=true;
}
}
if(adaSama==false){strbuff.append(HimpunanRelasi[i]).append(" ");}
}
strbuff.append("}\n");
JOptionPane.showMessageDialog(null, strbuff.toString()+cekFungsi()+cekInvers()+
"", "Fungsi", JOptionPane.INFORMATION_MESSAGE);
}
public static void main(String args[]){
fungsi func = new fungsi();
func.inputAnggota();
func.inputRelasi();
func.cetakRelasi();
}
}