Лекции по проге / 13_Комбинация функций, определяемых пользователем
.pdf
Пример последовательного вызова функций без зависимости по данным
// Удаляем из массива все простые числа i = 0;
while(i < N) // обходим все элементы массива
{
if( isSimpleNumber( mass[i] ) ) // |
эл-т массива - |
|
{ |
// |
простое число |
//Удаляем элемент путем сдвига правостоящих
//элементов влево
shiftArray( mass+i+1, N, -1 ); N--;
// Переходить к следующему элементу не нужно
}
else // элемент массива - не простое число { i++; } // переходим к следующему эл-ту
31 }
Пример последовательного вызова функций без зависимости по данным
.........
// Печатаем результирующий массив printf("\nResult array: \t"); printArray( mass, N );
getch(); return 0;
}
32
Задание на комбинирование функций
Дан многострочный текст char text[MAX_ROW][MAX_LENGTH+1]
Подсчитать максимальное кол-во согласных букв
вслове, если известно, что:
−слово – это непрерывная последовательность букв;
−разделителями слов могут быть точка, запятая и пробел;
−последовательности символов, не являющиеся словами (т.е. содержащие недопустимые сим-
33 |
волы), игнорировать. |
Задание на комбинирование функций
Нарисуйте дерево вызовов для указанной задачи, если известен перечень функций:
#define MAX_WORDS 20 // макс. кол-во слов в строке #define MAX_LENGTH 25 // макс. длина слова
/*!
* Ищет максимум двух значений
*\param [in] a, b - анализируемые значения *\return - максимум двух значений
*/
int max(int a, int b);
34 .........
Задание на комбинирование функций
.........
/*!
* Выделяет слова в строке, если слово — это непрерывная последовательность букв, а разделителями могут быть только указанные символы
*\param [in] str — анализируемая строка
*\param [in] delim — строка, состоящая из разделителей *\param [out] words — выделенные слова
*\return – кол-во выделенных слов */
int extractWords( const char *str, const char *delim, char words[MAX_WORDS][MAX_LENGTH+1]);
.........
35
Задание на комбинирование функций
.........
/*!
* Подсчитывает кол-во вхождений заданных символов в строку
*\param [in] str — анализируемая строка *\param [in] symbols — искомые символы *\return – кол-во вхождений символов */
int symbolEntry( const char *str, const char *symbols);
.........
36
Задание на комбинирование функций
.........
/*!
* Определяет, является ли строка словом, если слово — это непрерывная последовательность букв
*\param [in] str - анализируемая строка
*\return – признак того, что строка является словом */
int isWord(const char *str);
37
Комбинация вызовов функций
main
extractWords слово symbolEntry |
кол-во |
max |
|
согласных |
|
|
букв в |
|
isWord |
слове |
|
38
Задание на комбинирование функций
Доопределите дерево вызовов библиотечными функциями
|
char *strncpy(char *s, |
копирует не более n символов строки ct в строку s |
|
const char *ct, int n) |
|
|
|
|
|
int strncmp(const char *cs, |
сравнивает не более n символов строк cs и ct |
|
const char *ct, int n) |
|
|
|
|
|
int isalpha(int c) |
проверяет, является ли символ c буквой |
|
char *strrchr(const char *cs, |
возвращает указатель на последнее вхождение символа c в |
|
int c) |
строку cs |
|
size_t strspn(const char *cs, |
возвращает длину начального сегмента cs, состоящего из |
|
const char *ct) |
символов, входящих в строку ct |
|
size_t strcspn(const char *cs, |
возвращает длину начального сегмента cs, состоящего из |
|
const char *ct) |
символов, не входящих в строку ct |
|
char *strpbrk(const char *cs, |
возвращает указатель в строке cs на первый символ, |
|
const char *ct) |
который совпал с одним из символов, входящих в строку ct |
|
size_t strlen(const char *cs) |
возвращает длину строки cs |
39 |
char *strtok(char *cs, |
разбивает строку sна лексемы. Ограничителем лексемы |
const char *ct) |
служит любой символ из строки ct |
|
|
|
Комбинация вызовов функций
main
|
extractWords слово |
symbolEntry |
кол-во |
max |
|
|
|
согласных |
|
|
|
|
букв в |
|
strtok |
послед-ть isWord |
strchr |
слове |
|
|
символов, |
|
|
|
|
ограниченная |
|
|
|
|
разделит-ми |
|
|
|
40 |
isalpha |
|
|
|
|
|
|
|
