Mac' Opublikowano 15 Marca 2010 Zgłoś Opublikowano 15 Marca 2010 otóż pisze program na laborki z infy. Mianowicie masterminda co zgadujesz tam 4 cyfry z zakresu 1-6. Losowane 3ema różnymi metodami. Problem pojawia się przy wczytywaniu odpowiedzi(pierwsze wpisanie odpowiedzi jest ograniczone do naciśniecia jakiegokolwiek klawisza), oraz przy sprawdzaniu wpisanej odpowiedzi(mianowicie nie chce mi sprawdzać pierwszej cyfry). Przypuszczam że są tam jakieś głupie błędy których sam nie potrafię znaleźć. #include <stdio.h>#include <stdlib.h>#include <string.h>void random(char *tab);void skreslanie(char *tab);void tasowanie(char *tab);int main(){ unsigned short int i,flag=1,kontrola=0; int wynik[2]={0}; char tab[4],buf[4]; int wybor; printf("Wybierz jedna z 3 metod(wpisujac 1,2 lub 3:)"); while(flag==1){ scanf("%d",&wybor); switch(wybor){ case 1: random(tab); flag=0; break; case 2: skreslanie(tab); flag=0; break; case 3: tasowanie(tab);flag=0; break; default: printf("Wprowadz liczbe od 1 do 3!!"); flag=1; break; } } for(i=0;i<4;i++){ printf("%c", tab[i]); } printf("Wpisz 4 niepowtarzajace sie cyfry z zakresu 1-6:"); flag=1; while(flag==1){ gets(buf);//tutaj nie chce wczytac za pierwszym razem potem jest ok kontrola++; sprawdz(tab, buf, wynik); if (kontrola>=10) {printf("Przegrales!!"); break;}; if(wynik[0]==99) printf("Wprowadz tylko cyfry z zakresu 1-6!!\n"); else if (wynik[1]==4) {printf("Gratulacje wygrałeś!!\n"); break;} else if (wynik[1]!=4&&wynik[0]!=99) printf("Trafiles %d cyfr a %d bylo na poprawnych miejscach\n", wynik[0],wynik[1]);//laj sie pojawia jak nie powinno?? } system("pause"); return 0; }void random(char *tab)//bangla{ unsigned short int i,m; int x; char cyfry[6]={'1','2','3','4','5','6'}; srand(time(0)); x=(rand()%6); for(i=0;i<4;i++){ x=(rand()%6); tab[i]=cyfry[x]; for(m=0;m<i;m++){ if (tab[i]==tab[m]) i--; } } } void skreslanie(char *tab)//dziala{ char cyfry[6]={'1','2','3','4','5','6'}; int x; unsigned short int i,m; srand(time(0)); for (i=0;i<2;i++){ x=(rand()%6); cyfry[x]='0'; } for (i=0, m=0;i<4;m++){ if(cyfry[m]!='0'){tab[i]=cyfry[m];i++;} }} void tasowanie(char *tab)//dziala{ unsigned short int i,r; char temp; srand(time(0)); char cyfry[6]={'1','2','3','4','5','6'}; for (i=0; i<=(6-1); i++) { r = i + (rand() % (6-i)); temp = cyfry[i]; cyfry[i] = cyfry[r]; cyfry[r] = temp; } for(i=0;i<4;i++){tab[i]=cyfry[i];}}void sprawdz(char *tab,char *odpowiedz,int *wynik)//wynik[1]=dobre na popr miejscach wynik[0]=trafione cyfry{ int i,j,flag=0; wynik[0]=0; wynik[1]=0; int k=0,g=0; char n='0',m='6' ; for(i=0;i<4;i++){ if (odpowiedz[i]<n||odpowiedz[i]>m) {printf("Wprowadz cyfry od 1-6!!\n");flag=1; wynik[0]=99; break;} } if (flag==0){ //nie sprawdza pierwszej cyfry for(i=0;i<5;i++){ if(odpowiedz[i]==tab[i]) k++; j=0; while(j<i){ if(odpowiedz[i]==tab[j]){printf("czesc git%d",j); g++;}; j++; } } } wynik[1]=k; wynik[0]=g; } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
shoq Opublikowano 15 Marca 2010 Zgłoś Opublikowano 15 Marca 2010 Dodaj sobie funkcje czyszczącą bufor, np. fflush(stdin); printf("Wpisz 4 niepowtarzajace sie cyfry z zakresu 1-6:"); Tak przeglądnąłem Twoje posty bo temat programu się wydawał znajomy i faktycznie zajęcia z infy na AiR 1 rok AGH :D. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Mac' Opublikowano 15 Marca 2010 Zgłoś Opublikowano 15 Marca 2010 No to jeden problem mam rozwiązany, dziękuje. Teraz został ten trudniejszy. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Mac' Opublikowano 21 Marca 2010 Zgłoś Opublikowano 21 Marca 2010 Znowu muszę prosić o pomoc. Chodzi o wygenerowanie ciągu niepowtarzających się liczb. zakres w kodzie jest przykładowy. Jednak o ile funkcja next ładnie generuje ciągi ale z powtarzającymi się cyframi, to jak chce sprawdzić je za pomoca powt to się zaczynają schody. I wychodzi lk+1 jakieś jedynki i w zależności od ilości przebiegów na ostatnich miejscach różne liczby(czasami większe od lk). Myśle nad tym od wczoraj a dalej nie mogę wymyślić co źle robie. #include <stdio.h>#include <stdlib.h>int next(int *gen,int dk,int lk);int powt(int *tab,int dk);int main(){ int i,dk=6,lk=8,j, tab[6]={1,2,3,4,5,5}; for(i=0;i<lk;i++){ next(tab,dk,lk); for(j=0;j<dk;j++) { printf("%d ",tab[j]); } printf("\n"); } system("PAUSE"); return 0;}int next(int *gen,int dk,int lk){ int i,j; do{ gen[dk-1]++; for(i=dk-1;i>0;i--){ if(gen[i]>lk){gen[i-1]++;gen[i]=1;} if(gen[0]>lk) return 0; } }while(powt(gen,dk)); return 1; } int powt(int *gen,int dk){ int i,m; for(i=0;i<dk;i++){ for(m=0;m<dk;m++){ if(gen[i]==gen[m]) return 1; } } return 0; } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kfgz Opublikowano 21 Marca 2010 Zgłoś Opublikowano 21 Marca 2010 Tu masz podane przykłady generowania liczb bez powtórzeń Losowanie Liczb Randomem Bez Powtórzeń - PurePC.pl - Forum Dyskusyjne Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Mac' Opublikowano 21 Marca 2010 Zgłoś Opublikowano 21 Marca 2010 (edytowane) Losowanie randomem bez powtórzeń mam. Teraz program z pierwszego postu wyewoluował do tworu który może kazać Ci zgadnąć kod z dowolnej ilości liczb i dowolnej długości. Teraz się biedze nad tym jak go zmusić by zgadł mój kod. I mam problem, bo IMO powinno banglać a cosik się psuje jak chce by generował Mi ciąg liczb ale bez powtórzeń. Jak wywale do{}while to działa jak należy czyli generuje kolejne ciągi z powtórzeniami. Edytowane 21 Marca 2010 przez Mac' Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Shakell Opublikowano 23 Marca 2010 Zgłoś Opublikowano 23 Marca 2010 hmmm, czyzby zadania od nowaczyka dla pierwszego roku AiRu? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Mac' Opublikowano 24 Marca 2010 Zgłoś Opublikowano 24 Marca 2010 Jakbyś zgadł. Ale udało mi się problem rozwiązać. Teraz się nam zacznie jazda bo piszemy szachy, user vs user to spoko. Ale user vs komp mnie przeraża. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...