//А. Лыков, АВТ-309, КР1 "Указатели" #include "stdafx.h" #include using namespace std; //-----------------------------------------------------------7 //Функция подсчитывает сумму цифр в строке (массиве символов) int F7(char *c){ //Формальный параметр функции - указатель на массив символов int nc; //Сумма цифр в строке for (nc = 0; *c != 0; c++) //Пока не дойдем до конца if (*c >= '0' && *c <= '9') //ищем цифры nc = nc + *c - '0'; //и накапливаем сумму return nc; //Возвращаем сумму цифр в строке } //---------------------- -------------------------------------14 //Функция переводит число из шестнадцатеричной системы в десятичную int F14(char *c){ //Формальный параметр функции - указатель на массив символов int s; //Число, переведенное в 10сс for (; *c != 0; c++) //Равномерное движение по массиву символов if (*c >= '0' && *c <= '9' || *c >= 'A' && *c <= 'F') break; for (s = 0; *c >= '0' && *c <= '9' || *c >= 'A' && *c <= 'F'; c++) if (*c >= '0' && *c <= '9') //Поиск цифр. Если цифра от 0 до 9 s = s * 16 + *c - '0'; //переводим ее в 16сс по такой формуле else //иначе s = s * 16 + *c - 'A' + 10; //по этой return s; //Возвращаем переведенное в 10сс число } //------------------------------------------------------------16 int F16(char *c){ //Формальный параметр функции - указатель на массив символов int old, nw; //Логическая переменная, которая показывает наличие слова; кол-во слов for (old = 0, nw = 0; *c != '\0'; c++){ if (*c == ' ') old = 0; //Ищем пробел else { if (old == 0) nw++; old = 1; } //Если след. символ не пробел, нашли слово (old=1), увеличиваем счетчик. } return nw; //Возвращаем количество слов } void main() { setlocale(LC_ALL, "Russian"); //Протестируем функции на данных, введенных вручную: char A[80], B[80], C[80]; printf("Введите строку для подсчета суммы цифр в ней: "); gets(A); printf("Сумма цифр в строке %d\n", F7(A)); printf("\nВведите число в 16сс: "); gets(B); printf("Число в 10сс %d\n", F14(B)); printf("\nВведите строку для подсчета слов в ней: "); gets(C); printf("Количество слов в строке %d\n\n", F16(C)); //На заранее определенных данных: char D[] = { '1', '2', '3', '4', '8', '\0' }; char E[] = { 'A', 'B', 'C', 'D', 'E', '\0' }; char F[] = { 'a', ' ', 'B', 'B', ' ', 'С','\0' }; printf("Сумма цифр в строке %d\n", F7(D)); printf("Число в 10сс %d\n", F14(E)); printf("Количество слов в строке %d\n\n", F16(F)); //Проверим "крайние случаи" char G[] = {'-', '1', '-', '4', '-', '8','\0' }; char H[] = {'O','N','M','K','H','G','\0'}; char I[] = {' ', '\0'}; printf("Сумма цифр в строке %d\n", F7(G)); printf("Число в 10сс %d\n", F14(H)); printf("Количество слов в строке %d\n", F16(I)); getchar(); /* Как и ожидалось, все три функции вернули верный результат при "крайних случаях": F7(G) подсчитала сумму цифр не учитывая '-'; F14(H) вернула 0, т. к числа ONMKHG не существует в 16сс; F16(I) вернула 0 - в строке нет слов. */ }