Skip to content
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/SymbolOccurrences.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
45 changes: 45 additions & 0 deletions problem-set/SymbolOccurrences.md
Original file line number Diff line number Diff line change
@@ -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()`-ით. <br/>
აუცილებელია იმის გადამოწმება, რომ მომხმარებელმა მხოლოდ ერთი სიმბოლო შეიყვანა,
სხვა შემთხვევაში, პროგრამა ვერ იმუშავებს სწორად.