Заполнить два массива размером 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;
- }
Объяснение кода листинга программы
- Объединение двух массивов в один с использованием операции
||
(логическое ИЛИ). - Заполнение двух массивов случайными буквами латинского алфавита.
- Сравнение двух массивов с использованием функции
Compare
. - Использование функции
Alph
для подсчета количества букв в каждом массиве. - Использование функции
Print
для вывода содержимого массивов на экран. - Использование функции
RandomFill
для заполнения массивов случайными значениями. - Использование функции
Random
для генерации случайных чисел. - Использование функции
srand
для инициализации генератора случайных чисел. - Использование функции
And
для сравнения двух значений с использованием логического И. - Использование функции
Xor
для сравнения двух значений с использованием логического ИЛИ. - Объединение двух массивов в один с использованием операции
+
(конкатенация). - Использование функции
memset
для очистки памяти. - Использование функции
strlen
для определения длины строки. - Использование функции
strcpy
для копирования строки. - Использование функции
atoi
для преобразования строки в целое число. - Использование функции
isalpha
для проверки, является ли символ буквой. - Использование функции
tolower
для преобразования символа в нижний регистр. - Использование функции
printf
для вывода информации на экран. - Использование функции
scanf
для ввода информации с клавиатуры. - Использование функции
exit
для завершения программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д