Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mazarinik
0 / 0 / 0
Регистрация: 02.10.2013
Сообщений: 17
#1

Множественное число - C++

03.12.2013, 11:50. Просмотров 440. Ответов 1
Метки нет (Все метки)

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

Для большинства существительных, оканчивающихся на -онок и -ёнок, множественное число образуется с помощью суффиксов ат или ят. Причем если перед суффиксом стоит шипящая согласная, то используется ат, н-р: цыпленок - цыплята, мышонок - мышата и т.д. Имеется целый ряд исключений, из которых наиболее часто употребляются следующие:

ребенок - дети,
бесенок - бесенята,
звонок - звонки,
позвонок - позвонки,
подонок - подонки,
колонок - колонки,
жаворонок - жаворонки,
бочонок - бочонки.

Другие слова-исключения можно не рассматривать.
Из заданного текста, в котором существительные отмечены буквой "с" в скобках, например: Вороненок(с) выпал из гнезда(с), выбрать все существительные на -онок и -ёнок и получить их во множественном числе.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2013, 11:50     Множественное число
Посмотрите здесь:

Исправить в тексте множественное число существительных на единственное там, где это необходимо - C++
Входной файл: input.txt Выходной: output.txt Лимит времени: 10 сек. Ни для кого не секрет, что не королевское дело - бумажки писать,...

Множественное наследование - C++
Помогите пожалуйста написать программу.

Множественное наследование - C++
Доброго времени суток. Есть ряд операций. Логически операции делятся на группы ( к примеру, запрос, ответ, чтение из буфера и .п.). В...

Множественное наследование - C++
Так как у меня эта тема заняла долгое время для изучения ,выкладываю простой пример для освоения #include<iostream> using namespace...

Множественное наследование - C++
Добрый день. У меня имеется базовый класс A. У этого класса есть несколько наследников. Есть еще один класс B, который является...

Множественное наследование - C++
Есть два класса Human(fname, lname) и класс Employee c чисто виртуальными функц (зарплата и печать). На базе этих классов нужно создать...

Множественное наследование - C++
Вычислите площадь и периметр прямоугольника, если известны его диагональ и одна из сторон.

Множественное наследование - C++
Возник вопрос по теме множественное наследование. Вот скажем у нас определены классы: class Animal{ public: int...

множественное наследование - C++
Почему не компилируется код? #include <iostream> #include <conio.h> #include <string.h> using namespace std; class...

Множественное наследование в С++ - C++
Столкнулся с такой проблемой: class D{ ... public: ... void setD(); ... }; class Dd : public D{ ...

Множественное наследование - C++
Здравствуйте! Делаю следующее задание по подготовке к экзамену по С++. Пока только начал. Вкратце - есть абстрактный класс. Его...

Множественное наследование - C++
Описать два базовых класса с защищенной переменной типа char (в первом - фамилия, во втором - имя). В первом из них описать функцию...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ullaluna
8 / 6 / 1
Регистрация: 11.11.2013
Сообщений: 75
04.12.2013, 00:31     Множественное число #2
Пытаться кодить этот ад на не-скриптовом языке я не буду, уж простите, сударь. Прямо трагедия, если Вам дали такое задание.

Насчет алгоритма есть идейка. У Вас слишком много операций с одним словом (да какой там, матерьбошья, не с одним!), чтобы проводить их сразу в первоначальном тексте. Имхо, это тот случай, когда надо разделять и властвовать.

Воспользуемся этой функцией http://www.c-cpp.ru/content/ispunct

Тогда переменная trigger = ispunct(cursor) "ловит" начало и конец слова; cursor - текущий читаемый символ. И будет это нечто примерно такое:

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
ПОКА (не конец файла) {
    ПОКА ( trigger == 0) {                    //читаемый символ не является пробелом\знаком препинания
        записываем текущий символ в динамический массив;
        передвигаем переменную cursor на следующий символ;
        trigger = ispunct(cursor);
    }                                                                           //выходим из цикла, когда заканчивается слово
    передаем получившийся массив (слово) в функцию MakeItPlural;
    обрабатываем значение (успех или ошибка), возвращаемое функцией;
    
    ПОКА (trigger != 0) {
        передвигаем переменную cursor на следующий символ;
        trigger = ispunct(cursor);
    }
}                                                                              //читаем новое слово, пока не кончится файл
 
Функция MakeItPlural {
    массив известной длины исследуем на предмет наличия последовательностей "онок", "енок" в конце массива;
    ЕСЛИ (нашли последовательность) {
        сравниваем со списком исключений;
        ЕСЛИ (слово - исключение)
           выводим множественное число на экран;
        ИНАЧЕ {
           кромсаем по вышеприведенному правилу;
           выводим на экран;
        }
    }
    очищаем массив;
    в случае успеха возвращаем нуль;
}
Да, не пришлось использовать обозначение (с). ispunct его разрежет на букву и два знака пунктуации. С другой стороны, без костылей падать всяко красивее, да и неприятно связываться со "словами", включающими в себя знаки препинания, не правда ли?!. Не знаю, поможет или нет. Удачи.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru