Membuat Soal dengan thread pada Linux dengan Bahasa C
Dalam linux kita dapat membuat soal atau semacam quiz dengan menampilkan soal - soal yang diberikan waktu setiap pengerjaan soal tersebut. Apabila batas waktu telah selesai maka secara otomatis soal tersebut akan berpindah. Pada akhir setelah menjawab soal terakhir, kita dapat melihat hasil dari quiz tersebut dengan ditampilkan secara otomatis. Dalam membuat soal tersebut dapat dibuat dengan menggunakan thread dengan menggunakan bahasa c.
Contoh soalnya sebagai berikut;
4
5 b
Berapakah 1 menit dalam detik?
a.30
b.60
c.15
d.25
*
4c
Hewan yang bukan berkaki empat?
a.Kucing
b.Anjing
c.Ayam
d. Sapi
*
6a
Ibukota Indonesia?
a.Jakarta
b.Jambi
c.Maluku
d.Surabaya
*
3d
4 + 4 =
a.2
b.4
c.6
d.8
*
Untuk kode dalam C nya sebagai berikut;
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
int wak[10],nos[10];
char jaw[10];
char soal[10][255];
int flag[10];
pthread_t thread1, thread2;
FILE *rit, *krit, *krit2;
char jabt;
int noso=1;
int nilai=0, count;
void *input(int *no)
{
int a = *( (int *) no);
system("clear");
printf("%d. %s",noso, soal[a]);
printf("Jawab : ");
scanf("%c", &jabt);
getchar();
pthread_cancel(thread1);
}
void *waktu(int *no)
{
int a = *( (int *) no);
while(wak[a]>0)
{
count++;
sleep(1);
if(count==wak[a])
{
pthread_cancel(thread2);
pthread_cancel(thread1);
}
}
}
void cek(int no)
{
if (jabt==jaw[no])
{
fprintf(krit,"%d %c benar - waktu : %d\n", no+1, jabt, count);
nilai+=10;
}
else
fprintf(krit,"%d %c salah - waktu : %d\n", no+1, jabt, count);
}
int main()
{
krit=fopen("/home/wicakson/Documents/shift3/hasil.txt","w+");
rit=fopen("/home/wicakson/Documents/shift3/soal.txt","r");
int no=0, jumlah, i;
fscanf(rit, "%d", &jumlah);
for(no=0;no<jumlah;no++)
{
flag[no]=0;
fscanf(rit,"%d", &wak[no]);
fgetc(rit);
fscanf(rit,"%c", &jaw[no]);
fgetc(rit);
i=0;
fscanf(rit, "%c", &soal[no][i]);
while(soal[no][i]!='*')
{
i++;
fscanf(rit, "%c", &soal[no][i]);
}
soal[no][i]='\n';
}
for(no=0;no<jumlah;no++) puts(soal[no]);
int sek, k=jumlah;
while (k)
{
srand(time(NULL));
sek = rand() % jumlah ;
if(flag[sek]==0)
{
count=0;
pthread_create(&thread2, NULL, (void *) &input, (void *) &sek);
pthread_create(&thread1, NULL, (void *) &waktu, (void *) &sek);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
cek(sek);
pthread_cancel(thread1);
k--;
noso++;
flag[sek]= 1;
}
jabt='\0';
}
fprintf(krit,"\nNilai Anda: %d\n",nilai);
char str[255];
sprintf(str, "zenity --info --title=\"Selamat\" --text=\"Nilai Anda: %d\"", nilai);
system(str);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
int wak[10],nos[10];
char jaw[10];
char soal[10][255];
int flag[10];
pthread_t thread1, thread2;
FILE *rit, *krit, *krit2;
char jabt;
int noso=1;
int nilai=0, count;
void *input(int *no)
{
int a = *( (int *) no);
system("clear");
printf("%d. %s",noso, soal[a]);
printf("Jawab : ");
scanf("%c", &jabt);
getchar();
pthread_cancel(thread1);
}
void *waktu(int *no)
{
int a = *( (int *) no);
while(wak[a]>0)
{
count++;
sleep(1);
if(count==wak[a])
{
pthread_cancel(thread2);
pthread_cancel(thread1);
}
}
}
void cek(int no)
{
if (jabt==jaw[no])
{
fprintf(krit,"%d %c benar - waktu : %d\n", no+1, jabt, count);
nilai+=10;
}
else
fprintf(krit,"%d %c salah - waktu : %d\n", no+1, jabt, count);
}
int main()
{
krit=fopen("/home/wicakson/Documents/shift3/hasil.txt","w+");
rit=fopen("/home/wicakson/Documents/shift3/soal.txt","r");
int no=0, jumlah, i;
fscanf(rit, "%d", &jumlah);
for(no=0;no<jumlah;no++)
{
flag[no]=0;
fscanf(rit,"%d", &wak[no]);
fgetc(rit);
fscanf(rit,"%c", &jaw[no]);
fgetc(rit);
i=0;
fscanf(rit, "%c", &soal[no][i]);
while(soal[no][i]!='*')
{
i++;
fscanf(rit, "%c", &soal[no][i]);
}
soal[no][i]='\n';
}
for(no=0;no<jumlah;no++) puts(soal[no]);
int sek, k=jumlah;
while (k)
{
srand(time(NULL));
sek = rand() % jumlah ;
if(flag[sek]==0)
{
count=0;
pthread_create(&thread2, NULL, (void *) &input, (void *) &sek);
pthread_create(&thread1, NULL, (void *) &waktu, (void *) &sek);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
cek(sek);
pthread_cancel(thread1);
k--;
noso++;
flag[sek]= 1;
}
jabt='\0';
}
fprintf(krit,"\nNilai Anda: %d\n",nilai);
char str[255];
sprintf(str, "zenity --info --title=\"Selamat\" --text=\"Nilai Anda: %d\"", nilai);
system(str);
return 0;
}
Tidak ada komentar:
Posting Komentar