Прокомментировать код - 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;
}

Объяснение кода листинга программы

  1. Объединение (конкатенация) строк в C осуществляется с помощью оператора +
  2. В коде используется функция isalpha(), которая возвращает 1, если символ является буквой, и 0 в противном случае
  3. В функции Alph используется функция tolower(), которая преобразует символ в нижний регистр
  4. Функция And возвращает 1, если оба аргумента равны 1
  5. Функция Xor возвращает 1, если оба аргумента не равны друг другу
  6. В функции Compare используется указатель на функцию Cmp, который определяет правило сравнения символов в алфавите строк
  7. В функции Compare создаются массивы alphA и alphB, которые содержат информацию о том, какие символы используются в строках a и b
  8. В функции Compare используется цикл for для прохода по всем символам алфавита и добавления соответствующих символов в результирующую строку
  9. В функции Compare используется функция printf для вывода результата на экран
  10. В функции main создаются массивы a, b, c и d для хранения строк
  11. В функции main вызываются функции RandomFill, Compare, Print и Randomize
  12. В функции main используются переменные SIZE_A, SIZE_B и SIZE_ALPH для определения размера массивов
  13. В функции main используются переменные i, j и k для обозначения индексов массивов
  14. В функции main используется функция srand для инициализации генератора случайных чисел
  15. В функции main используется функция time(NULL) для получения текущего времени
  16. В функции main используется оператор break для выхода из цикла
  17. В функции main используется оператор return для завершения работы функции
  18. В функции main используется функция printf для вывода на экран информации о массивах a и b
  19. В функции main используется функция printf для вывода на экран информации о массивах c и d
  20. В функции main используется функция printf для вывода на экран информации о массивах a, b, c и d

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5