Noam_15

Untitled

Feb 17th, 2017
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.71 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #define M 20  // מספר האיברים במערך שצריך לנחש
  6. enum TypeFlag {success,faild};
  7.  
  8. void main(){
  9.     char ARR[M+1],ABB[M+1],annoying,p;  // מאכסן את המערך של המחשב
  10.     int i, q, Bool, Pgia,count=0,N=4;
  11.     enum TypeFlag flag;
  12.  
  13.     printf("The game is called 'Bool Pgia'\n'Pgia' means: the sum of the digits that exist, BUT NOT in the same position.\n'Bool Pgia' means: the sum of the digits that exist AND in the same position.\n");
  14.     printf("       -The first digit can't be 0-\n\nPress M for Manual Game, R for Rndom Game: ");
  15.     flushall();
  16.  
  17.     annoying = getchar();
  18.     while(annoying != 'm'&& annoying != 'M' && annoying != 'r' && annoying != 'R'){
  19.         printf("Please enter a legal input: ");
  20.         flushall();
  21.         annoying = getchar();
  22.     }
  23.  
  24.     printf("0 mean 4 digits, Add more digits if you wont (up to %d): ",M-4);
  25.     scanf("%d",&i);
  26.     N+=i;
  27.  
  28.     if(annoying == 'm' || annoying == 'M'){ // ידני
  29.         printf("Enter %d numbers and press ENTER: ",N);
  30.         scanf ("%s",ARR); // להוסיף N למגבלה   ///
  31.  
  32.         do{ // בדיקה שהקלט הידני של הרצף תקין
  33.             flag = success;
  34.  
  35.             i = strlen(ARR);
  36.             if (i<N|| i>N) flag = faild; // בדיקה שהקלט הידני באורך הנכון
  37.  
  38.             if(ARR[0]=='0') flag = faild;   // הראשון אסור שיהיה 0
  39.             for(i=0;i<N && flag == success;i++){
  40.            
  41.                 if(ARR[i]>'9'|| ARR[i]<'0') {flag = faild; break; };
  42.                 for(q=i+1;q<N;q++){
  43.                     if(ARR[i]==ARR[q]) flag = faild;
  44.                 }
  45.             }
  46.             if(flag == faild){
  47.                 printf("Please enter legal numbers: ");
  48.                 flushall();  // לפעמים נצטרך
  49.                 gets(ARR);
  50.             }
  51.             else break;
  52.         } while(1);
  53.     } // עד כאן קיבלנו רצף תקין בצורה ידנית
  54.  
  55.     else{  // כאן המחשב ימלא את הרצף בצורה אקראית בספרות 1-9 שלא חוזרות על עצמן
  56.         srand(time(0));
  57.         ARR[0] = (rand()%9)+1+'0'; // עבור המקום הראשון.  לא יכול להיות 0
  58.  
  59.         for (i=1;i<N;i++){
  60.             do{   // רק בודק שאין את המספר הרנדומלי בשום מקום במערך
  61.                 p=(rand()%10)+'0';
  62.  
  63.                 for(q=i;q>0 && ARR[q-1]!=p;q--);
  64.             } while(q);
  65.             ARR[i] = p;
  66.         }
  67.         ARR[N] = NULL;
  68.     }
  69.  
  70.     while(1){  // מכאן מתחילים הניחושים
  71.         count++;
  72.         Bool=0;
  73.         Pgia=0;
  74.         printf("\n%d. Guess the %d numbers:  ",count,N);
  75.         flushall();
  76.         gets(ABB);
  77.  
  78.         //  :נבדוק שהניחוש חוקי
  79.         do{
  80.             flag = success;
  81.  
  82.             i = strlen(ABB);
  83.             if (i<N|| i>N) flag = faild; //  קטן ממספר הספרות הרצוי. לא נקלט בכלל מעבר לספרה הרביעית אם גדול
  84.  
  85.             if(ABB[0]=='0') flag = faild;
  86.             for(i=0;i<N && flag == success;i++){
  87.                 if(ABB[i]>'9'|| ABB[i]<'0') {flag = faild;  break; }; // התווים בתחום הרצוי
  88.                 for(q=i+1;q<N;q++){  // לא חוזרים על עצמם
  89.                     if(ABB[i]==ABB[q]) flag = faild;
  90.                 }
  91.             }
  92.  
  93.             if(flag == faild){
  94.                 printf("Please enter legal numbers: ");
  95.                 flushall();  // לפעמים לא נצטרך
  96.                 gets(ABB);
  97.             }
  98.             else break;
  99.         } while(1);
  100.         //  עד כאן הניחוש תקין
  101.  
  102.  
  103.         flag = success;
  104.         for (i=0;i<N;i++){
  105.             for(q=0;q<N;q++){
  106.                 if (ABB[i]==ARR[q]&&q!=i) { Pgia++; break;}
  107.                 if (ABB[i]==ARR[q]&&q==i) { Bool++; break;}
  108.             }
  109.             if(q==N || q != i) flag = faild; // אם הגענו לסוף המערך בלי התאמה או אם ההתאמה היא לא באותו מקום
  110.         }
  111.  
  112.         if (flag == success){printf("\nYou Won The Match!\n"); break;}
  113.         for(i=0;i<Pgia;i++) printf("Pgia!\n");
  114.         for(i=0;i<Bool;i++) printf("Bool Pgia!\n");
  115.  
  116.         if (Bool==0 && Pgia == 0) printf("You wrong, try again...\n");
  117.     }
  118.     scanf("%s",ARR);
  119. }
Advertisement
Add Comment
Please, Sign In to add comment