Re: Підрахувати кожну з літер алфавіту
Ну то замініть при виводі той ? на латинську i. В чому проблема? Чи ви не знаєте як оператор умовного переходу застосувати?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Підрахувати кожну з літер алфавіту
Сторінки Попередня 1 2 3 4 Наступна
Для відправлення відповіді ви повинні увійти або зареєструватися
Ну то замініть при виводі той ? на латинську i. В чому проблема? Чи ви не знаєте як оператор умовного переходу застосувати?
Не дуже розумію,як це зробити?
І як можна зробити щоб наприклад П і п рахувало як одну букву
Не дуже розумію,як це зробити?
Перевіряти змінну на код, який відображається як ? і замість цього значення змінної записувати в неї код латинської літери i.
І як можна зробити щоб наприклад П і п рахувало як одну букву
Самостіно написати функцію toupper або tolower для CP866.
Не зрозуміло,допоможете?)
Можу запропонувати вам відвідати "Камеру розуміння."
Тип char - це насправді число (код символу). Те, що деякі функції, отримавши таке число, виводять певний символ - просто робота цих функцій. Якщо вам треба, щоб програма однаково обробляла 'П' і 'п' - це означає, що вона має однаково реагувати на коди цих літер. Коди можете глянути за посиланням вище (143 і 175 у CP866).
Пане 0xDADA11C7, коли питання буде вирішено - я б хотів побачити ваш код із бульбашковим сортуванням у цій ситуації.
Я начебто зробила але тепер не розумію як для кожного символа порахувати інформативність повідомлення по ції формулі ,а ось сам код
#include <iostream>
#include <string>
#include<fstream>
using namespace std;
void f4(string s) {
for (int i = 0; i < s.length(); ++i) {
s[i] = (char)tolower(s[i]);
}
string s1;
s1 = s;
int n = s.size(), n1 = n, count;
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (s[i] == s[j])
{
for (int k = j; k < n - 1; k++)
s[k] = s[k + 1];
n--;
j--;
}
struct Litera {
char symbol;
int count;
};
Litera *litera = new Litera[n1];
for (int i = 0; i < n; i++)
{
count = 0;
for (int j = 0; j < n1; j++)
if (s[i] == s1[j]) count++;
litera[i].symbol = (char)s[i];
litera[i].count = count;
//cout << s[i] << " - " << count << "\n";
}
Litera temp;
for (int i = 0; i < n1 - 1; i++)
{
for (int j = i + 1; j < n1; j++)
{
if (litera[i].count < litera[j].count)
{
temp = litera[i];
litera[i] = litera[j];
litera[j] = temp;
}
}
}
for (int i = 0; i < n1; ++i) {
if (litera[i].count > 0) cout << litera[i].symbol << " - " << litera[i].count << endl;
}
delete[] litera;
}
int main()
{
setlocale(LC_ALL, "Ukrainian");
string s, text;
ifstream in("E:\\1.txt");
while (getline(in, s)) text += s;
f4(text);
return 0;
}
тепер не розумію як для кожного символа порахувати інформативність повідомлення по ції формулі
А вам цього не треба робити. У завданні про це немає.
Що ж до решти коду, то:
0. Робіть ідентифікатори зрозумілими. f4 - це що таке? А от count_letters було б краще.
1. Не змінюйте значення вхідних параметрів, якщо функція довша за 5 рядків. Тим більше, що вам приходить стрічка s, ви її значення змінюєте, але перед тим початкове значення зберігаєте в s1. Робіть навпаки - початкове значення не змінюйте, а змінюйте, якщо треба, копії на кшталт s1 (таку копію краще назвати unique_letters чи якось так - у ній же унікальні літери, правильно?)
2. Користуйтеся стандартними контейнерами.
std::vector<Litera> litera;
це динамічний масив, ще й з убудованими функціями для розширення за потреби.
3. Вам, загалом, не дуже потрібна додаткова стрічка. Знайти індекс літери можна прямо в масиві структур, а якщо не знайшлося - то значить треба додати.
4. Ну і загалом вам і структури не потрібні.
void count_letters(const std::string& s)
{
std::cout<<s<<std::endl;
int frequencies[256];
for(int i=0;i<256;++i)
frequencies[i] = 0;
for(int i=0; i<s.size(); ++i)
{
unsigned char uc = s[i];
if(std::isalpha(uc))
frequencies[std::tolower(uc)] += 1;
}
int freq_to_distribute[256];//копія frequencies
for(int i=0;i<256;++i)
{
freq_to_distribute[i] = frequencies[i];
}
std::string sorted_letters;
while(true) //вихід всередині циклу
{
int max = 0;
for(int i=0;i<256;++i)
max = std::max(max, freq_to_distribute[i]);
if(max == 0)
break;
for(int j=0;j<256;++j)
{
if(freq_to_distribute[j] == max)
{
sorted_letters += (char)j;
freq_to_distribute[j] = 0; //прибираємо значення
}
}
}
for(int i=0;i<sorted_letters.size();i++)
{
std::cout << "Літера " << sorted_letters[i]
<< " зустрічається " << frequencies[(unsigned char)sorted_letters[i]] << " разів\n";
}
}
Мені потрібно розрахувати по тій формулі
Мені потрібно розрахувати по тій формулі
В початковому завданні нічого про цю формулу не було. Знак питання замінити на латинську літеру і ви так і не змогли, бо ніхто ж кода не написав. плак-плак. Написати toupper або tolower для CP866 ви не змогли, бо ніхто коду замість вас не написав.
Ну допоможіть будь ласонькаа
Дайте допоможу. А де мої штани?
Мені потрібно розрахувати по тій формулі
Що саме не зрозуміло в «тій формулі» власної інформації?
А після прочитання статті?
(будемо вважати, що це дійсно є інформативністю повідомлення…)
Як можна використати формулу для кожного символу,в ції программі
#include <iostream>
#include <string>
#include<fstream>
using namespace std;
void f4(string s) {
for (int i = 0; i < s.length(); ++i) {
s[i] = (char)tolower(s[i]);
}
string s1;
s1 = s;
int n = s.size(), n1 = n, count;
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (s[i] == s[j])
{
for (int k = j; k < n - 1; k++)
s[k] = s[k + 1];
n--;
j--;
}
struct Litera {
char symbol;
int count;
};
Litera *litera = new Litera[n1];
for (int i = 0; i < n; i++)
{
count = 0;
for (int j = 0; j < n1; j++)
if (s[i] == s1[j]) count++;
litera[i].symbol = (char)s[i];
litera[i].count = count;
//cout << s[i] << " - " << count << "\n";
}
Litera temp;
for (int i = 0; i < n1 - 1; i++)
{
for (int j = i + 1; j < n1; j++)
{
if (litera[i].count < litera[j].count)
{
temp = litera[i];
litera[i] = litera[j];
litera[j] = temp;
}
}
}
for (int i = 0; i < n1; ++i) {
if (litera[i].count > 0) cout << litera[i].symbol << " - " << litera[i].count << endl;
}
delete[] litera;
}
int main()
{
setlocale(LC_ALL, "Ukrainian");
string s, text;
ifstream in("E:\\1.txt");
while (getline(in, s)) text += s;
f4(text);
return 0;
}
Як можна використати формулу для кожного символу,в ції программі
Ви можете словами сформулювати, що за складові тієї формули і що порахувала програми.
Щоб використати формулу у програмі, треба поставити відповідності між елементами формули та результатом роботи програми.
(«інформативність повідомлення» одна для всього повідомлення, тому «для кожного символу» треба знайти, що вставити у загальну формулу інформативності повідомлення)
Ну допоможіть будь ласонькаа
Пишіть заяву на переведення на іншу спеціальність, де не треба буде програмувати. Іншого життя у вас не буде, а якщо ви вб'єте 2-3 роки на випрошених завданнях, доки зрозумієте, що програмістом так не станете, то будете дуже жалкувати.
Штани було знайдено.
Тепер я можу допомогти вам з доїнням корівки, чи що там у вас було.