From 881e9c229d486525772e0260bfd91fffc41cedf6 Mon Sep 17 00:00:00 2001 From: Aiushta96 Date: Thu, 17 Nov 2022 05:19:01 -0800 Subject: [PATCH 1/3] PR4: TossesForHead-35 --- problem-set/TossesForHead.java | 43 ++++++++++++++++++++++++++++++++++ problem-set/TossesForHead.md | 13 ++++++++++ 2 files changed, 56 insertions(+) create mode 100644 problem-set/TossesForHead.java create mode 100644 problem-set/TossesForHead.md diff --git a/problem-set/TossesForHead.java b/problem-set/TossesForHead.java new file mode 100644 index 0000000..bb099c4 --- /dev/null +++ b/problem-set/TossesForHead.java @@ -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; + } + +} diff --git a/problem-set/TossesForHead.md b/problem-set/TossesForHead.md new file mode 100644 index 0000000..671cad5 --- /dev/null +++ b/problem-set/TossesForHead.md @@ -0,0 +1,13 @@ +# TossesForHead + +პრობლემა: +``` +თქვენი ამოცანაა გააკეთოთ მონეტის აგდების სიმულაციები და დათვალოთ საშუალოდ +რამდენჯერ უნდა ავაგდოთ მონეტა რათა ამოვიდეს ბორჯღალო +``` + +## პრობლემის გადაჭრის გზა +გავაკეთოთ მონეტის აგდების სიმულაციები და ყოველ ჯერზე დავთვალოთ, თუ რამდენი აგდებაა საჭირო, რათა ამოვიდეს ბორჯღალო. რადგან მონეტას მხოლოდ 2 მხარე აქვს, შეგვიძლია გამოვიყენოთ Random Generator-ის `nextBoolean()` მეთოდი, რომელიც თუ დააბრუნებს `true`-ს ნიშნავდეს, რომ ამოვიდა ბორჯღალო, წინააღმდეგ შემთხვევაში - საფასური. აგდებების რაოდენობების ჯამის სიმულაციების რაოდენობაზე გაყოფით კი მივიღებთ საშუალო რაოდენობას. + +### შესაძლო შეცდომა +არ უნდა დაგვავიწყდეს საშუალოს დათვლისას მნიშვნელობის double-ში გადაკასტვა, წინააღმდეგ შემთხვევაში მივიღებთ დაბლა დამრგვალებულ მთელ რიცხვს. From 73b356fc129c1d5b42f1d95efa6fdc65ecd1695a Mon Sep 17 00:00:00 2001 From: Aiushta96 Date: Sat, 10 Dec 2022 02:03:55 -0800 Subject: [PATCH 2/3] PR5: PaintLine-42 --- problem-set/PaintLine.java | 49 ++++++++++++++++++++++++++++++++++ problem-set/PaintLine.md | 11 ++++++++ problem-set/TossesForHead.java | 43 ----------------------------- problem-set/TossesForHead.md | 13 --------- 4 files changed, 60 insertions(+), 56 deletions(-) create mode 100644 problem-set/PaintLine.java create mode 100644 problem-set/PaintLine.md delete mode 100644 problem-set/TossesForHead.java delete mode 100644 problem-set/TossesForHead.md diff --git a/problem-set/PaintLine.java b/problem-set/PaintLine.java new file mode 100644 index 0000000..9fd9597 --- /dev/null +++ b/problem-set/PaintLine.java @@ -0,0 +1,49 @@ +/* + * File: TossesForHead.java + * ---------------------------- + * Paint-ის მონაკვეთის ხატვის გაკეთება, ჯერ აჭერ მაუსს, ფიქსირდება ერთი წვერო, მერე + * მაუსის მოძრაობისას მონაკვეთიც მოძრაობს რადგან მეორე წვერო არაა დაფიქსირებული და + * კლიკით ფიქსირდება მეორე წვეროც. + */ + +import acm.graphics.*; +import acm.program.*; +import java.awt.event.*; + +public class PaintLine extends GraphicsProgram { + + + private boolean startClicked; + private boolean endClicked; + private GLine line; + + //in the start there are no points clicked. + //adding mouse listeners. + public void init() { + startClicked = false; + endClicked = false; + addMouseListeners(); + } + + //if starting point isn't clicked yet and user clicked it now, + //add add line on those coordinates. + //else if end point isn't clicked yet and user clicked it, + //mark its boolean as true. + public void mouseClicked(MouseEvent e) { + if (!startClicked) { + line = new GLine(e.getX(), e.getY(), e.getX(), e.getY()); + add(line); + startClicked = true; + } else if (!endClicked) { + endClicked = true; + } + } + + //if starting point has already set, update line ending point + //to show that line ending point is moving with cursor. + public void mouseMoved(MouseEvent e) { + if (startClicked && !endClicked) + line.setEndPoint(e.getX(), e.getY()); + } + +} \ No newline at end of file diff --git a/problem-set/PaintLine.md b/problem-set/PaintLine.md new file mode 100644 index 0000000..679adf8 --- /dev/null +++ b/problem-set/PaintLine.md @@ -0,0 +1,11 @@ +# PaintLine + +პრობლემა: +``` +Paint-ის მონაკვეთის ხატვის გაკეთება, ჯერ აჭერ მაუსს, ფიქსირდება ერთი წვერო, მერე +მაუსის მოძრაობისას მონაკვეთიც მოძრაობს რადგან მეორე წვერო არაა დაფიქსირებული და +კლიკით ფიქსირდება მეორე წვეროც. +``` + +## პრობლემის გადაჭრის გზა +გავაკეთოთ `boolean` ტიპის ცვლადები, რომლებიც შეინახავენ ინფორმაციას იმის შესახებ, დავაფიქსირეთ თუ არა დასაწყისი და საბოლოო წერტილი, ასევე აღვწეროთ მონაკვეთიც, `GLine` ტიპის ობიექტი. თავდაპირველად, რა თქმა უნდა, ორივე ცვლადის მნიშნველობაა `false`. მაუსზე დაკლიკვის შემთხვევაში, უნდა შევამოწმოთ, რომელი წერტილი დაფიქსირდა. იმ შემთხვევაში თუ საწყისი წერტილისთვის განკუთვნილი ცვლადის `startClicked`-ის მნიშვნელობაა `false`, ნიშნავს, რომ ახლა ხდება საწყისი წერტილის არჩევა. კლიკის შემთხვევაში კანვასზე დავამატოთ აღწერილი მონაკვეთი საწყისი და საბოლოო ერთი და იმავე კოორდინატებით, კლიკის ადგილზე. ახლა უკვე უნდა ავსახოთ მონაკვეთი, რომელიც იმოძრავებს კურსორთან ერთად. ეს ხდება მხოლოდ იმ შემთხვევაში, როცა საწყისი წერტილი დაფიქსირებულია, ხოლო საბოლოო არა, სწორედ ასეთ დროს `mouseMoved` მეთოდში თანდათან ვცვალოთ მონაკვეთის მეორე ბოლოს კოორდინატები. იმ შემთხვევაში თუ კლიკი მოხდა, `startClicked`-ის მნიშვნელობაა `true`, ხოლო `endClicked`-ის მნიშვნელობაა `false`, ნიშნავს, რომ ფიქსირდება საბოლოო წერტილი. შესაბამისად შევცვლით ცვლადის მნიშვნელობას და მონაკვეთი გაჩერდება შესაბამის პოზიციაზე `mouseMoved` მეთოდში დაწერილი კოდის მიხედვით. \ No newline at end of file diff --git a/problem-set/TossesForHead.java b/problem-set/TossesForHead.java deleted file mode 100644 index bb099c4..0000000 --- a/problem-set/TossesForHead.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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; - } - -} diff --git a/problem-set/TossesForHead.md b/problem-set/TossesForHead.md deleted file mode 100644 index 671cad5..0000000 --- a/problem-set/TossesForHead.md +++ /dev/null @@ -1,13 +0,0 @@ -# TossesForHead - -პრობლემა: -``` -თქვენი ამოცანაა გააკეთოთ მონეტის აგდების სიმულაციები და დათვალოთ საშუალოდ -რამდენჯერ უნდა ავაგდოთ მონეტა რათა ამოვიდეს ბორჯღალო -``` - -## პრობლემის გადაჭრის გზა -გავაკეთოთ მონეტის აგდების სიმულაციები და ყოველ ჯერზე დავთვალოთ, თუ რამდენი აგდებაა საჭირო, რათა ამოვიდეს ბორჯღალო. რადგან მონეტას მხოლოდ 2 მხარე აქვს, შეგვიძლია გამოვიყენოთ Random Generator-ის `nextBoolean()` მეთოდი, რომელიც თუ დააბრუნებს `true`-ს ნიშნავდეს, რომ ამოვიდა ბორჯღალო, წინააღმდეგ შემთხვევაში - საფასური. აგდებების რაოდენობების ჯამის სიმულაციების რაოდენობაზე გაყოფით კი მივიღებთ საშუალო რაოდენობას. - -### შესაძლო შეცდომა -არ უნდა დაგვავიწყდეს საშუალოს დათვლისას მნიშვნელობის double-ში გადაკასტვა, წინააღმდეგ შემთხვევაში მივიღებთ დაბლა დამრგვალებულ მთელ რიცხვს. From daed59d83dc61c835fc0816c1597f45fe99bab29 Mon Sep 17 00:00:00 2001 From: Aiushta96 <113984007+Aiushta96@users.noreply.github.com> Date: Sat, 10 Dec 2022 02:08:17 -0800 Subject: [PATCH 3/3] Update PaintLine.java --- problem-set/PaintLine.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/problem-set/PaintLine.java b/problem-set/PaintLine.java index 9fd9597..67d5bda 100644 --- a/problem-set/PaintLine.java +++ b/problem-set/PaintLine.java @@ -1,5 +1,5 @@ /* - * File: TossesForHead.java + * File: PaintLine.java * ---------------------------- * Paint-ის მონაკვეთის ხატვის გაკეთება, ჯერ აჭერ მაუსს, ფიქსირდება ერთი წვერო, მერე * მაუსის მოძრაობისას მონაკვეთიც მოძრაობს რადგან მეორე წვერო არაა დაფიქსირებული და @@ -46,4 +46,4 @@ public void mouseMoved(MouseEvent e) { line.setEndPoint(e.getX(), e.getY()); } -} \ No newline at end of file +}