Заполнить два массива размером 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
для завершения программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д