lista6cpp.txt

(2 KB) Pobierz
#include <iostream>
#include <stdio.h>
#include <time.h> //seed do randoma
#include <stdlib.h>
using namespace std;

char* losuj(int);
bool sprawdz(char *a, char *b, int c); //c -> length
int main()
{
    int tries = 1;
    int status = 0;
    while(status != 1) {
        printf("Witaj uzytkowniku, o jakiej dlugosci wygenerowac kod?: ");
        int len = 0;
        cin >> len;
        char inp[len + 5];
        char *str;
        if(len > 0) {
                str = losuj(len);
                status=1;
        }
        else {printf("\nNieprawidlowa dlugosc!\n");}
        while(status == 1) { //prawidlowo wygenerowany kodzik, teraz "main loop"
            printf("Sproboj odgadnac: ");
            //char string_uzytk[len + 20];
            //printf("%c", str[7]);
            cin >> inp;
            if (sprawdz(inp,str, len) == true) {
                printf("Liczba prob: %d",tries);
                return 0;
            }
            tries++;
            //delete []str; //zwalnianie mem po tablicy
            //scanf("%s", &string_uzytk);
        }



    }
    return -1;
}

char* losuj(int a) {
    char *var = new char[a+1]; //deklaracja 'dynamiczna', bo normalnie funkcja sie niszczy po wszystkim..., a jak zwr??ci pointer to do "syfu" bedzie sie odwolywac
    //init random
    srand (time(NULL)); //init seeda

    for(int x = 0; x < a; x++) {

        var[x] = rand() % 10 + '0';//48; // random, 0 to pierwszy znak... 9 to last
        //printf("%c,%d: \n",var[x],var[x] ); //TEST
    }
    var[a] ='\0';
    //printf("%s", var);
    return var;
}
bool sprawdz(char *a, char *b, int c) { // a -> user b -> generated, c -> length
    int correct = 0;
    int correctbutinvalidplace = 0;
    char easy[c + 1];
    char cpy[c];
    cpy[c] ='\0'; // znak zakonczenia linii, inaczej sie upomina string...
    for (int x =0; x < c; x++) {cpy[x] = b[x];} //kopia
    //printf("Kopia[%s]\n",cpy);
    for(int x = 0; x < c; x++) {
        easy[x] ='X';
        if(a[x] == b[x]) {correct++;easy[x] = b[x];}
        else {
            for(int x2 = 0; x2 < c; x2++) {
                if(a[x] == cpy[x2]) {
                    correctbutinvalidplace++;
                    cpy[x2] = 'x';
                    break;
                }

            }


        }
    }
    easy[c] ='\0'; // znak zakonczenia lini
    if (correct == c) {return true;}
    printf("Poprawna ilosc odgadnietych cyfr: %d, nie na swoim miejscu: %d\n",correct,correctbutinvalidplace);
    //printf("Easy[%s]\n",easy); // Odkomentuj ta linijke, aby wylaczyc tryb EASY
    return false;

}
Zgłoś jeśli naruszono regulamin