-
Notifications
You must be signed in to change notification settings - Fork 0
/
PL_ASSİNGMENT1_13011038.c~
135 lines (109 loc) · 4.38 KB
/
PL_ASSİNGMENT1_13011038.c~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*
KAAN ANT
13011038
PROGRAMMİNG LANGUAGE ASSİNGMENT 1
LİNUX x64
BU PROGRAM BİR YARIŞ PROGRAMI OLUP KULLANICIDAN ALINAN VERİLERE GÖRE BİR PARKURDA YARIŞ YAPILMASINI SAĞLAR
*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
// passArea Output fonksiyonu olup yarış durumunu ekrana bastırır
int passArea(char areaMtr[10][100],int racerNum,int areaSize,char siralama[]);
// raceTour işlemlerin yapıldığı yarışçıların her tur ilerletildigi fonksiyondur.
int raceTour(int racerNum,int areaSize,char areaMtr[10][100],int waitingTime,char siralama[]);
int main(){
// racerNum yarışcı sayısını tutar 5 olarak atanmış ancak kullanıcı tarafından degistirilebilir
int racerNum=5;
// areaSize parkur boyutunu tutar 50 olarak atanmış ancak kullanıcı tarafından degistirilebilir
int areaSize=50;
// areaMtr verileri tutmak ve ekrana bastırmada kolaylık saglamak için kullanılan matris
char areaMtr[10][100];
// waitingTime kullanıcının bir sonraki adıma geçmek için belirleyecegi bekleme süresi
int waitingTime=1;
// menuCont ekrana bastırılan menuyu kontrol etmek için kullanılan degisken
int menuCont=5,i,j;
// siralama dizisi yarış sonuclarının tutulacagı dizi
char siralama[]={' ',' ',' ',' ',' ',' ',' ',' '};
srand(time(NULL));
for(i=0;i<10;i++){
for(j=0;j<100;j++){
areaMtr[i][j]='_'; // parkuru oluşturmak için önce areaMtr matrisinin tüm elemanları '_' olarak atanır
}
}
do{
printf("----MENU----\n");
printf("0-Yarisi Baslatmak icin basiniz\n");
printf("1-Yarisci sayisini girmek icin basiniz\n");
printf("2-Parkur uzunlugunu girmek icin basiniz\n"); //Menu oluşturulur.
printf("3-Bekleme süresini girmek icin basiniz\n\n");
scanf("%d",&menuCont);
if (menuCont==1){
printf("Yarisci sayisini giriniz:");
scanf("%d",&racerNum);
}
else if (menuCont==2){
printf("\nParkur uzunlugunu giriniz:");
scanf("%d",&areaSize);
}
else if (menuCont==3){
printf("\nBekleme suresini giriniz:");
scanf("%d",&waitingTime);
}
else{}
}while(menuCont!=0); // Kullanıcı istedigi verileri degistirebilir 0 komutu ile yarış baslatılır
for(i=0;i<racerNum;i++){
areaMtr[i][0]='A'+i; // areaMtr matrisinin her satırının ilk elemanı yarışcı adı olarak atanır.
}
raceTour(racerNum,areaSize,areaMtr,waitingTime,siralama);
return 0;
}
int raceTour(int racerNum,int areaSize,char areaMtr[10][100],int waitingTime,char siralama[]){
int i,j,counter;
// lastSit dizisi yarışmacıların bir önceki turda nerede bulundugunu kaydeder
int lastSit[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int sira=0;
int tmp=0;
int find=0;
do{
for(i=0;i<racerNum;i++){ // bu for döngüsü ile her turda tüm yarışmacıların ilerlemesi saglanır
tmp=0;
find=0;
do{
if(siralama[tmp]=='A'+i) // if ile bu yarışmacı daha önceden yarışı 1. olarak bitirmiş mi diye kontrol //edilir
find=1;
else
tmp=tmp+1; // bitirmiş ise find degiskeni 1 atanarak while döngüsünden cıkılır
}while(find==0 && tmp!=racerNum); // bitirmemiş ise tmp arttırılarak diger sıralamalarda bitirmiş mi diye bakılır
if(tmp==racerNum){ // Yarışmacının while döngüsünden tmp degiskeni ile çıkmışsa yarışmacı ilerletilir
areaMtr[i][lastSit[i]]='_';
int speed=1+rand()%5; // speed degiskeni random atanarak yarışmacının ne // kadar ilerleyecegi belirlenir
int move=lastSit[i]+speed; // lastSit dizisine speed degiskeni eklenerek yarışmacının yeni konumu bulunur
areaMtr[i][move]='A'+i;
lastSit[i]=move;
if (lastSit[i]>=areaSize){ // Bu if yarışmacının bu turda yarışı bitirip bitirmedigini kontrol eder
areaMtr[i][areaSize-1]='A'+i;
siralama[sira]='A'+i;
sira=sira+1;
}
}
}
passArea(areaMtr,racerNum,areaSize,siralama);
sleep(waitingTime);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
}while(sira<racerNum); //eger tum yarışmacılar yarışı bitirdi ise while dongusunden cıkılarak program //sonlanır
passArea(areaMtr,racerNum,areaSize,siralama);
}
int passArea(char areaMtr[10][100],int racerNum,int areaSize,char siralama[]){
int i,j;
for(i=0;i<racerNum;i++){
for(j=0;j<areaSize;j++){
printf("%c",areaMtr[i][j]);
}
printf("\n");
}
for(i=0;i<racerNum;i++){
printf("\n%d .= %c\n",i+1,siralama[i]);
}
}