Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <math.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <stdbool.h>
- typedef struct kerdesegyseg {
- int kerdesazon;
- char kerdes[300];
- char valasz;
- char cim[4][300]; //téma
- int valszama; //válaszok száma
- char v[6][300]; //válaszok, max 6db rendre a-tól max f-ig
- int betuszam; //sorrendmegadós esetén a betûk száma
- char magyarazat[300];
- char kep[100];
- struct kerdesegyseg *kov; //válaszok száma
- } kerdesegyseg;
- kerdesegyseg *elemolvas(FILE *fp) {
- kerdesegyseg *egyseg = (kerdesegyseg*) malloc(sizeof(kerdesegyseg));
- char a = 'z'; //egy nem '\t' kezdõérték az a-nak
- int i = 0;
- int j = 0;
- int end;
- end = fscanf(fp, "%d", &egyseg->kerdesazon);
- if (end == EOF)
- return NULL;
- fscanf(fp, "%c", &a);
- while (a == '\t')
- fscanf(fp, "%c", &a); //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
- i=0;
- while (a != '\t') {
- egyseg->kerdes[i] = a; //mivel az elõzõ ciklusban!'\t'-ig mentünk, az a-ban monst pont a nekünk kellõ karakter van
- fscanf(fp, "%c", &a);
- i++;
- }
- egyseg->kerdes[i] = '\0';
- while (a == '\t')
- fscanf(fp, "%c", &a); //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
- while (a != '\t') {
- egyseg->valasz = a; //mivel az elõzõ ciklusban!'\t'-ig mentünk, az a-ban monst pont a nekünk kellõ karakter van
- fscanf(fp, "%c", &a); // !!! Nem szabad elfogadni 1-nél több karaktert (whitelist: a,b,c,d?, ...?)
- }
- if(egyseg->valasz=='x'){
- fscanf(fp, "%d", &i); //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
- fscanf(fp, "%d", &i);
- egyseg->betuszam=i;
- while(a=='\t'){fscanf(fp,"%c", &a);
- }
- i=0;
- while(a!='\t'){
- egyseg->v[0][i]=a;
- i++;
- fscanf(fp,"%c", &a);
- } egyseg->v[0][i]='\0';
- j=0;
- while(i>=0){
- egyseg->v[1][j]=egyseg->v[0][i-1];
- i--;
- j++;
- }
- egyseg->v[0][j]='\0';
- while(a=='\t'){
- fscanf(fp, "%c", &a);}
- j = 0; //címek
- while(j<4){ //beolva-
- i=0; //sása
- while (a != '\t') {
- egyseg->cim[j][i] = a;
- fscanf(fp, "%c", &a);
- i++;
- }
- egyseg->cim[j][i] = '\0';
- fscanf(fp, "%c", &a);
- j++;
- }
- while(a=='\t'){
- fscanf(fp, "%c", &a);
- }
- i=0;
- while(a!='\t' && a!='\n'){
- egyseg->magyarazat[i]=a;
- fscanf(fp, "%c", &a);
- i++;
- }
- egyseg->magyarazat[i]='\0';
- egyseg->kov = NULL;
- return egyseg;
- }else{
- while (a == '\t')
- fscanf(fp, "%c", &a); //a tabok kikerülése akárhány is legyen, és a következõ beolvasanó karakter beírása
- j = 0; //címek
- while(j<4){ //beolva-
- i=0; //sása
- while (a != '\t') {
- egyseg->cim[j][i] = a;
- fscanf(fp, "%c", &a);
- i++;
- }
- egyseg->cim[j][i] = '\0';
- fscanf(fp, "%c", &a);
- j++;
- }
- egyseg->valszama = 0; //válaszok beolvasása
- while (a != '\n' && end != EOF) {
- j = 0;
- while (a != '\t' && a != '\n' && end != EOF) {
- egyseg->v[egyseg->valszama][j] = a;
- end = fscanf(fp, "%c", &a);
- j++;
- }
- if(j>0){egyseg->v[egyseg->valszama][j] = '\0';
- }
- if((a != '\t' || j>0) && a!='\n'){
- egyseg->valszama++;
- }
- if (a != '\n')
- end = fscanf(fp, "%c", &a);
- }
- i=j; //megjegyezzük hány karakterből áll az utolsó válasz
- for(j=0;j<i+1;j++){
- egyseg->magyarazat[j]=egyseg->v[egyseg->valszama][j];
- }
- }
- egyseg->kov = NULL;
- //printf("%d \n",egyseg->kerdesazon);
- return egyseg;
- }
- kerdesegyseg *adatbetolt(FILE * fp) {
- kerdesegyseg* eleje = NULL;
- kerdesegyseg* kerdes = NULL;
- kerdesegyseg* elozo = NULL;
- while (kerdes = elemolvas(fp)) {
- if (eleje != NULL) { // nem az elsõ kör
- elozo->kov = kerdes;
- } else { //elsõ kör
- eleje = kerdes;
- }
- elozo = kerdes;
- }
- if (kerdes != NULL)
- kerdes->kov = NULL;
- return eleje;
- }
- void printlistelems(kerdesegyseg *egyseg, int db) {
- for (int i = db; db>0; db--) {
- printf("%d\n", egyseg->kerdesazon);
- printf("%s\n", egyseg->kerdes);
- printf("kep: %s\n", egyseg->kep);
- printf("%c\n", egyseg->valasz);
- for(int j=0;j<4;j++){
- printf("%s\n", egyseg->cim[j]);
- }
- printf("%d\n", egyseg->valszama);
- for (i=0; i<(egyseg->valszama); ++i) {
- printf("%s\n", egyseg->v[i]);
- }
- printf("MAGYARAZAT: %s\n", egyseg->magyarazat);
- egyseg = egyseg->kov;
- }
- }
- void free_the_list(kerdesegyseg *eleje) {
- kerdesegyseg *next;
- if (eleje == NULL)
- return;
- while (eleje->kov != NULL) {
- next = eleje->kov;
- free(eleje);
- eleje = next;
- }
- }
- int print_kerdes(kerdesegyseg *eleje, int hanyadik, int vanpassz){
- char betu='a';
- char felhvalasz='q';
- kerdesegyseg *uj;
- uj=eleje;
- for(int i=1;i<hanyadik;i++){
- uj=uj->kov;
- }
- printf("--------------------------------\n++++++++++++++++++++++++++++++++\n%d--------------------------------\n",hanyadik);
- for(int i=0;i<4;i++){
- if(uj->cim[i][0]!='\0'){
- printf("%s\n",uj->cim[i]);
- }
- }
- if(uj->kep[0]!='\0'){
- printf("***A kerdeshez a %s kep tartozik***", uj->kep);
- }
- printf("\n---- \n|%s\n---- \n",uj->kerdes );
- for(int i=0;i<uj->valszama;i++,betu++){
- printf("%c.) %s\n", betu, uj->v[i]);
- }
- if(uj->valasz!='x'){
- fflush(stdin);
- felhvalasz=getchar();
- while(felhvalasz!='a' || felhvalasz!='b' || felhvalasz!='c' ){
- if(felhvalasz=='P' && vanpassz==1){break;}
- if(felhvalasz=='a'){break;}
- if(felhvalasz=='b'){break;}
- if(felhvalasz=='c'){break;}
- 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: ");
- fflush(stdin);
- felhvalasz=getchar();
- }
- if(felhvalasz=='P'){return hanyadik;}else{
- if(felhvalasz==uj->valasz){
- if(uj->magyarazat[0]!='\0'){
- printf("helyes valasz\n MAGYARAZAT: %s\n", uj->magyarazat);}
- else{
- printf("helyes valasz\n MAGYARAZAT:----\n");
- }
- return 1;}
- else{ if(uj->magyarazat[0]!='\0'){printf("helytelen valasz\n MAGYARAZAT: %s\n", uj->magyarazat);}
- else{printf("helytelen valasz\n MAGYARAZAT:----\n");}
- return 0;
- }
- }
- }else{
- for(int i=0;i<2;i++,betu++){
- printf("%c.) %s\n", betu, uj->v[i]);
- }
- fflush(stdin);
- felhvalasz=getchar();
- while(felhvalasz!='a' || felhvalasz!='b' || felhvalasz!='c' ){
- if(felhvalasz=='P' && vanpassz==1){break;}
- if(felhvalasz=='a'){break;}
- if(felhvalasz=='b'){break;}
- if(felhvalasz=='c'){break;}
- 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: ");
- fflush(stdin);
- felhvalasz=getchar();
- }
- if(felhvalasz=='P'){return hanyadik;}else{
- if(felhvalasz=='a'){ if(uj->magyarazat[0]!='\0'){printf("helyes valasz\n MAGYARAZAT: %s\n", uj->magyarazat);}else{
- printf("helyes valasz\n MAGYARAZAT:----\n");
- return 1; }
- }else{ if(uj->magyarazat[0]!='\0'){printf("helytelen valasz\n MAGYARAZAT: %s\n", uj->magyarazat);}
- else{printf("helytelen valasz\n MAGYARAZAT:----\n");}
- return 0;
- }
- }
- }
- }
- int induljonateszt(kerdesegyseg *eleje, int ran){
- int pontok=0;
- int passzolt[10];
- for(int i=0;i<10;i++){
- ran=rand()%2390;
- passzolt[i]=print_kerdes(eleje, ran,1);
- printf("\n itt ni!!! %d",passzolt[i]);
- }
- for(int i=0;i<10;i++){
- }
- printf("-----------------------------A PASSZOLT KERDESEK KOVETKEZNEK\n -------------------------------\n");
- for(int i=0;i<10;i++){
- printf("%d\n",passzolt[i]);
- if(passzolt[i]==1){pontok+=1;}
- if(passzolt[i]==0){pontok-=1;}}
- for(int i=0;i<10;i++){
- if(passzolt[i]>1){ran=passzolt[i];
- passzolt[i]=print_kerdes(eleje, ran,0);
- }
- }
- return pontok;
- }
- void kepekneve(kerdesegyseg *eleje,FILE *fkp){
- kerdesegyseg *uj=eleje;
- int azonell=0;
- int end=0;
- char a='z';
- int i=0;
- end=fscanf(fkp, "%d",&azonell);
- while(end!=EOF){uj=eleje;
- while(uj->kerdesazon!=azonell){
- uj=uj->kov;
- }
- fscanf(fkp, "%c",&a); //beolvassuk a vesszőt
- i=0;
- while(a!='\n'){
- fscanf(fkp, "%c",&a);
- uj->kep[i]=a;
- i++;
- }
- uj->kep[i]='\0';
- end=fscanf(fkp, "%d",&azonell);
- }
- }
- int main(int argc, char *argv[]) {
- srand(time(NULL));
- int ran=(rand())%2393;
- int pontok=0;
- FILE* fp;
- fp = fopen("kerdesek_ascii.txt", "r");
- kerdesegyseg *data = adatbetolt(fp);
- fclose(fp);
- FILE* fkp;
- fkp=fopen("kepek.txt","r");
- kepekneve(data,fkp);
- fclose(fkp);
- //printlistelems(data, 40);
- clock_t start_t, end_t, total_t;
- start_t=clock();
- pontok=induljonateszt(data,ran);
- printf("pontok :%d",pontok);
- //print_kerdes(data,459,1);
- end_t=clock()/1000;
- printf("%ld\n",end_t);
- free_the_list(data);
- if(end_t<30){
- char jatekosnev[60];
- printf("ird be a neved hogy felkerulhess a dicsoseglistara: ");
- scanf("%s",jatekosnev);
- fp=fopen("dicsoseglista.txt","w");
- fprintf(fp,"%s\%d\n",jatekosnev[60,end_t]);
- fp=close();}
- // printf("Total time taken by CPU: %ld\n", end_t );
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement