Читайте также:
|
|
Напишем программу, которая переписывает содержимое одного файла в другой, дублируя все английские гласные буквы.
Разработаем алгоритм решения данной задачи. Начнем с высокоуровневых шагов:
Поскольку переписывать нужно все символы, то файлы следует открывать в бинарном режиме. Все шаги кроме третьего в данном алгоритме очевидны. Третий же шаг логично оформить в виде отдельной функции, куда в качестве аргументов передать файловые переменные, соответствующие открытым файлам. Программа примет следующий вид:
Функция dublicatVowels() пока не определена, поэтому для тестовых целей, чтобы данная программа запустилась, можно поставить так называемую заглушку для этой функции. Заглушка ничего относящегося к задаче делать не будет, а просто выведет сообщение о том, что там должно быть:
void dublicateVowels(FILE* in, FILE* out) {
printf("Здесь будет дублирование гласных");
}
После запуска программы мы убеждаемся в том, что в нашей программе готово все кроме функции dublicatVowels(). Займемся этой функцией, в которой необходимо пробежаться по всему файлу и выполнить следующие шаги:
В данном алгоритме тривиальными являются все действия кроме проверки буквы на третьем шаге. Эта проверка должна ответить «Да» или «Нет» в зависимости от значения символа. Таким образом, эту проверку разумно вынести в отдельную функцию, которая будет принимать в качестве аргумента проверяемый символ, а возвращать значение логического типа true или false в зависимости от результата проверки. В итоге функция dublicateVowels() примет следующий вид:
В этой функции теперь неопределенна функция isEngVowel(), поэтому для нее можно поставить заглушку, возвращающую true всегда.
bool isEngVowel(char symbol) {
return true;
}
Очевидно, что теперь программа запустится, но будет дублировать все символы. Тем не менее, круг нашей разработки уже существенно сузился, поскольку осталось реализовать только функцию isEngVowel(). Разработаем ее алгоритм:
В этом алгоритме уже все понятно, поэтому можно ее реализовать полностью.
bool isEngVowel(char symbol) {
char engVows[] = "aeiouyAEIOUY";
for (int i=0; i<strlen(engVows); i++) {
if (symbol==engVows[i]) {
return true;
}
}
return false;
}
КОНТРОЛЬНЫЕ ВОПРОСЫ
Дата добавления: 2015-08-17; просмотров: 45 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Вывод файла в обратном порядке | | | И бедной хижине, и полю». |