41

Re: Підрахувати кожну з літер алфавіту

Ну то замініть при виводі той ? на латинську i. В чому проблема? Чи ви не знаєте як оператор умовного переходу застосувати?

42 Востаннє редагувалося noname122 (04.11.2021 23:19:47)

Re: Підрахувати кожну з літер алфавіту

Не дуже розумію,як це зробити?
І як можна зробити щоб наприклад П і п рахувало як одну букву

43

Re: Підрахувати кожну з літер алфавіту

Не дуже розумію,як це зробити?

Перевіряти змінну на код, який відображається як ? і замість цього значення змінної записувати в неї код латинської літери i.

І як можна зробити щоб наприклад П і п рахувало як одну букву

Самостіно написати функцію  toupper або tolower для CP866.

44

Re: Підрахувати кожну з літер алфавіту

Не зрозуміло,допоможете?)

45

Re: Підрахувати кожну з літер алфавіту

noname122 написав:

Не зрозуміло,допоможете?)

Можу запропонувати вам відвідати "Камеру розуміння."

http://replace.org.ua/extensions/om_images/img/6184f9f495582/4827732266_0b3748f8df.jpg

46

Re: Підрахувати кожну з літер алфавіту

Тип char - це насправді число (код символу). Те, що деякі функції, отримавши таке число, виводять певний символ - просто робота цих функцій. Якщо вам треба, щоб програма однаково обробляла 'П' і 'п' - це означає, що вона має однаково реагувати на коди цих літер. Коди можете глянути за посиланням вище (143 і 175 у CP866).
Пане 0xDADA11C7, коли питання буде вирішено - я б хотів побачити ваш код із бульбашковим сортуванням у цій ситуації.

47

Re: Підрахувати кожну з літер алфавіту

Я начебто зробила але тепер не розумію як для кожного символа порахувати інформативність повідомлення по ції формуліhttps://replace.org.ua/uploads/images/11693/7e7efdb390d310fe59b5357f8c3c09ae.png ,а ось сам код

#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;
}

48

Re: Підрахувати кожну з літер алфавіту

noname122 написав:

тепер не розумію як для кожного символа порахувати інформативність повідомлення по ції формулі

А вам цього не треба робити. У завданні про це немає.

Що ж до решти коду, то:
0. Робіть ідентифікатори зрозумілими. f4 - це що таке? А от count_letters було б краще.
1. Не змінюйте значення вхідних параметрів, якщо функція довша за 5 рядків. Тим більше, що вам приходить стрічка s, ви її значення змінюєте, але перед тим початкове значення зберігаєте в s1. Робіть навпаки - початкове значення не змінюйте, а змінюйте, якщо треба, копії на кшталт s1 (таку копію краще назвати unique_letters чи якось так - у ній же унікальні літери, правильно?)
2. Користуйтеся стандартними контейнерами.

std::vector<Litera> litera;

це динамічний масив, ще й з убудованими функціями для розширення за потреби.
3. Вам, загалом, не дуже потрібна додаткова стрічка. Знайти індекс літери можна прямо в масиві структур, а якщо не знайшлося - то значить треба додати.
4. Ну і загалом вам і структури не потрібні.

49

Re: Підрахувати кожну з літер алфавіту

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";
  }
}

50

Re: Підрахувати кожну з літер алфавіту

Мені потрібно розрахувати по тій формулі

51

Re: Підрахувати кожну з літер алфавіту

noname122 написав:

Мені потрібно розрахувати по тій формулі

https://replace.org.ua/extensions/om_images/img/6184f9f495582/4827732266_0b3748f8df.jpg

52

Re: Підрахувати кожну з літер алфавіту

Ну допоможіть будь ласонькаа

53

Re: Підрахувати кожну з літер алфавіту

В початковому завданні нічого про цю формулу не було. Знак питання замінити на латинську літеру і ви так і не змогли, бо ніхто ж кода не написав. плак-плак. Написати  toupper або tolower для CP866 ви не змогли, бо ніхто коду замість вас не написав.

Подякували: koala1

54

Re: Підрахувати кожну з літер алфавіту

noname122 написав:

Ну допоможіть будь ласонькаа

Дайте допоможу. А де мої штани?

https://replace.org.ua/uploads/images/10563/89a9d199ed6c046a92db52709c294474.png

55

Re: Підрахувати кожну з літер алфавіту

Я не знаю де ваші штани ,пане

56

Re: Підрахувати кожну з літер алфавіту

noname122 написав:

Мені потрібно розрахувати по тій формулі

Що саме не зрозуміло в «тій формулі» власної інформації?
А після прочитання статті?

(будемо вважати, що це дійсно є інформативністю повідомлення…)

57

Re: Підрахувати кожну з літер алфавіту

Як можна використати формулу для кожного символу,в ції программі

#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;
}

58

Re: Підрахувати кожну з літер алфавіту

noname122 написав:

Як можна використати формулу для кожного символу,в ції программі

Ви можете словами сформулювати, що за складові тієї формули і що порахувала програми.
Щоб використати формулу у програмі, треба поставити відповідності між елементами формули та результатом роботи програми.

(«інформативність повідомлення» одна для всього повідомлення, тому «для кожного символу» треба знайти, що вставити у загальну формулу інформативності повідомлення)

59

Re: Підрахувати кожну з літер алфавіту

noname122 написав:

Ну допоможіть будь ласонькаа

Пишіть заяву на переведення на іншу спеціальність, де не треба буде програмувати. Іншого життя у вас не буде, а якщо ви вб'єте 2-3 роки на випрошених завданнях, доки зрозумієте, що програмістом так не станете, то будете дуже жалкувати.

60

Re: Підрахувати кожну з літер алфавіту

https://replace.org.ua/uploads/images/10563/7c07730984344d23cec7c46ab67d0e9d.jpg


Штани було знайдено.
Тепер я можу допомогти вам з доїнням корівки, чи що там у вас було.