diff --git a/problem-set/SymbolOccurrences.java b/problem-set/SymbolOccurrences.java new file mode 100644 index 0000000..6229449 --- /dev/null +++ b/problem-set/SymbolOccurrences.java @@ -0,0 +1,43 @@ +/* + * File: SymbolOccurrences.java + * --------------------- + * ამოცანის პირობა: + * მომხმარებელს კონსოლიდან შეჰყავს ტექსტი და სიმბოლო, + * თქვენმა პროგრამამ უნდა იპოვოს რამდენჯერ გვხვდება მოცემულ ტექსტში მოცემული სიმბოლო. + */ + +import acm.program.ConsoleProgram; + +public class SymbolOccurrences extends ConsoleProgram { + + public void run() { + // input + String text = readLine("text: "); + char symbol = readChar(); + + int res = count(text, symbol); + + // print result + println("Total: " + res); + } + + /* Asks user to prompt exactly one symbol */ + private char readChar() { + String symbol = readLine("symbol: "); + while (symbol.length() != 1) { + symbol = readLine("Please enter one symbol: "); + } + return symbol.charAt(0); + } + + /* Counts symbol occurrences */ + private int count(String text, char ch) { + int cnt = 0; + for (int i = 0; i < text.length(); i++) { + if (text.charAt(i) == ch) { + cnt++; + } + } + return cnt; + } +} \ No newline at end of file diff --git a/problem-set/SymbolOccurrences.md b/problem-set/SymbolOccurrences.md new file mode 100644 index 0000000..70f6b56 --- /dev/null +++ b/problem-set/SymbolOccurrences.md @@ -0,0 +1,45 @@ +# SymbolOccurrences + +პრობლემა: +``` +მომხმარებელს კონსოლიდან შეჰყავს ტექსტი და სიმბოლო, თქვენმა პროგრამამ უნდა იპოვოს +რამდენჯერ გვხვდება მოცემულ ტექსტში მოცემული სიმბოლო +``` + +## პრობლემის გადაჭრის გზა +პირველ რიგში ჩვენი პრობლემა დავყოთ ორ ძირითად ნაწილად: +* მომხმარებლის მიერ სიმბოლოსა და ტექსტის შეყვანა +* შეყვანილი მონაცემების მიხედვით სიმბოლოს სიხშირის დათვლა +--- + +### სიმბოლოსა და ტექსტის შეყვანა +მომხმარებელს ტექსტი შეგვიძლია შევაყვანინოთ `readLine()`-ით, თუმცა ცალკე +ერთი სიმბოლოს წასაკითხად რაიმე მეთოდი არ არსებობს, ამიტომ, სიმბოლოს წასაკითხი მეთოდი +ჩვენით უნდა დავაიმპლემენტიროთ. `readChar()` მეთოდის მთავარი აზრიც ეგ არის, რომ +მომხამრებელს იქამდე ვთხოვთ სტრინგის შეყვანას, სანამ მხოლოდ ერთ სიმბოლოიან სტრინგს არ შეიყვანს. + +### სიხშირის დათვლა +ახლა, როდესაც სიმბოლოც და ტექსტიც შეყვანილია, შეგვიძლია ციკლით გადავუყვეთ ტექსტს +და თუ რომელიმე სიმბოლო დაემთხვევა შეყვანილს, პასუხი ერთით გავზარდოთ. + +შესაბამისად, მივიღებთ კოდს: +```java +private int count(String text, char ch) { + int cnt = 0; + for (int i = 0; i < text.length(); i++) { + if (text.charAt(i) == ch) { + cnt++; + } + } + return cnt; +} +``` + +ამ ფუნქციისგან დაბრუნებული მნიშვნელობის მიხედვით, შეგვიძლია `run()`-ში დავბეჭდოთ საბოლოო პასუხი. + +--- + +## შესაძლო ხარვეზები ამოხსნის იმპლემენტაციისას +- სიმბოლოს შეყვანა `readLine()`-ით.
+აუცილებელია იმის გადამოწმება, რომ მომხმარებელმა მხოლოდ ერთი სიმბოლო შეიყვანა, +სხვა შემთხვევაში, პროგრამა ვერ იმუშავებს სწორად. \ No newline at end of file