Skip to content

PR4: TossesForHead-35 #161

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions problem-set/TossesForHead.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* File: TossesForHead.java
* ----------------------------
* თქვენი ამოცანაა გააკეთოთ მონეტის აგდების სიმულაციები და დათვალოთ საშუალოდ
* რამდენჯერ უნდა ავაგდოთ მონეტა რათა ამოვიდეს ბორჯღალო
*/

import stanford.karel.*;

public class TossesForHead extends ConsoleProgram{

private static final int SIMULATION_NUM = 1000000;

public void run() {
//create Random Generator.
RandomGenerator rgen = RandomGenerator.getInstance();
//Variable to sum up all flip numbers to get head.
int flipNum = 0;
//Simulating coin flips.
for(int i = 0; i < SIMULATION_NUM; i++)
flipNum += simulateFlips(rgen);
//Get average number.
double averageFlipNum = (double) flipNum / SIMULATION_NUM;
//Print message.
println("Average coin flip number to get head is " + averageFlipNum + ".");
}

private int simulateFlips(RandomGenerator rgen) {
//From start counter is 0.
int flipNumToGetHead = 0;
while(true) {
//If Random Generator returns true, means we flipped head.
boolean coin = rgen.nextBoolean();
//Increase counter.
flipNumToGetHead++;
//If coin flipped on head, while should break.
if(coin)
break;
}
return flipNumToGetHead;
}

}
13 changes: 13 additions & 0 deletions problem-set/TossesForHead.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# TossesForHead

პრობლემა:
```
თქვენი ამოცანაა გააკეთოთ მონეტის აგდების სიმულაციები და დათვალოთ საშუალოდ
რამდენჯერ უნდა ავაგდოთ მონეტა რათა ამოვიდეს ბორჯღალო
```

## პრობლემის გადაჭრის გზა
გავაკეთოთ მონეტის აგდების სიმულაციები და ყოველ ჯერზე დავთვალოთ, თუ რამდენი აგდებაა საჭირო, რათა ამოვიდეს ბორჯღალო. რადგან მონეტას მხოლოდ 2 მხარე აქვს, შეგვიძლია გამოვიყენოთ Random Generator-ის `nextBoolean()` მეთოდი, რომელიც თუ დააბრუნებს `true`-ს ნიშნავდეს, რომ ამოვიდა ბორჯღალო, წინააღმდეგ შემთხვევაში - საფასური. აგდებების რაოდენობების ჯამის სიმულაციების რაოდენობაზე გაყოფით კი მივიღებთ საშუალო რაოდენობას.

### შესაძლო შეცდომა
არ უნდა დაგვავიწყდეს საშუალოს დათვლისას მნიშვნელობის double-ში გადაკასტვა, წინააღმდეგ შემთხვევაში მივიღებთ დაბლა დამრგვალებულ მთელ რიცხვს.