Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 24.10.2019
Сообщений: 16
1

Новый массив из из элементов массивов, присутствующих в них обоих

26.12.2019, 15:58. Показов 2357. Ответов 8

Author24 — интернет-сервис помощи студентам
Даны два целочисленных массива: P (46) и Q (39). Сформировать новый массив из элементов массивов P и Q, присутствующих в них обоих, из исходных массивов эти элементы удалить. В новом массиве все значения должны быть уникальными.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2019, 15:58
Ответы с готовыми решениями:

Сформировать новый массив из элементов массивов P и Q, присутствующих в них обоих
Даны два целочисленных массива: P(46) и Q(39). Сформировать новый массив из элементов массивов P и...

Создать новый массив, содержащий информацию обоих заданных массивов
Ребят , хелпаните пожалуйста =) Задано два массива записей . Первый содержит данные с фамилиями...

Найти номера элементов двух заданных массивов меньше заданного числа и из них образовать новый массив
Заданы 2 массива X(x1, x2, ..., xn) и Y(y1, y2, ..., yn). Найти номера элементов массивов, для...

Сформировать третий массив из отрицательных элементов первого массива и элементов обоих массивов, больших первого
Сформировать третий массив из отрицательных элементов первого массива и элементов обоих массивов,...

8
из племени тумба-юбма
2482 / 1804 / 418
Регистрация: 29.11.2015
Сообщений: 8,755
Записей в блоге: 15
26.12.2019, 16:42 2
Цитата Сообщение от rokajero Посмотреть сообщение
В новом массиве все значения должны быть уникальными
Уточняющий вопрос, например:
A{1,2,3,4,5} и B{1,2,3,4,5}, значит С {1,2,3,4,5}
или
A{1,2,3,4,5} и B{6,7,8,9,0}, значит С {1,2,3,4,5,6,7,8,9,0}
или
A{1,2,3,3,2} и B{1,2,3,4,5}, значит С {1,2,3,4,5}
или
A{1,2,3,3,2} и B{4,5,5,7,8}, значит С {1,2,3,4,5,7,8}
Может быть любой вариант, или только два первых?
0
0 / 0 / 0
Регистрация: 24.10.2019
Сообщений: 16
26.12.2019, 16:49  [ТС] 3
Как я понял, там немного другая суть задания. Например:
A{1,9,6,3,3,5,4} и B{3,1,7,6,5,4,8} -> С {1,6,3,5,4},а массивы A и B примут вид -> A{9,3} и B{7,8}
0
из племени тумба-юбма
2482 / 1804 / 418
Регистрация: 29.11.2015
Сообщений: 8,755
Записей в блоге: 15
26.12.2019, 18:01 4
rokajero, короче, массив С я понимаю как сделать, а вот как удалять из массивов элементы, я не знаю.
0
0 / 0 / 0
Регистрация: 24.10.2019
Сообщений: 16
26.12.2019, 18:12  [ТС] 5
О, а можешь тогда написать как сделать массив С если не сложно ? Потому что у меня есть уже догадки насчет удаления
0
из племени тумба-юбма
2482 / 1804 / 418
Регистрация: 29.11.2015
Сообщений: 8,755
Записей в блоге: 15
26.12.2019, 18:22 6
Могу, но это будет не быстро, возможно кто то быстрей сделает причем сразу все задание, целиком.
0
Злостный нарушитель
9540 / 5171 / 1181
Регистрация: 12.03.2015
Сообщений: 24,407
26.12.2019, 19:03 7
Я особо не вглядывался. Проверяй, так, не?

Новый массив из из элементов массивов, присутствующих в них обоих


Ещё вариант:

Новый массив из из элементов массивов, присутствующих в них обоих
0
0 / 0 / 0
Регистрация: 24.10.2019
Сообщений: 16
26.12.2019, 19:16  [ТС] 8
Вроде все верно получилось !
0
Злостный нарушитель
9540 / 5171 / 1181
Регистрация: 12.03.2015
Сообщений: 24,407
26.12.2019, 19:58 9
Лучший ответ Сообщение было отмечено rokajero как решение

Решение

Цитата Сообщение от rokajero Посмотреть сообщение
Вроде все верно получилось !
Ну иди сдавай тогда.
Благодари судьбу за то, что мне сегодня скучно на работе было.
Меня не благодари.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
#define RAND_X(a, b) (a + rand() % (b - a))
#define A -20
#define B  20
// это си
#define true  1
#define false 0
typedef int bool; 
 
typedef struct
{
  unsigned count;
  int* ptr;
} TDynArray, *PDynArray;
 
// изменение размера
PDynArray resize(PDynArray x, const unsigned new_count)
{
  // если не создан
  if (!x)
  {
    x = (PDynArray)calloc(1, sizeof(TDynArray));
    x->count = 0;
    x->ptr = NULL;
    return resize(x, new_count);
  }
 
  // если создан
  if (x->count != new_count)
  {
    x->count = new_count;
    x->ptr = (int*)realloc(x->ptr, sizeof(int) * new_count);
  }
 
  return x;
}
 
// клонирование с выделением памяти
PDynArray clone(const PDynArray src)
{
  PDynArray dest = resize(NULL, src->count);
  memcpy(dest->ptr, src->ptr, sizeof(int) * dest->count);
 
  return dest;
}
 
// удаление из массива всех элементов, равных value
PDynArray del_value(PDynArray x, const int value)
{
  PDynArray temp = clone(x);
  int* x_ptr = x->ptr;
  unsigned total = 0;
 
  for (unsigned idx = 0; idx != temp->count; idx++)
    if (temp->ptr[idx] != value)
    {
      total++;
      *x_ptr++ = temp->ptr[idx];
    }
 
  free(temp);
  return resize(x, total);
}
 
// выяснение присутствия элемента value в массиве
bool contains(PDynArray x, const int value)
{
  unsigned idx = x->count;
  while (idx--) if (x->ptr[idx] == value) return true;
  return false;
}
 
// добавление уникального элемента в конец массива
PDynArray add_value(PDynArray x, const int value)
{
  if (!contains(x, value))
  {
    x = resize(x, 1 + x->count);
    x->ptr[x->count - 1] = value;
  }
  
  return x;
}
 
// выделение памяти и забивание рандомными занчениями
PDynArray create(unsigned count)
{
  PDynArray x = resize(NULL, count);
  for (unsigned idx = 0; idx != x->count; idx++)
    x->ptr[idx] = RAND_X(A, B);
  return x;
}
 
// вывод массива на консоль
void show(PDynArray x, const char* name)
{
  printf(" %s(%u): ", name, x->count);
  for (unsigned idx = 0; idx != x->count; idx++) printf(" %d", x->ptr[idx]);
  printf("\n\n");
}
 
/* Даны два целочисленных массива: P (46) и Q (39).
   Сформировать новый массив из элементов массивов P и Q, присутствующих
   в них обоих, из исходных массивов эти элементы удалить.
   В новом массиве все значения должны быть уникальными. */
 
int main()
{
    srand(time(NULL));
    PDynArray P = create(46), Q = create(39);
    show(P, "P");
    show(Q, "Q");
    
    printf("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n");
    
    PDynArray R = create(0);
    
    for (unsigned idx = 0; idx != P->count; idx++)
      if (contains(Q, P->ptr[idx]))
        R = add_value(R, P->ptr[idx]);
 
    show(R, "R");
    
    // удаление найденных элементов из исходных массивов
    for (unsigned idx = 0; idx != R->count; idx++) 
    {
      P = del_value(P, R->ptr[idx]);
      Q = del_value(Q, R->ptr[idx]);
    }
    
    show(P, "P");
    show(Q, "Q");
    
    free(P); free(Q); free(R);
    getch();
    return 0;
}
Добавлено через 24 минуты
UPD: Я там накосячил с освобождением памяти. На результат не влияет, но как-то не комильфо.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
#define RAND_X(a, b) (a + rand() % (b - a))
#define A -20
#define B  20
// это си
#define true  1
#define false 0
typedef int bool; 
 
typedef struct
{
  unsigned count;
  int* ptr;
} TDynArray, *PDynArray;
 
// изменение размера
PDynArray resize(PDynArray x, const unsigned new_count)
{
  // если не создан
  if (!x)
  {
    x = (PDynArray)calloc(1, sizeof(TDynArray));
    x->count = 0;
    x->ptr = NULL;
    return resize(x, new_count);
  }
 
  // если создан
  if (x->count != new_count)
  {
    x->count = new_count;
    x->ptr = (int*)realloc(x->ptr, sizeof(int) * new_count);
  }
 
  return x;
}
 
// клонирование с выделением памяти
PDynArray clone(const PDynArray src)
{
  PDynArray dest = resize(NULL, src->count);
  memcpy(dest->ptr, src->ptr, sizeof(int) * dest->count);
 
  return dest;
}
 
// удаление из массива всех элементов, равных value
PDynArray del_value(PDynArray x, const int value)
{
  PDynArray temp = clone(x);
  int* x_ptr = x->ptr;
  unsigned total = 0;
 
  for (unsigned idx = 0; idx != temp->count; idx++)
    if (temp->ptr[idx] != value)
    {
      total++;
      *x_ptr++ = temp->ptr[idx];
    }
 
  free(temp);
  return resize(x, total);
}
 
// выяснение присутствия элемента value в массиве
bool contains(PDynArray x, const int value)
{
  unsigned idx = x->count;
  while (idx--) if (x->ptr[idx] == value) return true;
  return false;
}
 
// добавление уникального элемента в конец массива
PDynArray add_value(PDynArray x, const int value)
{
  if (!contains(x, value))
  {
    x = resize(x, 1 + x->count);
    x->ptr[x->count - 1] = value;
  }
  
  return x;
}
 
// выделение памяти и забивание рандомными занчениями
PDynArray create(unsigned count)
{
  PDynArray x = resize(NULL, count);
  for (unsigned idx = 0; idx != x->count; idx++)
    x->ptr[idx] = RAND_X(A, B);
  return x;
}
 
// освобождение выделенной памяти
void destroy(PDynArray x)
{
  if (!x) return;
  if (!x->ptr) free(x->ptr);
  free(x);
}
 
// вывод массива на консоль
void show(PDynArray x, const char* name)
{
  printf(" %s(%u): ", name, x->count);
  for (unsigned idx = 0; idx != x->count; idx++) printf(" %d", x->ptr[idx]);
  printf("\n\n");
}
 
/* Даны два целочисленных массива: P (46) и Q (39).
   Сформировать новый массив из элементов массивов P и Q, присутствующих
   в них обоих, из исходных массивов эти элементы удалить.
   В новом массиве все значения должны быть уникальными. */
 
int main()
{
    srand(time(NULL));
    PDynArray P = create(46), Q = create(39);
    show(P, "P");
    show(Q, "Q");
    
    printf("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n");
    
    PDynArray R = create(0);
    
    for (unsigned idx = 0; idx != P->count; idx++)
      if (contains(Q, P->ptr[idx]))
        R = add_value(R, P->ptr[idx]);
 
    show(R, "R");
    
    // удаление найденных элементов из исходных массивов
    for (unsigned idx = 0; idx != R->count; idx++) 
    {
      P = del_value(P, R->ptr[idx]);
      Q = del_value(Q, R->ptr[idx]);
    }
    
    show(P, "P");
    show(Q, "Q");
    
    destroy(P); destroy(Q); destroy(R);  // <----------- вот так надо
    getch();
    return 0;
}
Добавлено через 7 минут
сорри, поспешил
C++
1
2
3
4
5
6
7
// освобождение выделенной памяти
void destroy(PDynArray x)
{
  if (!x) return;
  if (x->ptr) free(x->ptr); // <--------- тут косяк был, замени на эту строку
  free(x);
}
2
26.12.2019, 19:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2019, 19:58
Помогаю со студенческими работами здесь

Массив: Сформировать новый массив из максимальных значений элементов каждого из заданных массивов...
даны четыре одномерных массива A, B, C, D, сформировать новый массив из максимальных значений...

Из элементов массивов А (20) и С (20) образовать новый массив
Из элементов массивов А (20) и С (20) образовать новый массив X={a1,c1,a2,c2,...,a20,c20}

Массивы - Новый массив из положительных элементов массивов
Создала 2 массива x и y, как сделать новый массив - z из положительных элементов массивов x и yint...

Сформировать новый массив С из элементов массивов А и В по правилу
Вывести два целочисленных массива А и В одинаковой длинны и сформировать новый массив С, который...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru