Прокомментировать код - C (СИ) (74509)

Узнай цену своей работы

Формулировка задачи:

Не понимаю функций,которые использованы в данном коде. Помогите пожалуйста! Просто опишите каждую функцию.. Спасибо большое!)
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <ctype.h>
  5. #define SIZE_A 20
  6. #define SIZE_B 30
  7. #define SIZE_ALPH 26
  8. //-----------------------------------------------------------------------------
  9. void Randomize() {
  10. srand(time(NULL));
  11. }
  12. //-----------------------------------------------------------------------------
  13. int Random(int min, int max) {
  14. return rand() % (max - min + 1) + min;
  15. }
  16. //-----------------------------------------------------------------------------
  17. void RandomFill(char array[], size_t size) {
  18. size_t i;
  19. for (i = 0; i < size; ++i) {
  20. array[i] = Random('a', 'z');
  21. }
  22. }
  23. //-----------------------------------------------------------------------------
  24. void Print(const char array[], size_t size) {
  25. size_t i;
  26. for (i = 0; i < size; ++i) {
  27. printf("%c", array[i]);
  28. }
  29. printf("\n");
  30. }
  31. //-----------------------------------------------------------------------------
  32. void Alph(const char array[], size_t size, int alph[]) {
  33. size_t i;
  34. for (i = 0; i < size; ++i) {
  35. if (isalpha(array[i])) {
  36. alph[tolower(array[i]) - 'a'] = 1;
  37. }
  38. }
  39. }
  40. //-----------------------------------------------------------------------------
  41. int And(int a, int b) {
  42. return a && b;
  43. }
  44. //-----------------------------------------------------------------------------
  45. int Xor(int a, int b) {
  46. return a != b;
  47. }
  48. //-----------------------------------------------------------------------------
  49. size_t Compare(const char a[], size_t sizeA, const char b[], size_t sizeB,
  50. char result[], int (*Cmp)(int, int)) {
  51. int alphA[SIZE_ALPH] = { 0 };
  52. int alphB[SIZE_ALPH] = { 0 };
  53. size_t count = 0;
  54. size_t i;
  55. Alph(a, sizeA, alphA);
  56. Alph(b, sizeB, alphB);
  57. for (i = 0; i < SIZE_ALPH; ++i) {
  58. if (Cmp(alphA[i], alphB[i])) {
  59. result[count++] = i + 'a';
  60. }
  61. }
  62. return count;
  63. }
  64. //-----------------------------------------------------------------------------
  65. int main() {
  66. char a[SIZE_A], b[SIZE_B], c[SIZE_ALPH], d[SIZE_ALPH];
  67. size_t sizeC, sizeD;
  68. Randomize();
  69. RandomFill(a, SIZE_A);
  70. RandomFill(b, SIZE_B);
  71. sizeC = Compare(a, SIZE_A, b, SIZE_B, c, And);
  72. sizeD = Compare(a, SIZE_A, b, SIZE_B, d, Xor);
  73. printf("A: "); Print(a, SIZE_A);
  74. printf("B: "); Print(b, SIZE_B);
  75. printf("C: "); Print(c, sizeC);
  76. printf("D: "); Print(d, sizeD);
  77. return 0;
  78. }

Решение задачи: «Прокомментировать код»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <ctype.h>
  5.  
  6. #define SIZE_A    20 // Размер массива A
  7. #define SIZE_B    30 // Размер массива B
  8. #define SIZE_ALPH 26 // Количество букв в алфавите
  9.  
  10. //-----------------------------------------------------------------------------
  11. // Устанавливаем стартовое число для генерации псевдослучайных чисел
  12. // исходя из системного времени
  13. void Randomize() {
  14.     srand(time(NULL));
  15. }
  16. //-----------------------------------------------------------------------------
  17. // Функция генерирует и возвращает случайное число в интервале [min, max]
  18. int Random(int min, int max) {
  19.     return rand() % (max - min + 1) + min;
  20. }
  21. //-----------------------------------------------------------------------------
  22. // Заполнение массива array случайными символами латинского алфавита
  23. // (все символы в нижнем регистре)
  24. void RandomFill(char array[], size_t size) {
  25.     size_t i;
  26.     for (i = 0; i < size; ++i) {
  27.         array[i] = Random('a', 'z');
  28.     }
  29. }
  30. //-----------------------------------------------------------------------------
  31. // Функция выводит в стандартный поток вывода все элементы массива array
  32. void Print(const char array[], size_t size) {
  33.     size_t i;
  34.     for (i = 0; i < size; ++i) {
  35.         printf("%c", array[i]);
  36.     }
  37.     printf("\n");
  38. }
  39. //-----------------------------------------------------------------------------
  40. // Функция определяет набор букв/символов из которых состоит строка array
  41. void Alph(const char array[], size_t size, int alph[]) {
  42.     size_t i;
  43.     for (i = 0; i < size; ++i) {
  44.         // Если данный символ является буквой
  45.         if (isalpha(array[i])) {
  46.             // Элементу с порядковым номером в алфавите
  47.             // ставим признак существования
  48.             alph[tolower(array[i]) - 'a'] = 1;
  49.         }
  50.     }
  51. }
  52. //-----------------------------------------------------------------------------
  53. // Функция возвращает 1 в случае если a и b не равны нулю
  54. int And(int a, int b) {
  55.     return a && b;
  56. }
  57. //-----------------------------------------------------------------------------
  58. // Функция возвращает 1 в случае если a и b не равны
  59. int Xor(int a, int b) {
  60.     return a != b;
  61. }
  62. //-----------------------------------------------------------------------------
  63. // Функция сравнивает имеющиеся символы в массивах a и b, и результат
  64. // формирует в result. Указатель на функцию Cmp определяет правило сравнения
  65. // символов в алфавите строк.
  66. size_t Compare(const char a[], size_t sizeA, const char b[], size_t sizeB,
  67.                char result[], int (*Cmp)(int, int)) {
  68.  
  69.     int alphA[SIZE_ALPH] = { 0 }; // Используемые символы в массиве a
  70.     int alphB[SIZE_ALPH] = { 0 }; // Используемые символы в массиве b
  71.     size_t count = 0;             // Количество символов добавленых в result
  72.     size_t i;
  73.  
  74.     Alph(a, sizeA, alphA); // Получаем список имеющихся символов в массиве a
  75.     Alph(b, sizeB, alphB); // Получаем список имеющихся символов в массиве a
  76.  
  77.     for (i = 0; i < SIZE_ALPH; ++i) {
  78.         // Если наличие символа в массиве a и массиве b удовлетворяет
  79.         // условию заложенного в функцию, то добавляем этот символ
  80.         // в результирующую строку
  81.         if (Cmp(alphA[i], alphB[i])) {
  82.             result[count++] = i + 'a';
  83.         }
  84.     }
  85.  
  86.     return count;
  87. }
  88. //-----------------------------------------------------------------------------
  89.  
  90. int main() {
  91.     char a[SIZE_A], b[SIZE_B], c[SIZE_ALPH], d[SIZE_ALPH];
  92.     size_t sizeC, sizeD;
  93.  
  94.     Randomize();
  95.  
  96.     RandomFill(a, SIZE_A);
  97.     RandomFill(b, SIZE_B);
  98.  
  99.     sizeC = Compare(a, SIZE_A, b, SIZE_B, c, And);
  100.     sizeD = Compare(a, SIZE_A, b, SIZE_B, d, Xor);
  101.  
  102.     printf("A: "); Print(a, SIZE_A);
  103.     printf("B: "); Print(b, SIZE_B);
  104.  
  105.     printf("C: "); Print(c, sizeC);
  106.     printf("D: "); Print(d, sizeD);
  107.  
  108.     return 0;
  109. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут