Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/53: Рейтинг темы: голосов - 53, средняя оценка - 4.57
51 / 51 / 4
Регистрация: 04.04.2011
Сообщений: 209

Рассортировать слова русского текста по возрастанию отношения количества гласных букв к общему количеству

04.04.2011, 00:21. Показов 10444. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите .
вот само задание 1. Рассортировать слова русского текста по возрастанию отношения количества гласных букв к общему количеству букв в слове. Сначала думал что здесь не сложно но всё что у меня получилось вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#include <time.h>
#include <string.h>
int main()  {     int k=0,kpred=0;   char *q;  q=new char[40];
int n;
   char C,*p, t[40];
 
char **S;
printf("vvedite col-vo strok");
 scanf("%d",&n);
 clrscr();
 S=new char*[n+1];
for(int i=0;i<n;i++)
{ gets(t);
 
 S[i]=new char [strlen(t)];
  strcpy( S[i],t);
  }
 
for(int m=0;m<n;m++){
 for(int i=0;i<n;i++)
 {
 for(int j=0;  S[i][j]; j++)
                 if (strchr("АаЕеИиОоУуЮюЯя" , S[i][j]))k++;else{}
                 if(k<kpred)
                 {
                 strcpy(q,S[i-1]);
              strcpy(S[i-1],S[i]);
               strcpy(S[i],q);kpred=k;k=0;
 
               }
     else{kpred=k;k=0;}
 }
 kpred=0;
 }
 
   for(int i=n-1;i>=0;i--)        puts (S[i]);
 
  getch();                       return 0;    }
помогите плз написать данную программу или подскажите как это сделать

 Комментарий модератора 
Используйте теги форматирования кода.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.04.2011, 00:21
Ответы с готовыми решениями:

Рассортировать слова текста по возрастанию в них доли гласных букв
Рассортировать слова текста по возрастанию в них доли гласных букв (отношение количества гласных букв к общему количеству букв в слове)....

Рассортировать слова по возрастанию гласных букв
Рассортировать слова русского текста по возрастанию доли гласных букв (отношение количества гласных к общему количеству букв в слове).

Слова английского текста рассортировать по возрастанию количества заданной буквы в слове
Создать динамический массив строк как динамический массив указателей на строки . Слова английского текста рассортировать по возрастанию...

6
51 / 51 / 4
Регистрация: 04.04.2011
Сообщений: 209
05.04.2011, 01:38  [ТС]
Я ещё немного поработал но всё равно не то я сумел правильно сортировать строки по на личию в них гласных букв а мне нужно что бы слова сортировались помогите плз
вот что меня получилось во 2 раз:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
 
const n=5;
class Lab4Stat
{  // Статический массив строк
   char *s[n],
    // вспомогательная динамическая строка
   *t ;
   //  max количество символов в строках:
    int mmax,
   //1-мерный массив количества гласных букв...
    GL[n]  ;
   //============================  Конструктор  ======================
    public:
    Lab4Stat ( int kmax=20)
    { mmax=kmax;
      // Вспомогательныая строка
       t=new char[mmax];
    fflush(stdin);
    for(int i=0; i<n; i++)
    {   gets(t);
        s[i]=new char[strlen(t)];
        strcpy(s[i], t);
    }
   }
   //======================= Вывод массива строк =======================
   void OutStr()
   {   // Вывод массива строк
      cout<<endl;
      for(int i=0;i<n;i++)
         printf("\n%5d  %s", GL[i],s[i]);
   }
   // ------------------ Построение массива гласных букв ---------------
   void FunGL()
   { int kGL;
    for(int i=0; i<n; i++)
    {  kGL=0;
       for (int j=0; j<strlen (s[i]); j++)
         if (strchr("АаЕеУуОоЯяИиЮю", s[i][j]) )
            kGL++;
       GL[i]=kGL;
    }
   }
  void SortStr ()
  { int r, flag=1, k=n;
    while(flag)
    {  k--; flag=0;
      for(int i=0;  i<k;  i++)
      if (
           GL[i]>GL[i+1]
          || (GL[i]==GL[i+1] &&
              strcmp(s[i],s[i+1])>0)
         )
    //-  сравнение двух строк.
        {  flag=1;
          // Перестановка адресов двух строк.
              t= s[i];
              s[i]= s[i+1];
              s[i+1]= t;
           // Переставляем размерности этих строк
              r=GL[i];
              GL[i]=GL[i+1];
              GL[i+1]=r;
        }
      }
    }
 } ;
int main()
{
   int  NMAX;
   // вводим max количество символов в строках:
   cout<<"\nmax length of string= ";
   scanf("%d",&NMAX);
   Lab4Stat OStr(NMAX);
   OStr.FunGL();
   cout<<"\n Array o string\n";
   OStr.OutStr();
   OStr.SortStr();
   cout<<"\n Result of sorting\n";
   OStr.OutStr();
 getch();
 return 0;
 }
0
 Аватар для igorrr37
2895 / 2042 / 992
Регистрация: 21.12.2010
Сообщений: 3,791
Записей в блоге: 9
05.04.2011, 11:12
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<windows.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
 
char vow[]="АаЕеЁёИиЙйОоУуЫыЭэЮюЯя";
 
int CompChars(const void* a, const void* b){
    return *(char*)a-*(char*)b;
}
 
double Ratio(const char* word){
    double couVow=0, cou=strlen(word);
    for(; *word; ++word){
        if(bsearch(word, vow, strlen(vow), sizeof(*vow), CompChars)){
            ++couVow;
        }
    }
    return couVow/cou;
}
 
int CompRatios(const void* a, const void* b){
    double res=Ratio(*(char**)a)-Ratio(*(char**)b);
    return res<0?-1:res>0?1:0;
}
 
int main(){
    SetConsoleOutputCP(1251);
    qsort(vow, strlen(vow), sizeof(*vow), CompChars);
    char* words[]={"возрастанию", "Отношения", "количества", "гласных", "букв"};
    qsort(words, sizeof(words)/sizeof(*words), sizeof(*words), CompRatios);
    int i;
    for(i=0; i<sizeof(words)/sizeof(*words); ++i){
        printf("%s - %f\n", words[i], Ratio(words[i]));
    }
}
1
 Аватар для grrrrr
49 / 49 / 13
Регистрация: 21.04.2009
Сообщений: 265
05.04.2011, 11:42
что значит "Рассортировать слова русского текста по возрастанию отношения количества гласных букв к общему количеству букв в слове." , я так понимаю что по количеству гласных в слове по возрастанию?

т.е. - Вася, Мария, параплан..и т.д. так?
1
51 / 51 / 4
Регистрация: 04.04.2011
Сообщений: 209
05.04.2011, 22:55  [ТС]
grrrrr да именно так и нужно сортировать .
igorrr37 можно и так тут не принципиально как делать соотношение в процентах или по количеству букв как писал grrrrr но код что вы написали сортирует лишь 1 строку а мне необходимо что бы мы сами вводили 5 строк пусть n=5 const количество строк а программа завершалась выведеным текстом отсортированным
У меня появилась идея я напишу. вечером закину надеюсь получиться

Добавлено через 1 час 31 минуту
У меня есть идея как это сделать но я не знаю как.(
после ввода 5 строк все слова закинуть в новый массив и уже там работать с ним присвоив каждому слову каоличество гласных использую другой массив чисел где и будет хранить их число

Добавлено через 2 часа 44 минуты
Люди я захимичил программу голова не варит не могу понять как сделать сортировку 1 строки .
все строки я скинул в 1 массив каждое слово через 1 пробел помогите отсортировать 1 строку.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define DELIM " ,.:;!?  "
const n=5;
class Lab4Stat
{  // Статический массив строк
   char *s[n],slov[600],
    // вспомогательная динамическая строка
   *t ;
   //  max количество символов в строках:
    int mmax,
   //1-мерный массив количества гласных букв...
    GL[n]  ;
   //============================  Конструктор  ======================
    public:
    Lab4Stat ( int kmax=20)
    { mmax=kmax;
      // Вспомогательныая строка
       t=new char[mmax];
    fflush(stdin);
    for(int i=0; i<n; i++)
    {   gets(t);
        s[i]=new char[strlen(t)];
        strcpy(s[i], t);
    }
   char *t_;
   char *pin;
       for(int i=0;i<n;i++)
       {
       pin=s[i];
        for(t_ = strtok(pin, DELIM); t_; t_ = strtok(NULL, DELIM))
         {
        strcat(slov,t_);
        strcat(slov," ");
       }  }
      printf("%s",slov);
   }
 
 } ;
int main()
{
   int  NMAX;
   // вводим max количество символов в строках:
   cout<<"\nmax length of string= ";
   scanf("%d",&NMAX);
   Lab4Stat OStr(NMAX);
 getch();
 return 0;
 }
Добавлено через 1 минуту
здесь нужно отсортировать строку slov

Добавлено через 1 час 14 минут
Люди мне это напоминает блог)
я продолжил писать ту прогу но блин мозга у меня не хватает как сделать сортировку я написал для нахождения слова с самым большим количеством гласных использовала часть программы уже написанной на этой проекте
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define GLAS_LETT "АаЕеЁёИиЙйОоУуЫыЭэЮюЯя"
const n=5;
class Lab4Stat
{  // Статический массив строк
   char *s[n],slov[410],*q,
    // вспомогательная динамическая строка
   *t ;
 
      char *p_,*p;
   char *pin;
   //  max количество символов в строках:
    int mmax,
   //1-мерный массив количества гласных букв...
    GL[n]  ;
   //============================  Конструктор  ======================
    public:
    Lab4Stat ( int kmax=20)
    { mmax=kmax;
      // Вспомогательныая строка
       t=new char[mmax];
    fflush(stdin);
    for(int i=0; i<n; i++)
    {   gets(t);
        s[i]=new char[strlen(t)];
        strcpy(s[i], t);
    }
 
       for(int i=0;i<n;i++)
       {
       pin=s[i];
        slov[0]='\0';
        for(p_ = strtok(pin, " "); p_; p_ = strtok(NULL, " "))
         {
        strcat(slov,p_);
        strcat(slov," ");
       }  }
      printf("%s",slov);
   }
int glas(const char *wrd){
    int cnt = 0, i, j;
    for(i = 0; i < strlen(wrd); ++i){
        for(j = 0; j < strlen(GLAS_LETT); ++j){
            if(wrd[i] == GLAS_LETT[j])
                ++cnt;
        }
    }
    return cnt;
}
 
   void sort()
   {
        p_  = strtok(slov ," ");
    for(p = strtok(slov, " "); p; p = strtok(NULL, " ")){
        if(glas(p) > glas(p_))
            p_ = p;
    }
    printf("\n\nResult word -> %s", p_);
 
   }
 } ;
int main()
{
   int  NMAX=80;
   // вводим max количество символов в строках:
 
      Lab4Stat OStr(NMAX);
    OStr.sort();
 getch();
 return 0;
 }
0
14 / 14 / 1
Регистрация: 04.04.2011
Сообщений: 70
05.04.2011, 23:01
1. Вводим строки.
2. Пока вводим, создаем новую строку, закидываем ввод.
3. Идем указателем по массиву строк. Массив строк объявляется как char**.
4. Считаем буквы в строке, исключая пробелы.
5. Считаем гласные. Запоминаем отношение, в массив, к примеру.
6. Прошлись по массиву, отсортируем массив с отношениями и параллельно отсортируем массив со строками.
7. Профит.

ЛИБО

Введи в класс структуру
C++
1
2
3
4
5
struct something {
 something * backRef;
 char * stringPointer;
 float otnoshenie;
 something * fwdRef;
Теперь, когда ты будешь проходить по массиву строк и считать отношение, ты будешь создавать структуру, в которой сохранишь значения данных.
А дальше - все просто: пузырьком сортируешь свои структуры, в которых уже есть указатель на строку, а строку выводишь не из массива строк, а исходя из последовательности списка структур.
1
51 / 51 / 4
Регистрация: 04.04.2011
Сообщений: 209
06.04.2011, 04:42  [ТС]
я понимаю что я должен сделать я не понимаю как это реализовать как должен выглядеть код

Добавлено через 53 минуты
простите в последнем варианте ошибка в сортировке вот правильный вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define GLAS_LETT "eyuoai"
const n=5;
class Lab4Stat
{  // Статический массив строк
   char *s[n],slov[410],*q,
    // вспомогательная динамическая строка
   *t ;
 
      char *p_,*p;
   char *pin;
   //  max количество символов в строках:
    int mmax,
   //1-мерный массив количества гласных букв...
    GL[n]  ;
   //============================  Конструктор  ======================
    public:
    Lab4Stat ( int kmax=20)
    { mmax=kmax;
      // Вспомогательныая строка
       t=new char[mmax];
    fflush(stdin);
     slov[0]='\0';
    for(int i=0; i<n; i++)
    {   gets(t);
        s[i]=new char[strlen(t)];
        strcpy(s[i], t);
    }
 
       for(int i=0;i<n;i++)
       {
       pin=s[i];
 
        for(p_ = strtok(pin, " "); p_; p_ = strtok(NULL, " "))
         {
        strcat(slov,p_);
        strcat(slov," ");
       }  }
      printf("%s",slov);
   }
int glas(const char *wrd){
    int cnt = 0, i, j;
    for(i = 0; i < strlen(wrd); i++){
        for(j = 0; j < 6; j++)
        {
            if(wrd[i] == GLAS_LETT[j])
                ++cnt;
        }
    }
    return cnt;
}
 
   void sort()
   {
   char str[410];
   strcpy(str,slov);
        p_  = strtok(str ," ");
    for(p = strtok(slov, " "); p; p = strtok(NULL, " "))
    {
        if(glas(p) > glas(p_))
            p_ = p;
    }
    printf("\n\nResult word -> %s%d", p_,glas(p_));
 
   }
 } ;
int main()
{
   int  NMAX=80;
   // вводим max количество символов в строках:
 
      Lab4Stat OStr(NMAX);
    OStr.sort();
 getch();
 return 0;
 }
Добавлено через 4 часа 36 минут
люди я кажется сделал но нужно по тестировать и отредактировать что красиво было потом выкину оцените

Добавлено через 9 минут
люди если увидите ошибку или придумаете как подправить пишите)
но это работает только с англ текстом с русским не правильно работает хотя может потому что у меня борланд 5 версии не русифицированный .
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define GLAS_LETT "qeuoai"
const n=5;
class Lab4Stat
{
   char *s[n],slov[410],xren[20][20], *x,*t ;
      char *p_,*p;
      char *pin;
    int mmax,p1;
    public:
    Lab4Stat ( int kmax=20)
    { mmax=kmax;
       t=new char[mmax];
    fflush(stdin);
     slov[0]='\0';
     p1=0;
    for(int i=0; i<n; i++)
    {   gets(t);
        s[i]=new char[strlen(t)];
        strcpy(s[i], t);
    }
       for(int i=0;i<n;i++)
       {
       pin=s[i];
 
        for(p_ = strtok(pin, " "); p_; p_ = strtok(NULL, " "))
         {p1++;
        strcat(slov,p_);
        strcat(slov," ");
       }  }
   }
int glas(const char *wrd){
    int cnt = 0, i, j;
    for(i = 0; i < strlen(wrd); i++){
        for(j = 0; j < 6; j++)
        {
            if(wrd[i] == GLAS_LETT[j])
                ++cnt;
        }
    }
    return cnt;
}
   void sort()
   {
 
   int i;
   char str[410];
   strcpy(str,slov);
        p_  = strtok(str ," ");
        strcpy(xren[0],p_);
    for(p = strtok(slov, " "),i=0; p,i<p1; p = strtok(NULL, " "),i++)
    {
 
        if(glas(p) > glas(p_))
            p_ = p;
            strcpy(xren[i],p);
            }
            for(int j=1;j<p1;j++)
        {
            for(i=0;i<p1-1;i++)
            {   if(glas(xren[i])<glas(xren[i+1]))
                {
                x=new char[20];
            strcpy(x,xren[i]);
             xren[i][0]='\0';
            strcpy(xren[i],xren[i+1]);
              xren[i+1][0]='\0';
 
            strcpy(xren[i+1],x);
                }
           }
        }
    for(i=0;i<p1;i++)
    printf("%s  ",xren[i]);
   }
 
 };
int main()
{
 
   int  NMAX=80;
      Lab4Stat OStr(NMAX);
    OStr.sort();
 getch();
 return 0;
 }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.04.2011, 04:42
Помогаю со студенческими работами здесь

Сортировка текста по возрастанию количества гласных букв в каждом слове английского текста
Рассортировать строку по возрастанию количества гласных букв в каждом слове английского текста. Слова с одинаковым количеством гласных букв...

Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв
Дали написать программу &quot;В файле есть текст, вывести слова из текста на экран, которые отсортированы по количеству гласных букв&quot;...

Распечатать все слова текста, которые содержат не менее двух гласных букв русского алфавита
Дан текст. Слова в тексте отделены одним пробелом, в конце текста точка. Распечатать все слова текста, которые содержат не менее двух...

Распечатать все слова текста, которые содержат не менее двух гласных букв русского алфавита
Дан текст. Слова в тексте отделены одним пробелом, в конце текста точка. Распечатать все слова текста, которые содержат не менее двух...

Отсортировать слова заданного текста по возростанию количества гласных букв
Помогите пожалуиста написать програму,очень нужно Создать класс, который состоит из исполнительного метода, выполняет действие ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru