Advertisement
Guest User

Untitled

a guest
Dec 9th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.17 KB | None | 0 0
  1.  
  2. #include <math.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6. #include <stdbool.h>
  7.  
  8.  
  9. typedef struct kerdesegyseg {
  10. int kerdesazon;
  11. char kerdes[300];
  12. char valasz;
  13. char cim[4][300]; //téma
  14.  
  15. int valszama; //válaszok száma
  16. char v[6][300]; //válaszok, max 6db rendre a-tól max f-ig
  17. int betuszam; //sorrendmegadós esetén a betûk száma
  18. char magyarazat[300];
  19. char kep[100];
  20. struct kerdesegyseg *kov; //válaszok száma
  21. } kerdesegyseg;
  22.  
  23.  
  24. kerdesegyseg *elemolvas(FILE *fp) {
  25. kerdesegyseg *egyseg = (kerdesegyseg*) malloc(sizeof(kerdesegyseg));
  26. char a = 'z'; //egy nem '\t' kezdõérték az a-nak
  27. int i = 0;
  28. int j = 0;
  29.  
  30. int end;
  31. end = fscanf(fp, "%d", &egyseg->kerdesazon);
  32. if (end == EOF)
  33. return NULL;
  34.  
  35.  
  36. fscanf(fp, "%c", &a);
  37. while (a == '\t')
  38. fscanf(fp, "%c", &a); //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
  39.  
  40. i=0;
  41. while (a != '\t') {
  42. egyseg->kerdes[i] = a; //mivel az elõzõ ciklusban!'\t'-ig mentünk, az a-ban monst pont a nekünk kellõ karakter van
  43. fscanf(fp, "%c", &a);
  44. i++;
  45. }
  46. egyseg->kerdes[i] = '\0';
  47.  
  48. while (a == '\t')
  49. fscanf(fp, "%c", &a); //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
  50.  
  51. while (a != '\t') {
  52. egyseg->valasz = a; //mivel az elõzõ ciklusban!'\t'-ig mentünk, az a-ban monst pont a nekünk kellõ karakter van
  53. fscanf(fp, "%c", &a); // !!! Nem szabad elfogadni 1-nél több karaktert (whitelist: a,b,c,d?, ...?)
  54. }
  55. if(egyseg->valasz=='x'){
  56.  
  57. fscanf(fp, "%d", &i); //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
  58.  
  59. fscanf(fp, "%d", &i);
  60. egyseg->betuszam=i;
  61. while(a=='\t'){fscanf(fp,"%c", &a);
  62. }
  63. i=0;
  64. while(a!='\t'){
  65. egyseg->v[0][i]=a;
  66. i++;
  67. fscanf(fp,"%c", &a);
  68. } egyseg->v[0][i]='\0';
  69. j=0;
  70. while(i>=0){
  71. egyseg->v[1][j]=egyseg->v[0][i-1];
  72. i--;
  73. j++;
  74. }
  75. egyseg->v[0][j]='\0';
  76. while(a=='\t'){
  77. fscanf(fp, "%c", &a);}
  78. j = 0; //címek
  79. while(j<4){ //beolva-
  80. i=0; //sása
  81. while (a != '\t') {
  82. egyseg->cim[j][i] = a;
  83. fscanf(fp, "%c", &a);
  84. i++;
  85. }
  86. egyseg->cim[j][i] = '\0';
  87. fscanf(fp, "%c", &a);
  88.  
  89. j++;
  90. }
  91. while(a=='\t'){
  92. fscanf(fp, "%c", &a);
  93. }
  94. i=0;
  95. while(a!='\t' && a!='\n'){
  96. egyseg->magyarazat[i]=a;
  97. fscanf(fp, "%c", &a);
  98. i++;
  99. }
  100. egyseg->magyarazat[i]='\0';
  101. egyseg->kov = NULL;
  102. return egyseg;
  103.  
  104. }else{
  105.  
  106. while (a == '\t')
  107. fscanf(fp, "%c", &a); //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
  108.  
  109. j = 0; //címek
  110. while(j<4){ //beolva-
  111. i=0; //sása
  112. while (a != '\t') {
  113. egyseg->cim[j][i] = a;
  114. fscanf(fp, "%c", &a);
  115. i++;
  116. }
  117. egyseg->cim[j][i] = '\0';
  118. fscanf(fp, "%c", &a);
  119.  
  120. j++;
  121. }
  122.  
  123.  
  124.  
  125.  
  126. egyseg->valszama = 0; //válaszok beolvasása
  127. while (a != '\n' && end != EOF) {
  128. j = 0;
  129. while (a != '\t' && a != '\n' && end != EOF) {
  130. egyseg->v[egyseg->valszama][j] = a;
  131. end = fscanf(fp, "%c", &a);
  132. j++;
  133. }
  134. if(j>0){egyseg->v[egyseg->valszama][j] = '\0';
  135. }
  136. if((a != '\t' || j>0) && a!='\n'){
  137. egyseg->valszama++;
  138. }
  139. if (a != '\n')
  140. end = fscanf(fp, "%c", &a);
  141.  
  142. }
  143. i=j; //megjegyezzük hány karakterből áll az utolsó válasz
  144. for(j=0;j<i+1;j++){
  145. egyseg->magyarazat[j]=egyseg->v[egyseg->valszama][j];
  146. }
  147.  
  148. }
  149. egyseg->kov = NULL;
  150. //printf("%d \n",egyseg->kerdesazon);
  151. return egyseg;
  152. }
  153.  
  154. kerdesegyseg *adatbetolt(FILE * fp) {
  155. kerdesegyseg* eleje = NULL;
  156. kerdesegyseg* kerdes = NULL;
  157. kerdesegyseg* elozo = NULL;
  158. while (kerdes = elemolvas(fp)) {
  159. if (eleje != NULL) { // nem az elsõ kör
  160. elozo->kov = kerdes;
  161. } else { //elsõ kör
  162. eleje = kerdes;
  163. }
  164. elozo = kerdes;
  165. }
  166. if (kerdes != NULL)
  167. kerdes->kov = NULL;
  168. return eleje;
  169. }
  170.  
  171. void printlistelems(kerdesegyseg *egyseg, int db) {
  172. for (int i = db; db>0; db--) {
  173. printf("%d\n", egyseg->kerdesazon);
  174. printf("%s\n", egyseg->kerdes);
  175. printf("kep: %s\n", egyseg->kep);
  176. printf("%c\n", egyseg->valasz);
  177. for(int j=0;j<4;j++){
  178. printf("%s\n", egyseg->cim[j]);
  179. }
  180. printf("%d\n", egyseg->valszama);
  181. for (i=0; i<(egyseg->valszama); ++i) {
  182. printf("%s\n", egyseg->v[i]);
  183.  
  184. }
  185. printf("MAGYARAZAT: %s\n", egyseg->magyarazat);
  186. egyseg = egyseg->kov;
  187. }
  188. }
  189.  
  190. void free_the_list(kerdesegyseg *eleje) {
  191. kerdesegyseg *next;
  192. if (eleje == NULL)
  193. return;
  194. while (eleje->kov != NULL) {
  195. next = eleje->kov;
  196. free(eleje);
  197. eleje = next;
  198. }
  199. }
  200.  
  201. int print_kerdes(kerdesegyseg *eleje, int hanyadik, int vanpassz){
  202. char betu='a';
  203. char felhvalasz='q';
  204. kerdesegyseg *uj;
  205. uj=eleje;
  206. for(int i=1;i<hanyadik;i++){
  207. uj=uj->kov;
  208. }
  209. printf("--------------------------------\n++++++++++++++++++++++++++++++++\n%d--------------------------------\n",hanyadik);
  210. for(int i=0;i<4;i++){
  211. if(uj->cim[i][0]!='\0'){
  212. printf("%s\n",uj->cim[i]);
  213. }
  214. }
  215. if(uj->kep[0]!='\0'){
  216. printf("***A kerdeshez a %s kep tartozik***", uj->kep);
  217. }
  218. printf("\n---- \n|%s\n---- \n",uj->kerdes );
  219. for(int i=0;i<uj->valszama;i++,betu++){
  220. printf("%c.) %s\n", betu, uj->v[i]);
  221. }
  222.  
  223.  
  224.  
  225. if(uj->valasz!='x'){
  226. fflush(stdin);
  227. felhvalasz=getchar();
  228. while(felhvalasz!='a' || felhvalasz!='b' || felhvalasz!='c' ){
  229. if(felhvalasz=='P' && vanpassz==1){break;}
  230. if(felhvalasz=='a'){break;}
  231. if(felhvalasz=='b'){break;}
  232. if(felhvalasz=='c'){break;}
  233. printf("Csak az 'a' 'b' 'c' 'P' válaszok mgengedettek, a kisbetűkkel válaszolhat, a 'P' vel passzlhat az első körben, a passzolt kérdéseket egy másodk korben kapja meg ahol mar nem passzolhat\n a valasza: ");
  234. fflush(stdin);
  235. felhvalasz=getchar();
  236. }
  237. if(felhvalasz=='P'){return hanyadik;}else{
  238. if(felhvalasz==uj->valasz){
  239. if(uj->magyarazat[0]!='\0'){
  240. printf("helyes valasz\n MAGYARAZAT: %s\n", uj->magyarazat);}
  241. else{
  242. printf("helyes valasz\n MAGYARAZAT:----\n");
  243. }
  244. return 1;}
  245. else{ if(uj->magyarazat[0]!='\0'){printf("helytelen valasz\n MAGYARAZAT: %s\n", uj->magyarazat);}
  246. else{printf("helytelen valasz\n MAGYARAZAT:----\n");}
  247. return 0;
  248. }
  249. }
  250. }else{
  251. for(int i=0;i<2;i++,betu++){
  252. printf("%c.) %s\n", betu, uj->v[i]);
  253. }
  254. fflush(stdin);
  255. felhvalasz=getchar();
  256. while(felhvalasz!='a' || felhvalasz!='b' || felhvalasz!='c' ){
  257. if(felhvalasz=='P' && vanpassz==1){break;}
  258. if(felhvalasz=='a'){break;}
  259. if(felhvalasz=='b'){break;}
  260. if(felhvalasz=='c'){break;}
  261. printf("Csak az 'a' 'b' 'c' 'P' válaszok mgengedettek, a kisbetűkkel válaszolhat, a 'P' vel passzlhat az első körben, a passzolt kérdéseket egy másodk korben kapja meg ahol mar nem passzolhat\n a valasza: ");
  262. fflush(stdin);
  263. felhvalasz=getchar();
  264. }
  265. if(felhvalasz=='P'){return hanyadik;}else{
  266. if(felhvalasz=='a'){ if(uj->magyarazat[0]!='\0'){printf("helyes valasz\n MAGYARAZAT: %s\n", uj->magyarazat);}else{
  267. printf("helyes valasz\n MAGYARAZAT:----\n");
  268. return 1; }
  269. }else{ if(uj->magyarazat[0]!='\0'){printf("helytelen valasz\n MAGYARAZAT: %s\n", uj->magyarazat);}
  270. else{printf("helytelen valasz\n MAGYARAZAT:----\n");}
  271. return 0;
  272. }
  273. }
  274. }
  275. }
  276. int induljonateszt(kerdesegyseg *eleje, int ran){
  277. int pontok=0;
  278. int passzolt[10];
  279. for(int i=0;i<10;i++){
  280. ran=rand()%2390;
  281. passzolt[i]=print_kerdes(eleje, ran,1);
  282. printf("\n itt ni!!! %d",passzolt[i]);
  283. }
  284. for(int i=0;i<10;i++){
  285.  
  286. }
  287. printf("-----------------------------A PASSZOLT KERDESEK KOVETKEZNEK\n -------------------------------\n");
  288.  
  289. for(int i=0;i<10;i++){
  290. printf("%d\n",passzolt[i]);
  291. if(passzolt[i]==1){pontok+=1;}
  292. if(passzolt[i]==0){pontok-=1;}}
  293.  
  294. for(int i=0;i<10;i++){
  295. if(passzolt[i]>1){ran=passzolt[i];
  296. passzolt[i]=print_kerdes(eleje, ran,0);
  297. }
  298. }
  299. return pontok;
  300. }
  301.  
  302.  
  303.  
  304. void kepekneve(kerdesegyseg *eleje,FILE *fkp){
  305. kerdesegyseg *uj=eleje;
  306. int azonell=0;
  307. int end=0;
  308. char a='z';
  309. int i=0;
  310. end=fscanf(fkp, "%d",&azonell);
  311. while(end!=EOF){uj=eleje;
  312.  
  313. while(uj->kerdesazon!=azonell){
  314. uj=uj->kov;
  315. }
  316. fscanf(fkp, "%c",&a); //beolvassuk a vesszőt
  317. i=0;
  318. while(a!='\n'){
  319. fscanf(fkp, "%c",&a);
  320. uj->kep[i]=a;
  321. i++;
  322. }
  323. uj->kep[i]='\0';
  324.  
  325. end=fscanf(fkp, "%d",&azonell);
  326. }
  327. }
  328.  
  329. int main(int argc, char *argv[]) {
  330. srand(time(NULL));
  331. int ran=(rand())%2393;
  332. int pontok=0;
  333. FILE* fp;
  334. fp = fopen("kerdesek_ascii.txt", "r");
  335.  
  336. kerdesegyseg *data = adatbetolt(fp);
  337. fclose(fp);
  338. FILE* fkp;
  339. fkp=fopen("kepek.txt","r");
  340. kepekneve(data,fkp);
  341. fclose(fkp);
  342. //printlistelems(data, 40);
  343. clock_t start_t, end_t, total_t;
  344. start_t=clock();
  345. pontok=induljonateszt(data,ran);
  346. printf("pontok :%d",pontok);
  347. //print_kerdes(data,459,1);
  348. end_t=clock()/1000;
  349. printf("%ld\n",end_t);
  350. free_the_list(data);
  351. if(end_t<30){
  352. char jatekosnev[60];
  353. printf("ird be a neved hogy felkerulhess a dicsoseglistara: ");
  354. scanf("%s",jatekosnev);
  355. fp=fopen("dicsoseglista.txt","w");
  356. fprintf(fp,"%s\%d\n",jatekosnev[60,end_t]);
  357. fp=close();}
  358.  
  359.  
  360.  
  361.  
  362. // printf("Total time taken by CPU: %ld\n", end_t );
  363.  
  364. return 0;
  365. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement