![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Неактивный пользователь
Пол:
Регистрация: 18.03.2008
Сообщений: 6
Репутация: 0
|
![]() Написал программу- Сосчитать Гласные и Согласные в словах У меня считает только в последней введенной строчке(Kellogg Competition) а не в первой(Puu Kaa Lani) и поэтому я немогу сосчитать максимальный(highest ratio) и минимальный(lowest ratio) коэфицент между первой и второй строчкой. Помогите чуть доделать программу Some languages use many more vowels than others. For example, in Hawaiian “Puu Kaa Lani” has 6 vowels and 4 consonants. Write a program that inputs a line of text, calculates the ratio of vowels to consonants and prints that line with the corresponding ratio. Numbers, spaces and punctuation do not count, for example May 26, 1999 has a ratio of 1 /2. The program should repeat the process until the user enters an empty line. At the end, it should write the lines with the highest and lowest ratio. It should count only letters, disregarding any other character. Note: A, a, E, e, I, I, O, o, U, u are vowels(гласные) and other letters are consonants(согласные). Вот так должно выглядеть: Sample Input and Output: Please enter any text> Puu Kaa Lani Do you wish to continue? (Y/N) Y Please enter any text> Kellogg Competition Do you wish to continue? (Y/N) N “Puu Kaa Lani” vowel to consonant ratio is: 6/4 “Kellogg Competition ” vowel to consonant ratio is: 7/11 The line with the lowest ratio is: “Kellogg Competition” ratio vowel to consonant is: 0.6 The line with the highest ratio is: “Puu Kaa Lani” vowel to consonant ratio: 1.5 Код:
#include "stdafx.h"
#include "conio.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{
char retry = 'y';
string s;
int vowels=0;
int consonant=0;
int lowest=0;
int highest=0;
while (retry == 'y' || retry == 'Y')
{
cout <<"\nPlease enter text: ";
cin >> s;
cout << "\nDo you wish to continue? (Y/N)"<<endl;
cin >> retry;
}
for (int i=0; i<int(s.size()); ++i)
{
if (s[i]=='a' || s[i]=='e' || s[i]=='i' || s[i]=='o' || s[i]=='u'
|| s[i]=='A' || s[i]=='E' || s[i]=='I' || s[i]=='O' || s[i]=='U')
++vowels;
else
++consonant;
}
cout << "\nTotal vowels are: "<<vowels << endl;
cout << "\nTotal Consonants are: "<< consonant << endl;
cout << "\nConsonant ratio are: "<< vowels << "/" << consonant << endl;
if ( vowels <= consonant )
cout << "\nThe line with the lowest ratio: " << lowest << endl;
cout << "\nThe line with the highest ratio is: "<< highest << endl;
_getch();
return 0;
}
большое спасибо!!!! ![]() |
|
|
|
| Реклама: | Герман Греф: Целеполагание — главный драйвер человека | речные экскурсии | маска театр - RedKassa.ru | api яндекс такси | огнезадеживающий клапан-01 |
|
|
#2
|
|
Пользователь
![]() Пол:
Регистрация: 27.02.2008
Адрес: Днепропетровск, Украина
Сообщений: 149
Репутация: 802
|
Выдели подсчет сообщенийв отдельную функцию. Если брать за основу твой код то это будет выглядеть так:
Код:
#include "stdafx.h"
#include "conio.h"
#include <iostream>
#include <string>
using namespace std;
int vowels=0; //Блок глобальных переменных
int consonant=0;
int lowest=0;
int highest=0;
//Объевление и реализация функции подсчета
void calcul(string s){
for (int i=0; i<int(s.size()); ++i)
{
if (s[i]=='a' || s[i]=='e' || s[i]=='i' || s[i]=='o' || s[i]=='u'
|| s[i]=='A' || s[i]=='E' || s[i]=='I' || s[i]=='O' || s[i]=='U')
++vowels;
else
++consonant;
}
}
int main()
{
char retry = 'y';
string s;
while (retry == 'y' || retry == 'Y')
{
cout <<"\nPlease enter text: ";
cin >> s;
calcul(s);//Вызов функции
cout << "\nDo you wish to continue? (Y/N)"<<endl;
cin >> retry;
}
cout << "\nTotal vowels are: "<<vowels << endl;
cout << "\nTotal Consonants are: "<< consonant << endl;
cout << "\nConsonant ratio are: "<< vowels << "/" << consonant << endl;
if ( vowels <= consonant )
cout << "\nThe line with the lowest ratio: " << lowest << endl;
cout << "\nThe line with the highest ratio is: "<< highest << endl;
_getch();
return 0;
}
|
|
|
|
|
|
#3
|
|
Неактивный пользователь
Пол:
Регистрация: 18.03.2008
Сообщений: 6
Репутация: 0
|
k0t_ а вчем разница между моим и твоим кодом = результат выводиться одинаковый
![]() Добавлено через 2 минуты "не так коряво, как у тебя" - c начал заниматься только 4недели назад помоги доделать а то я застрял если можеш Последний раз редактировалось XXXAlex; 01.05.2008 в 23:18.. Причина: Добавлено сообщение |
|
|
|
|
|
#4
|
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
Результат не может быть одинаковый: в первом случае подсчет ведется вне
цикла ввода (т.е. только по последней строке), а во втором внутри цикла (т.е. по всем строкам).
__________________
Сергей Сергеевич |
|
|
|
|
|
#5
|
|
Пользователь
![]() Пол:
Регистрация: 27.02.2008
Адрес: Днепропетровск, Украина
Сообщений: 149
Репутация: 802
|
Сколько недель ты занимаешься программированием я вроде не спрашивал - это значит что меня это, мягко говоря, не интересует. Ты спросил почему считает только в последней строчке а не в первой я - показал в чем одна из ошибок. Но это вовсе не значит что я буду за тебя разбираться с классами ввода-вывода. Я бы переделал твой код примерно таким образом Код:
void calcul(char *s){ //В использовании string тут нет необходимости
int strl = strlen(s);//Получаем размер массива
for (int i=0;i < strl; ++i)
{
switch(s[i]){
case 'a':
case 'A':
case 'E':
case 'e':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U':
++vowels;
break;
default:
++consonant;
break;
}
}
}
main(){
char retry='y';
char buffer[128] = {0};
while (retry == 'y' || retry == 'Y')
{
retry = 0;
cout <<"\nPlease enter text: ";
cin.getline(buffer,128,'\n');
calcul(buffer);//Вызов функции
cout << "\nDo you wish to continue? (Y/N)"<<endl;
retry = getch();
cin.clear();
}
... //Ну и так далее.
Кстати, пробелы тоже надо учитывать. Я думаю с этим сам разберешься. Последний раз редактировалось k0t_; 02.05.2008 в 14:44.. Причина: Добавлено сообщение |
|
|
|
|
|
#6
|
|
Неактивный пользователь
Пол:
Регистрация: 18.03.2008
Сообщений: 6
Репутация: 0
|
спасибо за помощь.
сижу разбираюсь. Добавлено через 3 минуты "Сколько недель ты занимаешься программированием я вроде не спрашивал" .........я просто ответил почему так коряво написано. извини если этим тебя задел. ![]() ![]() Последний раз редактировалось XXXAlex; 03.05.2008 в 00:03.. Причина: Добавлено сообщение |
|
|
|
|
|
#7
|
|
Неактивный пользователь
Пол:
Регистрация: 04.12.2007
Сообщений: 32
Репутация: 4
|
Надеюсь это то, что вам надо
Код:
#include <iostream>
#include <cctype>
#define _BUFSIZE 100
using namespace std;
const char* Vowels = "aeiou";
int main(int argc, char* argv[])
{
char sentence[_BUFSIZE + 1];
double lowest_ratio = -1, highest_ratio = -1;
do
{
fflush(stdin);
cout << "Please enter the sentence: ";
cin.getline(sentence, _BUFSIZE);
int vowels = 0, consonants = 0;
for (int i = 0; sentence[i]; i++)
{
if ( isalpha( sentence[i] ) )
{
if ( strchr( Vowels, tolower( sentence[i] ) ) != NULL )
vowels++;
else
consonants++;
}
}
double ratio = double(vowels)/consonants;
lowest_ratio = ( lowest_ratio == -1 )? ratio: min(lowest_ratio, ratio);
highest_ratio = ( highest_ratio == -1 )? ratio: max(highest_ratio, ratio);
cout << "Ratio [vowels/consonants]: " << ratio << "\n\n";
cout << "Do you want to continue[Y/N]? ";
} while ( tolower(getchar()) == 'y' );
cout << "Lowest ratio: " << lowest_ratio << endl;
cout << "Highest ratio: " << highest_ratio << endl;
return (0);
}
|
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Помогите срочно! | AnnaS | Скорая помощь | 11 | 14.03.2010 00:18 |
| Как сосчитать одинаковые записи в БД. | hack | Delphi | 6 | 17.02.2010 11:36 |
| помогите пожалуста c программой на с++(сдавать срочно) | XXXAlex | Visual C++ / С/C++ | 2 | 19.03.2008 05:30 |
| ??????помогите срочно | LISER | Архив | 2 | 20.01.2008 19:51 |
| Жизнь в ста словах . . . | Mademoiselle | Творчество наших читателей | 8 | 12.06.2007 15:18 |
|
|