C/C++

Помогите с программированием на Си Работа с последовательностями элементов

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define BUFFER 25
#define LIMIT 1000
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
void fill(int* box, size_t n) {
size_t i = 0, j = 0;
int value = 0;
for (i = 0; i < n; ++i) {
do {
value = RAND(1, LIMIT);
for (j = 0; j < i; ++j) if (value == box[j]) break;
if (j == i) {
box[i] = value;
break;
}
} while (1);
}
}
void show(int* box, size_t n) {
size_t i = 0;
for (i = 0; i < n; ++i) printf("%i ", box[i]);
puts("");
}
int main(void) {
int a[BUFFER];
int* b = NULL;
size_t n = 0;
srand((unsigned)time(NULL));
fill(a, BUFFER);
show(a, BUFFER);
printf("n: ");
scanf_s("%u", &n);
if (n > LIMIT) n = LIMIT;
b = (int*)malloc(n * sizeof(int));
fill(b, n);
show(b, n);
free(b);
system("pause > nul");
return 0;
}
Ержан Омаров
Ержан Омаров
96 998
Лучший ответ
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<unistd.h>
#define MAX 50

//функция пользователя
//для создания последовательности
// длиной n из неповторяющихся
//целочисленных значений:
void line(int *b,int n,int max)
{
srand(time(NULL));
for(int i = 0; i < n; i++)
{//for i
b[i]=rand()%max;
for(int j = 0; j < i; j++)
{
if(b[i]==b[j])
while(b[i]==b[j])
b[i]=rand()%max;
}
}//for i

//упорядочиваем b1...bn
//по возрастанию, меняя
//элементы массива местами:
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
if(i!=j && b[i]<b[j])
b[i]^=b[j]^=b[i]^=b[j];

}

int main()
{
int n, a[25], *b, flag=0;
printf("Enter limit for b1...bn n = ");
scanf("%d",&n);

//формируем случайные значения
//для a1...a25 в диапозоне
//от 0 до MAX
line(a,25,MAX);

//создаём динамический массив
//для b1...bn:
b=(int*)malloc(n*sizeof(int));
//если массив b1...bn создан,
//то далее:
if(b)
{//if b
//формируем случайные значения
//для b1...bn в диапозоне
//от 0 до MAX
line(b,n,MAX);
//выводим a1...a25:
printf("\n\na1...a25:\n");
for(int i = 0; i < 25; i++)
printf("%d ",a[i]);

//выводим b1...bn:
printf("\n\nb1...b%d:\n",n);
for(int i = 0; i < n; i++)
printf("%d ",b[i]);

//сравниваем элементы
//обеих последовательностей
//и выводим несовпадающие значения
//из b1...bn:
printf("\n\nIn b1...b%d values don't match:\n",n);
for(int i = 0; i < n; i++)
{
flag=0;
for(int j = 0; j < 25; j++)
{
if(b[i]==a[i]) flag=1;
}
//если совпадений между значением
//и a1...a25 не найдено, то выводим:
if(!flag) printf("%d ",b[i]);
}
//освобождаем память кучи
//от массива b1...bn:
free(b);
}//if b
else
printf("\nError. Array not created.");
fflush(stdout);//сброс буфера
sleep(10);//пауза
return 0;
}
Кревин Иван
Кревин Иван
37 945