Пример #1
0
/*  F.S. X menjadi elemen Q sesuai prioritas Pr,
Q tetap terurut mengecil sesuai prioritas  */
void AddPQ (PQueue *Q, infotype X, int Pr)
{
	addressPQ P=Head(*Q);
	addressPQ temp;
	AlokasiPQ(&temp,X);
	bool cek;
	//tuliskata(X.email);
	//printf(" 0\n");
	if (temp!=NULL)
	{
		Prio(temp)=Pr;
		if (IsEmptyPQ(*Q))
		{
			Head(*Q)=temp;
			Next(temp)=NilPQ;
		}
		else
		{
			cek=(bandingkata(Info(P).email,Info(temp).email));
			if (cek)
			{
				if (Prio(P)<Pr)
				{
					Next(temp)=P;
					Head(*Q)=temp;
				}
				else
				{
					while (((Next(P)!=NilPQ)&&(Prio(Next(P))>=Pr))&&(cek))
					{
						P=Next(P);
						cek=(bandingkata(Info(P).email,Info(temp).email));
					}
					if (cek)
					{
						if (Next(P)!=NilPQ)
						{
							Next(temp)=Next(P);
							Next(P)=temp;
						}
						else
						{
							Next(P)=temp;
						}
					}
				}
			}
		}
	}
}
Пример #2
0
/***** Primitif Add/Delete *****/
void AddPrio (Queue *Q, infotype X, int Pr)
/* Proses : Mengalokasi X dan menambahkan X pada bagian TAIL dari Q jika alokasi
berhasil dengan memperhatikan prioritas; jika alokasi gagal Q tetap */
/* I.S. Q mungkin kosong, X terdefinisi */
/* F.S. X menjadi elemen Q sesuai prioritas Pr,
Q tetap terurut mengecil sesuai prioritas */
{ /* Kamus Lokal */
	address P,Pt,Prec;
	boolean found;
/* Algoritma */
	Alokasi(&Pt,X,Pr);	
	if(Pt!=Nil) {
		P=Head(*Q);
		Prec=Nil;
		found=false;
		while ( P!=Nil && !(found) ) {
			if(Prio(P)<Pr) { 
				found=true;
			}
			//prio dengan angka terkecil memiliki prioritas paling kecil
			else {
				Prec=P;
				P=Next(P);
			}
		}
		if(Prec==Nil) {
			Next(Pt)=Head(*Q);
			Head(*Q)=Pt;
		}
		else {
			Next(Pt)=Next(Prec);
			Next(Prec)=Pt;
		}
	}	
}
Пример #3
0
void DelPQ (PQueue *Q, infotype *X, int *Pr)
{
	addressPQ P=Head(*Q);
	*Pr=Prio(P);
	*X=Info(P);
	Head(*Q)=Next(P);
	DealokasiPQ(&P);
}
Пример #4
0
void DelPrio (Queue *Q, infotype *X, int *Pr)
/* Proses : Menghapus X pada bagian HEAD dari Q dan mendealokasi elemen HEAD,
X berisi elemen dengan prioritas tertinggi */
/* I.S. Q tidak kosong */
/* F.S. X = nilai elemen HEAD dan Pr = nilai elemen prioritas HEAD pd I.S.,
HEAD "maju" */
{ /* Kamus Lokal */
	address Pt;
/* Algoritma */
	Pt=Head(*Q);
	*X=InfoHead(*Q);
	*Pr=Prio(Pt);
	Head(*Q)=Next(Pt);
	Next(Pt)=Nil;
	Dealokasi(Pt);
}
Пример #5
0
/**** Prototype manajemen memori ****/
void Alokasi (address *P, infotype X, int Pr)
/* I.S. P sembarang, X terdefinisi */
/* F.S. Alamat P dialokasi, jika berhasil maka Info(P) = X dan Next(P) = Nil */
/* P = Nil jika alokasi gagal */
{/* Kamus Lokal */
/* Algoritma */
	//Algortima
	*P = (address)malloc(sizeof(ElmtQ));
	if (P != Nil) {
		Info(*P) = X;
		Next(*P) = Nil;
		Prio(*P)=Pr;
	}
	else 
		P = Nil;
}
Пример #6
0
void  jg_prec_term(const char* term_name)
{
  jacc_term* term = current.grammar->term_by_name(term_name);
  if (!term->prio.is_null()) {
    jg_errorf("Precedence redefinition for `%s' (skipping)",
              term->name.c_str());
    return;
  }
  if (term->tnt == TNT_NONTERMINAL) {
    jg_errorf("Precedence definition for nonterminal `%s' (skipping)",
              term->name.c_str());
    return;
  }
  else {
    term->tnt = TNT_TERMINAL;
  }
  term->prio = Prio(current.prec, current.assoc);
}
Пример #7
0
void AddPQ2 (PQueue *Q, infotype X, int Pr, int parameter, int gt)
{
	addressPQ P=Head(*Q),Qu=NilPQ;
	addressPQ temp;
	AlokasiPQ(&temp,X);
	bool cek,cek2,cek3,cek4;
	parameter++;
	//printf("%d",parameter);
	if (gt==0)
	{
		gt=-1;
	}
	gt*=-1;
	
	if (temp!=NULL)
	{
		Prio(temp)=Pr;
		if (IsEmptyPQ(*Q))
		{
			Head(*Q)=temp;
			Next(temp)=NilPQ;
		}
		else
		{
			cek=(bandingkata(Info(P).email,Info(temp).email));
			if (cek)
			{
				if (Prio(P)<Pr)
				{
					Next(temp)=P;
					Head(*Q)=temp;
				}
				else
				{
					cek4=(bandingkata(Info(temp).email,Info(P).email)==gt);
					switch (parameter)
					{
						case 1:
							{
								cek2=(bandingkata(Info(temp).email,Info(P).email)==gt);
								cek3=(bandingkata(Info(temp).email,Info(P).email)==0);
								break;
							}
						case 2:
							{
								cek2=(bandingkata(Info(temp).nama,Info(P).nama)==gt);
								cek3=(bandingkata(Info(temp).nama,Info(P).nama)==0);
								break;
							}
						case 3:
							{
								cek2=(bandingtanggal(Info(temp).tgllahir,Info(P).tgllahir)==gt);
								cek3=(bandingtanggal(Info(temp).tgllahir,Info(P).tgllahir)==0);
								break;
							}
						case 4:
							{
								cek2=(bandingkata(Info(temp).kotaasal,Info(P).kotaasal)==gt);
								cek3=(bandingkata(Info(temp).kotaasal,Info(P).kotaasal)==0);
								break;
							}
						case 5:
							{
								cek2=(bandingkata(Info(temp).universitas,Info(P).universitas)==gt);
								cek3=(bandingkata(Info(temp).universitas,Info(P).universitas)==0);
								break;
							}
						case 6:
							{
								cek2=(bandingkata(Info(temp).smu,Info(P).smu)==gt);
								cek3=(bandingkata(Info(temp).smu,Info(P).smu)==0);
								break;
							}
						default:
							{
								break;
							}
					}
					while ((((cek3)&&(cek4))||(cek2))&&((Next(P)!=NilPQ)&&(cek)))
					{
						Qu=P;
						P=Next(P);
						cek=(bandingkata(Info(P).email,Info(temp).email));
						cek4=(bandingkata(Info(temp).email,Info(P).email)==gt);
						switch (parameter)
						{
							case 1:
								{
									cek2=(bandingkata(Info(temp).email,Info(P).email)==gt);
									cek3=(bandingkata(Info(temp).email,Info(P).email)==0);
									break;
								}
							case 2:
								{
									cek2=(bandingkata(Info(temp).nama,Info(P).nama)==gt);
									cek3=(bandingkata(Info(temp).nama,Info(P).nama)==0);
									break;
								}
							case 3:
								{
									cek2=(bandingtanggal(Info(temp).tgllahir,Info(P).tgllahir)==gt);
									cek3=(bandingtanggal(Info(temp).tgllahir,Info(P).tgllahir)==0);
									break;
								}
							case 4:
								{
									cek2=(bandingkata(Info(temp).kotaasal,Info(P).kotaasal)==gt);
									cek3=(bandingkata(Info(temp).kotaasal,Info(P).kotaasal)==0);
									break;
								}
							case 5:
								{
									cek2=(bandingkata(Info(temp).universitas,Info(P).universitas)==gt);
									cek3=(bandingkata(Info(temp).universitas,Info(P).universitas)==0);
									break;
								}
							case 6:
								{
									cek2=(bandingkata(Info(temp).smu,Info(P).smu)==gt);
									cek3=(bandingkata(Info(temp).smu,Info(P).smu)==0);
									break;
								}
							default:
								{
									break;
								}
						}
					}
					// tuliskata(Info(P).email);
					// printf(" %d %d\n",cek2,cek3);
					// tuliskata(Info(temp).email);
					// printf("\n");
					if (cek)
					{
						if (((!cek2)&&(!cek3))&&(P==Head(*Q)))
						{
							Head(*Q)=temp;
							Next(temp)=P;
						}
						else if ((!cek2)&&(!cek3))
						{
							Next(temp)=P;
							Next(Qu)=temp;
						}
						else
						{
							//printf("%d",gt);
							Next(temp)=Next(P);
							Next(P)=temp;
						}
					}
				}
			}
		}
	}
}
Пример #8
0
int main()
{
	LoadDict(&M);
    	system("clear");
    	printf("%s=====================================================================\n", cyan);
    	printf(" _       ______  ____  ____  ___    __  __________   ________   ____ \n");
    	printf("| |     / / __ \\/ __ \\/ __ \\/   |  /  |/  / ____/ | / /_  __/  / __ \\ \n");
    	printf("| | /| / / / / / /_/ / / / / /| | / /|_/ / __/ /  |/ / / /    / / / /\n");
    	printf("| |/ |/ / /_/ / _ _ / /_/ / ___ |/ /  / / /___/ /|  / / /    / /_/ / \n");
    	printf("|__/|__/\\____/_/ |_/_____/_/  |_/_/  /_/_____/_/ |_/ /_/     \\____/  \n\n");
    	printf("=====================================================================\n\n\n");
    	printf("                      %sPress any key to continue%s\n",magenta,normal);
    	getch();
   	while(opt1 != 5)  //OPT1 = 5 adalah QUIT
	{
        MainMenu(&opt1);       // MENAMPILKAN MAIN MENU
        switch(opt1)
        {
            case 1 : 	// REGISTER
                printf("%sEnter user name : ", cyan);

                do
                {
                    found = false;	// INISIALISASI YANG MENANDAKAN USER BELUM DITEMUKAN DI FILE EKSTERNAL
                    scanf("%s", username.TabKata);
                    username.Length = strlen(username.TabKata); 
                    if(strlen(username.TabKata) >= 20 || !(IsAlNumS(username))) // MENGECEK APAKAH LEBIH DARI 20 ATAU ALFANUMERIK
                        printf("Username must be alphanumeric / less or equal to 20 characters\n");
                    else
                    {
                        *x = "scores/List Users & Highscores 2.txt";
                        STARTKATA();
                        while(!EndKata && !found)
                            CheckUser(username,&id,&found);

                        if(found)
                            printf("Sorry, that username already exists\n");
                    }
                }while((strlen(username.TabKata) >= 20 || !(IsAlNumS(username))) || found);
		
                SalinFile(LU,username);
                printf("Congratulations! %s has been successfully registered\n",username.TabKata);
                printf("\n");
                printf("%sPress any key to continue%s\n", magenta,cyan);
                dummygetch = getch();
		dummygetch = getch();
                break;

            case 2 :	//LOGIN			
                CreateList(&LU);
                printf("\n");
                *x = "scores/List Users & Highscores 2.txt";
                STARTKATA();
                while(!(EndKata))
                    InitUser(&LU,&id);	// MEMASUKKAN DATA FILE EKSTERNAL KE DALAM LIST
                InversListU(&LU);
                ListUsersLengkap(LU);	// MENAMPILKAN LIST USER
                found1 = false;		// INISIALISASI YANG MENANDAKAN USERNAME TIDAK DITEMUKAN
                while(!found1)
                {
                    printf("=====================================================================\n");
                    printf("Enter username : "******"%s",username1.TabKata);
                    username1.Length = strlen(username1.TabKata);
                    STARTKATA();
                    while(!EndKata && !found1)
                        CheckUser(username1,&id,&found1);

                    if(!found1)
                        printf("%s not found. Try again\n",username1.TabKata);
                }

                SelectB = true;	// INISIALISASI AGAR SETELAH MEMILIH BOARD, MELIHAT SCORE TIDAK KELUAR KE MAIN MENU, MELAINKAN PREP MENU
                selectT = false;	// INISIALISASI YANG MENANDAKAN USER BELUM PILIH BOARD
                
                while(SelectB == true)
                {
		    if(selectT == false)
			kode = 1;

                    PrepMenu(&opt2, username1);	// PREPARATION MENU
                    switch(opt2)
                    {
                        case 1 :	// PLAY GAME
                            if(selectT == false) 
			    {
                                kode = 1;
                                *y = "boards/1.txt";
                            }
                            baris = 1;
                            kolom = 1;
                            T = false;
                            used = false;
                            score = 0;
                            CreateEmptyQ(&QFinish);
                            CreateEmpty(&S);
							CreateListSU(&LSG);
							CreateListSU(&LSGTemp);
							
							ReadSuggestion(&LSG, kode);
							strcpy(tempsugg, username1.TabKata);
							PSU = FirstSU(LSG);
							usersuggfound = false;
							while (PSU != Nil) {
								if (strcmp(InfoSU(PSU), tempsugg) == 0) {
									usersuggfound =  true;
									break;
								}
								else {
									PSU = NextSU(PSU);
								}
							}
							if (!usersuggfound) {
								InsVSUFirst(&LSG, tempsugg);
								PSU = FirstSU(LSG);
							}
							InsVSUFirst(&LSGTemp, tempsugg);
							PSE = FirstSE(PSU);
							if (PSE != Nil) 
								strcpy(tempsugg, InfoSE(PSE));
							else {
								tempsugg[0] = ' ';
								tempsugg[1] = '\0';
							}
							CreateListSet(&LS);
                            CreateBoard(&B);
                            AmbilBoard(&B);
                            InitKursor(&B);
                            InitSelect(&B, &S);
                            system("clear");
                            printf("Score = %d\n\n", score);
                            printf("Suggestion = %s\n\n", InfoSE(PSE));
                            TulisBoard(B);
                            printf("\n\n");
                            dummygetch = getch();
                            input = getch();
                            printf("\n");
                            while (input != 'm')
                            {
                                system("clear");
                                ProsesKursor(&B, &baris, &kolom, &T, input, &error);
                                Select(&B, baris, kolom, T, &S, &score, &LS, &QFinish, &used, &LSG, &LSGTemp, &M, PSU);
                                printf("Score = %d\n\n", score);
                                PSE = FirstSE(PSU);
                                printf("Suggestion = %s\n\n", InfoSE(PSE));
                                TulisBoard(B);
                                printf("\n");
                                if (used)
									printf("Invalid Word\n");
								else
									printf("\n");
                                if (error)
                                    printf("error\n");
                                else
                                    printf("\n");
                                input = getch();
                                printf("\n");
                                error = false;
                                used = false;
                            }
                            time(&rawtime);	//INISIALISASI WAKTU
			    t = localtime(&rawtime);
			    D.YY = (*t).tm_year+1900;
			    D.MM = (*t).tm_mon+1;
			    D.DD = (*t).tm_mday;
		            J.HH = (*t).tm_hour;
		  	    J.MM = (*t).tm_min;
			    J.SS = (*t).tm_sec;
                            InsSortScoreU (&LU,D,J,score,username1);	//INSERT SCORE KE LIST SCORE
                            SalinInto(LU, kode);	// MENYALIN KE FILE EKSTERNAL
                            SelectB = false;
                            system("clear");
                            addressQ PQ;
                            PQ = Head(QFinish);
                            while (PQ != Nil) 
			    {
			    	PrintSet(InfoQ(PQ));
				printf("\n");
				PQ = NextQ(PQ);
		       	    }
				printf("Total Score = %d\n", score);
							PSU = FirstSU(LSG);
							PSE = FirstSE(PSU);
							PSUT = FirstSU(LSGTemp);
							while (PSUT != Nil) {
								PSET = FirstSE(PSUT);
								while (PSET != Nil) {
									InsVSEFirst(&LSG, PSU, InfoSE(PSET));
									PSET = NextSE(PSET);
								}
								PSUT = NextSU(PSUT);
							}
							WriteSuggestion(LSG, kode);
							printf("Press any key to continue\n");
							dummygetch = getch();
			    getch();
                            break;

                        case 2 :	//SELECT BOARD
                            PilihBoard(&selectT, &kode);
		            CreateList(&LU);
			    STARTKATA();
                            while(!(EndKata))
                    	       InitUser(&LU,&id);	// MEMASUKKAN DATA FILE EKSTERNAL KE DALAM LIST
                	    InversListU(&LU);
                            SelectB = true;
                            break;

                        case 3 :	//VIEW MY HIGH SCORES
			    ViewMyHighScores(LU,username1);
			    printf("%sPress any key to continue%s\n", magenta,cyan);
			    dummygetch = getch();
			    dummygetch = getch();
                            SelectB = true;
  			    break;

                        case 4 :	//VIEW ALL HIGH SCORES	
			    ViewAllHighScores(LU);
	              	    printf("%sPress any key to continue%s\n", magenta,cyan);
			    dummygetch = getch();
			    dummygetch = getch();
                            SelectB = true;
                            break;

                        case 5 :	//VIEW BOARD STATISTICS	
 				CreateEmptyQS(&QS);
                            	countuser = 0;
				countscore = 0;
				sumscore = 0;
				PU = FirstU(LU);
				while (PU != Nil)
				{
					PS = FirstS(PU);
					if((InfoD(PS)).YY != 0)
					{
						countuser += 1;
					}	
					while(PS != Nil)
					{
						if((InfoD(PS)).YY != 0)
						{
							countscore += 1;
							sumscore += InfoS(PS);
						}	
						PS = NextS(PS);	
					}
					PU = NextU(PU); 	
				}
				//CreateList(&LU);
				averagescore = sumscore/countscore;
				printf("%.0f user/s have played in board %d\n",countuser,kode);
				if(countscore == 0)
					averagescore = 0;
				printf("The average score in board %d is %.2f\n",kode,averagescore);
				AddQS(&QS,kode,averagescore);
				for(i=0; i<=9;i++)
				{
					switch(i)
					{
						case 0 : *x = "scores/List Users & Highscores 1.txt"; break;
						case 1 : *x = "scores/List Users & Highscores 2.txt"; break;
						case 2 : *x = "scores/List Users & Highscores 3.txt"; break;
						case 3 : *x = "scores/List Users & Highscores 4.txt"; break;
						case 4 : *x = "scores/List Users & Highscores 5.txt"; break;
						case 5 : *x = "scores/List Users & Highscores 6.txt"; break;
						case 6 : *x = "scores/List Users & Highscores 7.txt"; break;
						case 7 : *x = "scores/List Users & Highscores 8.txt"; break;
						case 8 : *x = "scores/List Users & Highscores 9.txt"; break;
						case 9 : *x = "scores/List Users & Highscores 10.txt"; break;
					}
					if(i != kode)
					{
						CreateList(&LP);
						STARTKATA();
						while(!EndKata)
							InitUser(&LP,&id);
					
						InversListU(&LP);
						sumscore = 0;
						countscore = 0;
						PX = FirstU(LP);
						while (PX != Nil)
						{
							PZ = FirstS(PX);	
							while(PZ != Nil)
							{
								if((InfoD(PZ)).YY != 0)
								{
									countscore += 1;
									sumscore += InfoS(PZ);
								}	
								PZ = NextS(PZ);	
							}
							PX = NextU(PX); 	
						}
						if (countscore == 0)
							averagescore = 0;
						else
							averagescore = sumscore/countscore;
						AddQS(&QS, i, averagescore);
					}
							
				}
				PX = FirstU(LP);
				DealokasiU(&PX);
				PZ = FirstS(PX);
				DealokasiS(&PZ);
				P = Head(QS);
				printf("Difficulty Level of Boards : \n");
				for(i=1;i<=10;i++)
				{						
					printf("%d. Board no.%d with average user scores of %.2f\n",i,InfoQ(P),Prio(P));
					P = NextQ(P);
					if (P == Nil)
					{
						break;
					}
				}
			    printf("%sPress any key to continue%s\n", magenta,cyan);
           		    dummygetch = getch();
		  	    dummygetch = getch();
			    SelectB = true;
			    break;

                        case 6 :	// LOG OUT
                            SelectB = false;
                            break;
                    }
                if(SelectB == false)
                    break;
                }
		break;
            case 3 :	// HOW TO PLAY
		HowToPlay();
                break;
            case 4 :	// ABOUT
                About();
                break;
        }
	}
	printf("%s\n", normal); //MENGGANTI WARNA TEXT TERMINAL KE AWAL
	
	return 0;
}
Пример #9
0
bool CEC_Category_Tag::Create()
{
	Category_Struct * category = NULL;
	bool ret = theApp->glob_prefs->CreateCategory(category, Name(), CPath(Path()), Comment(), Color(), Prio());
	if (!ret) {
		GetTagByName(EC_TAG_CATEGORY_PATH)->SetStringData(theApp->glob_prefs->GetCatPath(
			theApp->glob_prefs->GetCatCount() - 1).GetRaw());
	}
	return ret;
}
Пример #10
0
bool CEC_Category_Tag::Apply()
{
	bool ret = theApp->glob_prefs->UpdateCategory(GetInt(), Name(), CPath(Path()), Comment(), Color(), Prio());
	if (!ret) {
		GetTagByName(EC_TAG_CATEGORY_PATH)->SetStringData(theApp->glob_prefs->GetCatPath(GetInt()).GetRaw());
	}
	return ret;
}