Можно использовать язык программирования C++ или Pascal (но в любом случае). Все символы латинского алфавита делятся

  • 51
Можно использовать язык программирования C++ или Pascal (но в любом случае). Все символы латинского алфавита делятся на гласные и согласные. Гласными символами являются: a, e, i, o, u, y. Остальные символы считаются согласными. Слово считается хорошо звучащим, если в нем не более двух согласных символов подряд и не более двух гласных символов подряд. Например, слова abba, mama, program - хорошо звучащие, а слова aaa, school, search - плохо звучащие. Вводится слово. Если это слово является плохо звучащим, то разрешается добавлять любые символы в любые места этого слова. Определите, какое минимальное количество символов нужно добавить, чтобы сделать это слово хорошо звучащим.
Ryzhik
32
C++:

cpp
#include
#include

bool isVowel(char c) {
// проверяем, является ли символ гласным
return c == "a" || c == "e" || c == "i" || c == "o" || c == "u" || c == "y";
}

bool isWellSounding(std::string word) {
int consecutiveVowels = 0;
int consecutiveConsonants = 0;

for (int i = 0; i < word.length(); ++i) {
if (isVowel(word[i])) {
consecutiveVowels++;
consecutiveConsonants = 0;
}
else {
consecutiveConsonants++;
consecutiveVowels = 0;
}

if (consecutiveVowels > 2 || consecutiveConsonants > 2) {
return false;
}
}

return true;
}

std::string makeWellSounding(std::string word) {
std::string result = "";

// добавляем символы в начало слова
int consecutiveVowels = 0;
int consecutiveConsonants = 0;
for (int i = 0; i < word.length(); ++i) {
if (isVowel(word[i])) {
consecutiveVowels++;
consecutiveConsonants = 0;
}
else {
consecutiveConsonants++;
consecutiveVowels = 0;
}

if (consecutiveVowels > 2) {
result += "a"; // добавляем гласную
consecutiveVowels = 1;
consecutiveConsonants = 0;
}
else if (consecutiveConsonants > 2) {
result += "b"; // добавляем согласную
consecutiveConsonants = 1;
consecutiveVowels = 0;
}

result += word[i];
}

// добавляем символы в конец слова
consecutiveVowels = 0;
consecutiveConsonants = 0;
for (int i = result.length() - 1; i >= 0; --i) {
if (isVowel(result[i])) {
consecutiveVowels++;
consecutiveConsonants = 0;
}
else {
consecutiveConsonants++;
consecutiveVowels = 0;
}

if (consecutiveVowels > 2) {
result.insert(i, "a"); // добавляем гласную
consecutiveVowels = 1;
consecutiveConsonants = 0;
}
else if (consecutiveConsonants > 2) {
result.insert(i, "b"); // добавляем согласную
consecutiveConsonants = 1;
consecutiveVowels = 0;
}
}

return result;
}

int main() {
std::string word;
std::cout << "Введите слово: ";
std::cin >> word;

if (isWellSounding(word)) {
std::cout << "Слово " << word << " является хорошо звучащим." << std::endl;
}
else {
std::string wellSoundingWord = makeWellSounding(word);
std::cout << "Слово " << word << " является плохо звучащим, можно исправить на " << wellSoundingWord << "." << std::endl;
}

return 0;
}


Pascal:

pascal
program WellSoundingWord;

function IsVowel(c: Char): Boolean;
begin
// проверяем, является ли символ гласным
IsVowel := (c = "a") or (c = "e") or (c = "i") or (c = "o") or (c = "u") or (c = "y");
end;

function IsWellSounding(word: String): Boolean;
var
consecutiveVowels, consecutiveConsonants: Integer;
i: Integer;
begin
consecutiveVowels := 0;
consecutiveConsonants := 0;

for i := 1 to Length(word) do
begin
if IsVowel(word[i]) then
begin
consecutiveVowels := consecutiveVowels + 1;
consecutiveConsonants := 0;
end
else
begin
consecutiveConsonants := consecutiveConsonants + 1;
consecutiveVowels := 0;
end;

if (consecutiveVowels > 2) or (consecutiveConsonants > 2) then
begin
IsWellSounding := False;
Exit;
end;
end;

IsWellSounding := True;
end;

function MakeWellSounding(word: String): String;
var
result: String;
consecutiveVowels, consecutiveConsonants: Integer;
i: Integer;
begin
result := "";

// добавляем символы в начало слова
consecutiveVowels := 0;
consecutiveConsonants := 0;
for i := 1 to Length(word) do
begin
if IsVowel(word[i]) then
begin
consecutiveVowels := consecutiveVowels + 1;
consecutiveConsonants := 0;
end
else
begin
consecutiveConsonants := consecutiveConsonants + 1;
consecutiveVowels := 0;
end;

if consecutiveVowels > 2 then
begin
result := result + "a"; // добавляем гласную
consecutiveVowels := 1;
consecutiveConsonants := 0;
end
else if consecutiveConsonants > 2 then
begin
result := result + "b"; // добавляем согласную
consecutiveConsonants := 1;
consecutiveVowels := 0;
end;

result := result + word[i];
end;

// добавляем символы в конец слова
consecutiveVowels := 0;
consecutiveConsonants := 0;
for i := Length(result) downto 1 do
begin
if IsVowel(result[i]) then
begin
consecutiveVowels := consecutiveVowels + 1;
consecutiveConsonants := 0;
end
else
begin
consecutiveConsonants := consecutiveConsonants + 1;
consecutiveVowels := 0;
end;

if consecutiveVowels > 2 then
begin
Insert("a", result, i); // добавляем гласную
consecutiveVowels := 1;
consecutiveConsonants := 0;
end
else if consecutiveConsonants > 2 then
begin
Insert("b", result, i); // добавляем согласную
consecutiveConsonants := 1;
consecutiveVowels := 0;
end;
end;

MakeWellSounding := result;
end;

var
word: String;
begin
Write("Введите слово: ");
ReadLn(word);

if IsWellSounding(word) then
begin
WriteLn("Слово ", word, " является хорошо звучащим.");
end
else
begin
WriteLn("Слово ", word, " является плохо звучащим, можно исправить на ", MakeWellSounding(word), ".");
end;
end.


Этот код позволяет определить, является ли заданное слово хорошо звучащим или плохо звучащим. Если слово является плохо звучащим, то программа предлагает вариант с исправлениями, добавляя символы \(a\) или \(b\) в нужные места.