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 роки на випрошених завданнях, доки зрозумієте, що програмістом так не станете, то будете дуже жалкувати.
 
Штани було знайдено.
Тепер я можу допомогти вам з доїнням корівки, чи що там у вас було.