Прокомментировать код - C (СИ) (74509)
Формулировка задачи:
Не понимаю функций,которые использованы в данном коде.
Помогите пожалуйста!
Просто опишите каждую функцию..
Спасибо большое!)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#define SIZE_A 20
#define SIZE_B 30
#define SIZE_ALPH 26
//-----------------------------------------------------------------------------
void Randomize() {
srand(time(NULL));
}
//-----------------------------------------------------------------------------
int Random(int min, int max) {
return rand() % (max - min + 1) + min;
}
//-----------------------------------------------------------------------------
void RandomFill(char array[], size_t size) {
size_t i;
for (i = 0; i < size; ++i) {
array[i] = Random('a', 'z');
}
}
//-----------------------------------------------------------------------------
void Print(const char array[], size_t size) {
size_t i;
for (i = 0; i < size; ++i) {
printf("%c", array[i]);
}
printf("\n");
}
//-----------------------------------------------------------------------------
void Alph(const char array[], size_t size, int alph[]) {
size_t i;
for (i = 0; i < size; ++i) {
if (isalpha(array[i])) {
alph[tolower(array[i]) - 'a'] = 1;
}
}
}
//-----------------------------------------------------------------------------
int And(int a, int b) {
return a && b;
}
//-----------------------------------------------------------------------------
int Xor(int a, int b) {
return a != b;
}
//-----------------------------------------------------------------------------
size_t Compare(const char a[], size_t sizeA, const char b[], size_t sizeB,
char result[], int (*Cmp)(int, int)) {
int alphA[SIZE_ALPH] = { 0 };
int alphB[SIZE_ALPH] = { 0 };
size_t count = 0;
size_t i;
Alph(a, sizeA, alphA);
Alph(b, sizeB, alphB);
for (i = 0; i < SIZE_ALPH; ++i) {
if (Cmp(alphA[i], alphB[i])) {
result[count++] = i + 'a';
}
}
return count;
}
//-----------------------------------------------------------------------------
int main() {
char a[SIZE_A], b[SIZE_B], c[SIZE_ALPH], d[SIZE_ALPH];
size_t sizeC, sizeD;
Randomize();
RandomFill(a, SIZE_A);
RandomFill(b, SIZE_B);
sizeC = Compare(a, SIZE_A, b, SIZE_B, c, And);
sizeD = Compare(a, SIZE_A, b, SIZE_B, d, Xor);
printf("A: "); Print(a, SIZE_A);
printf("B: "); Print(b, SIZE_B);
printf("C: "); Print(c, sizeC);
printf("D: "); Print(d, sizeD);
return 0;
}Решение задачи: «Прокомментировать код»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#define SIZE_A 20 // Размер массива A
#define SIZE_B 30 // Размер массива B
#define SIZE_ALPH 26 // Количество букв в алфавите
//-----------------------------------------------------------------------------
// Устанавливаем стартовое число для генерации псевдослучайных чисел
// исходя из системного времени
void Randomize() {
srand(time(NULL));
}
//-----------------------------------------------------------------------------
// Функция генерирует и возвращает случайное число в интервале [min, max]
int Random(int min, int max) {
return rand() % (max - min + 1) + min;
}
//-----------------------------------------------------------------------------
// Заполнение массива array случайными символами латинского алфавита
// (все символы в нижнем регистре)
void RandomFill(char array[], size_t size) {
size_t i;
for (i = 0; i < size; ++i) {
array[i] = Random('a', 'z');
}
}
//-----------------------------------------------------------------------------
// Функция выводит в стандартный поток вывода все элементы массива array
void Print(const char array[], size_t size) {
size_t i;
for (i = 0; i < size; ++i) {
printf("%c", array[i]);
}
printf("\n");
}
//-----------------------------------------------------------------------------
// Функция определяет набор букв/символов из которых состоит строка array
void Alph(const char array[], size_t size, int alph[]) {
size_t i;
for (i = 0; i < size; ++i) {
// Если данный символ является буквой
if (isalpha(array[i])) {
// Элементу с порядковым номером в алфавите
// ставим признак существования
alph[tolower(array[i]) - 'a'] = 1;
}
}
}
//-----------------------------------------------------------------------------
// Функция возвращает 1 в случае если a и b не равны нулю
int And(int a, int b) {
return a && b;
}
//-----------------------------------------------------------------------------
// Функция возвращает 1 в случае если a и b не равны
int Xor(int a, int b) {
return a != b;
}
//-----------------------------------------------------------------------------
// Функция сравнивает имеющиеся символы в массивах a и b, и результат
// формирует в result. Указатель на функцию Cmp определяет правило сравнения
// символов в алфавите строк.
size_t Compare(const char a[], size_t sizeA, const char b[], size_t sizeB,
char result[], int (*Cmp)(int, int)) {
int alphA[SIZE_ALPH] = { 0 }; // Используемые символы в массиве a
int alphB[SIZE_ALPH] = { 0 }; // Используемые символы в массиве b
size_t count = 0; // Количество символов добавленых в result
size_t i;
Alph(a, sizeA, alphA); // Получаем список имеющихся символов в массиве a
Alph(b, sizeB, alphB); // Получаем список имеющихся символов в массиве a
for (i = 0; i < SIZE_ALPH; ++i) {
// Если наличие символа в массиве a и массиве b удовлетворяет
// условию заложенного в функцию, то добавляем этот символ
// в результирующую строку
if (Cmp(alphA[i], alphB[i])) {
result[count++] = i + 'a';
}
}
return count;
}
//-----------------------------------------------------------------------------
int main() {
char a[SIZE_A], b[SIZE_B], c[SIZE_ALPH], d[SIZE_ALPH];
size_t sizeC, sizeD;
Randomize();
RandomFill(a, SIZE_A);
RandomFill(b, SIZE_B);
sizeC = Compare(a, SIZE_A, b, SIZE_B, c, And);
sizeD = Compare(a, SIZE_A, b, SIZE_B, d, Xor);
printf("A: "); Print(a, SIZE_A);
printf("B: "); Print(b, SIZE_B);
printf("C: "); Print(c, sizeC);
printf("D: "); Print(d, sizeD);
return 0;
}
Объяснение кода листинга программы
- Объединение (конкатенация) строк в C осуществляется с помощью оператора
+ - В коде используется функция isalpha(), которая возвращает 1, если символ является буквой, и 0 в противном случае
- В функции Alph используется функция tolower(), которая преобразует символ в нижний регистр
- Функция And возвращает 1, если оба аргумента равны 1
- Функция Xor возвращает 1, если оба аргумента не равны друг другу
- В функции Compare используется указатель на функцию Cmp, который определяет правило сравнения символов в алфавите строк
- В функции Compare создаются массивы alphA и alphB, которые содержат информацию о том, какие символы используются в строках a и b
- В функции Compare используется цикл for для прохода по всем символам алфавита и добавления соответствующих символов в результирующую строку
- В функции Compare используется функция printf для вывода результата на экран
- В функции main создаются массивы a, b, c и d для хранения строк
- В функции main вызываются функции RandomFill, Compare, Print и Randomize
- В функции main используются переменные SIZE_A, SIZE_B и SIZE_ALPH для определения размера массивов
- В функции main используются переменные i, j и k для обозначения индексов массивов
- В функции main используется функция srand для инициализации генератора случайных чисел
- В функции main используется функция time(NULL) для получения текущего времени
- В функции main используется оператор break для выхода из цикла
- В функции main используется оператор return для завершения работы функции
- В функции main используется функция printf для вывода на экран информации о массивах a и b
- В функции main используется функция printf для вывода на экран информации о массивах c и d
- В функции main используется функция printf для вывода на экран информации о массивах a, b, c и d