34. Pogodi slučajan broj-rešenje
Kompjuter "zamišlja" slučajan broj tako što ga generiše upotrebom rand() funkcije iz zaglavlja <stdlib.h>.
rand() funkcija se koristi u kombinaciji sa srand(), pomoću koje ne bi moglo biti moguće generisati različite brojeve posle svakog pokretanja aplikacije. Koristan link do članka koji ovo objašnjava: www.geeksforgeeks.org/rand-and-srand-in-ccpp/
rand() funkcija se koristi u kombinaciji sa srand(), pomoću koje ne bi moglo biti moguće generisati različite brojeve posle svakog pokretanja aplikacije. Koristan link do članka koji ovo objašnjava: www.geeksforgeeks.org/rand-and-srand-in-ccpp/
Broj koji se definiše na ovaj način je u većem rangu nego što je potrebno za zadatak, jer u zadatku broj mora biti u intervalu [a,b].
Ovo se postiže upotrebom operatora koji računa ostatak deljenja dva broja(%).
Ako je r broj dobijen pomoću rand() funkcije, a broj predstavlja traženi slučajan broj u datom intervalu, onda se on može odrediti na sledeći način:
Ovo se postiže upotrebom operatora koji računa ostatak deljenja dva broja(%).
Ako je r broj dobijen pomoću rand() funkcije, a broj predstavlja traženi slučajan broj u datom intervalu, onda se on može odrediti na sledeći način:
broj=a+ r%(b-a);
Pre formiranja petlje, potrebno je definisati maksimalni broj pogađanja "p" na sledeći način:
p=ceil(log(b-a+1)/log(2));
Unutar petlje treba uneti broj N, a zatim ispitati da li je jednak, ili da li je manji ili da li je veći od generisanog slučajnog broja "broj" i u skladu sa tim preduzeti odgovarajuću akciju:
- Ako je jednak, postaviti logičku promenljivu na vrednost 1(true)
- Ako je manji, ispisati poruku: "Zamišljeni broj je veći"
- Ako nije ni jedno od prethodno navedenog, ispisati poruku: "Zamišljeni broj je manji"
U nastavku je prikazan kompletan kod u programskom jeziku c:
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include <time.h> // use time.h header file to use time
/*
Napisati program kojim računar zamisli slučajan ceo broj na intervalu [a,b]
i od korisnika traži da ga pogodi pomažući mu porukom iz koje se vidi da li je uneti broj
manji ili veći od zamišljenog
*/
int main()
{
int N,a,b,broj,p,k=0; //N-zamisljen broj, broj-tacan broj, p-max broj pogadjanja, k-tekuci broj pogadjanja
time_t t1; // declare time variable
srand ( (unsigned) time (&t1)); // pass the srand() parameter
int pogodak=0;
printf("a=?, b=?\n");
scanf("%d%d",&a,&b);
int r=rand();
broj=a+ r%(b-a);
// printf("broj=%d\n",broj);
p=ceil(log(b-a+1)/log(2));
do{
printf("Pogodite zamisljeni broj\n");
scanf("%d",&N);
if(N==broj){
pogodak=1;//pogodio je
}
else if(N<broj){
printf("Zamisljeni broj je veci\n");
}
else{
printf("Zamisljeni broj je manji\n");
}
if(k>p){
break; //Broj pogadjanja je dostigao maksimalni
}
k++; //broj pogadjanja se povecava za 1
}
while(!pogodak);
//Provera
if(pogodak){
printf("Pogodili ste traženi broj!!\n");
}
else{
printf("Loše pogađate!!\n");
}
return 0;
}
#include <stdlib.h>
#include<math.h>
#include <time.h> // use time.h header file to use time
/*
Napisati program kojim računar zamisli slučajan ceo broj na intervalu [a,b]
i od korisnika traži da ga pogodi pomažući mu porukom iz koje se vidi da li je uneti broj
manji ili veći od zamišljenog
*/
int main()
{
int N,a,b,broj,p,k=0; //N-zamisljen broj, broj-tacan broj, p-max broj pogadjanja, k-tekuci broj pogadjanja
time_t t1; // declare time variable
srand ( (unsigned) time (&t1)); // pass the srand() parameter
int pogodak=0;
printf("a=?, b=?\n");
scanf("%d%d",&a,&b);
int r=rand();
broj=a+ r%(b-a);
// printf("broj=%d\n",broj);
p=ceil(log(b-a+1)/log(2));
do{
printf("Pogodite zamisljeni broj\n");
scanf("%d",&N);
if(N==broj){
pogodak=1;//pogodio je
}
else if(N<broj){
printf("Zamisljeni broj je veci\n");
}
else{
printf("Zamisljeni broj je manji\n");
}
if(k>p){
break; //Broj pogadjanja je dostigao maksimalni
}
k++; //broj pogadjanja se povecava za 1
}
while(!pogodak);
//Provera
if(pogodak){
printf("Pogodili ste traženi broj!!\n");
}
else{
printf("Loše pogađate!!\n");
}
return 0;
}
Sledeće
Ugnježdene petlje primeri >| |