Заполнить два массива размером 20 и 30 элементов случайным образом буквами латинского алфавита - C (СИ)

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

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

Задачка: Заполнить два массива размером 20 и 30 элементов случайным образом буквами латинского алфавита. Заполнить третий массив теми буквами, которые входят и в первый и во второй массив, четвертый – оставшимися буквами из первого и второго. Провести сортировку полученных массивов. Для контроля результата также сделайте распечатку массивов, в том числе исходного. Код написал с божьей помощью но его у меня не принимают.Преподавателю нужны функции,а я не могу их делать..Уж выручите пожалуйста!!
#include <stdio.h>
#include <stdlib.h>
//#include <conio.h>
#include <math.h>
#include <time.h>
 
#define N1 20
#define N2 30
 
int main()
{
  
  void randomize()
  {
    srand(time(0));
  }
 
  char random(char r)
  {
    return (rand()%r);
  }
 
  void new_item(char *a,int n,char r1,char r2)
  {
    a[n]=random(r2-r1)+r1;
  }
 
  void fill(char *a,int n,char r1,char r2)
  {
    int i;
    a[0]=random(r2-r1)+r1;
    for(i=1;i<n;i++) new_item(a,i,r1,r2);
  }
 
  void print(char *a,int n)
  {
    int i;
    for(i=0;i<n;i++)
      printf("%2c",a[i]);
    puts("");
  }
 
  char a1[N1],a2[N2],a3[N1+N2],a4[N1+N2];
  randomize();
  fill(a1,N1,'a','z');
  fill(a2,N2,'a','z');
  print(a1,N1);
  print(a2,N2);
  
  int ifMatch;
  int par1, par2;
  int i, j, k, q = 0, w = 0;
  for (i = 0; i < N1; ++i) {
      ifMatch = 0;
      for (j = 0; j < N2; ++j) {
          if (a2[j] == a1[i]) {
              par1 = 0;
              for (k = 0; k < q; ++k)
                if (a1[i] == a3[k]) {
                    par1 = 1;
                    break;
                }
              if (par1 == 0) {
                a3[q] = a1[i];
                ++q;
                
              }
              ifMatch = 1;
              break;
          }
      }
      if (ifMatch == 0) {
          par2 = 0;
          for (k = 0; k < w; ++k)
            if (a1[i] == a4[k]) {
                par2 = 1;
                break;
            }
            if (par2 == 0) {
                a4[w] = a1[i];
                ++w;
            }
      }
  }
  for (i = 0; i < N2; ++i) {
      ifMatch = 0;
      for (j = 0; j < q; ++j)
        if (a3[j] == a2[i]) {
            ifMatch = 1;
            break;
        }
      for (j = 0; j < w; ++j)
        if (a4[j] == a2[i]) {
            ifMatch = 1;
            break;
        }
      if (ifMatch == 0) {
          a4[w] = a2[i];
          ++w;
      }
  }
  ifMatch = 1;
  char buf;
  while (ifMatch == 1) {
      ifMatch = 0;
      for (i = 0; i < q - 1; ++i)
        if (a3[i] > a3[i + 1]) {
            buf = a3[i];
            a3[i] = a3[i + 1];
            a3[i + 1] = buf;
            ifMatch = 1;
        }
  }
  ifMatch = 1;
  while (ifMatch == 1) {
      ifMatch = 0;
      for (i = 0; i < w - 1; ++i)
        if (a4[i] > a4[i + 1]) {
            buf = a4[i];
            a4[i] = a4[i + 1];
            a4[i + 1] = buf;
            ifMatch = 1;
        }
  }
  print(a3,q);
  print(a4,w);
  return 0;
}

Решение задачи: «Заполнить два массива размером 20 и 30 элементов случайным образом буквами латинского алфавита»

textual
Листинг программы
#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;
}

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

  1. Объединение двух массивов в один с использованием операции || (логическое ИЛИ).
  2. Заполнение двух массивов случайными буквами латинского алфавита.
  3. Сравнение двух массивов с использованием функции Compare.
  4. Использование функции Alph для подсчета количества букв в каждом массиве.
  5. Использование функции Print для вывода содержимого массивов на экран.
  6. Использование функции RandomFill для заполнения массивов случайными значениями.
  7. Использование функции Random для генерации случайных чисел.
  8. Использование функции srand для инициализации генератора случайных чисел.
  9. Использование функции And для сравнения двух значений с использованием логического И.
  10. Использование функции Xor для сравнения двух значений с использованием логического ИЛИ.
  11. Объединение двух массивов в один с использованием операции + (конкатенация).
  12. Использование функции memset для очистки памяти.
  13. Использование функции strlen для определения длины строки.
  14. Использование функции strcpy для копирования строки.
  15. Использование функции atoi для преобразования строки в целое число.
  16. Использование функции isalpha для проверки, является ли символ буквой.
  17. Использование функции tolower для преобразования символа в нижний регистр.
  18. Использование функции printf для вывода информации на экран.
  19. Использование функции scanf для ввода информации с клавиатуры.
  20. Использование функции exit для завершения программы.

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


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

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

8   голосов , оценка 4.375 из 5
Похожие ответы