Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/14: Рейтинг темы: голосов - 14, средняя оценка - 4.57
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 330

Не могу разобраться с указателями

12.10.2011, 17:57. Показов 3031. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте все вот короче мне задали задачки на Си написать вот они собствено :
1.Даны два массива, упорядоченных по возрастанию: А[n] и B[m]. Сформируйте массив C[n+m], состоящий из элементов массивов А и В, упорядоченный по возрастанию.
2.Даны два массива : А[n] и B[m]. Необходимо создать третий массив, в котором нужно собрать:
- Элементы обоих массивов;
- Общие элементы двух массивов;
- Элементы массива A, которые не включаются в B;
- Элементы массива B, которые не включаются в A;
- Элементы массивов A и B, коотрые не являются общими дял них (то есть объединение результатов двух - предыдущих вариантов).
Помогите как и счего начать программу ?

 Комментарий модератора 
Не выделяем так больше, глаза болят.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.10.2011, 17:57
Ответы с готовыми решениями:

Не могу разобраться с указателями
Здравствуйте, никак не могу разобраться с этими указателями, вот есть одна функция: //Вводимо матрицю int **Matrix(int n) {int...

Не могу разобраться с указателями!
Читаю Шилдт C++, не как не могу понять систему с указателями, вроде вот вот все понял что это просто типа ярлыков для переменных и не более...

Не могу разобраться с указателями и смещение в массиве
// Дан массив, содержащий 20 неотрицательных целых чисел. Пиком называется не крайний элемент массива, который больше обоих своих...

39
56 / 56 / 16
Регистрация: 01.08.2011
Сообщений: 141
12.10.2011, 18:39
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
#include<iostream>
 
using namespace std;
 
 
 
int main()
{
    int A[]={1,3,5,7}, B[]={2,4,5,6}, *pArray,a;
 
    a=(sizeof A+sizeof B) /sizeof A[1];
 
    pArray = new int[a];
 
    int i=-1,j=-1;
    for(int g=0; g<a; g++)
        if(B[j]<=A[i])
        {
            j++;
            pArray[g] = B[j];
            
        }
        else
        {
            i++;
            pArray[g]=A[i];
                
        }
 
    for(int i=0;i<a;i++)
        cout<<pArray[i]<<" ";
 
 
    delete [] pArray;
 
}
Вот код первой задачи, тока на С++
1
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 330
12.10.2011, 21:02  [ТС]
спс я постараюсь переделать сам под Си благодарствую

Добавлено через 28 минут
А со второй поможет ктото ?
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.10.2011, 21:24
Ree.exe, исходные массивы могут иметь различные размерности. У вас алгоритм не верный, проанализируйте его. Например,
A: 1 2 3
B: 10 20
1
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
12.10.2011, 21:26
FRATER1234, для задачи 2 все ее подзадачи собираются в один массив или это 4 разных массива?
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.10.2011, 21:46
Алгоритм решения первой задачи:


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
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#define NA 5
#define NB 7
#define NC 12
 
void Init(int *a, int n)
{
   int i;
   a[0] = rand()%10;
   for(i = 1; i < n; i++)
      a[i] = a[i-1] + rand()%10;
}
 
void Print(int *a, int n)
{
   int i;
   for(i = 0; i < n; i++)
      printf("%d ", a[i]);
   puts("\n");
}
 
void Sort(int *a, int na, int *b, int nb, int *c, int *nc)
{
   int i, j, k;
   i = j = k = 0;
   while (i < na && j < nb)
      if (a[i] < b[j])
         c[k++] = a[i++];
      else
         c[k++] = b[j++];
 
   if (i < na)
      for(j = i; j < na; j++)
         c[k++] = a[j];
   else
      for(i = j; i < nb; i++)
         c[k++] = b[i];
   *nc = na + nb;
}
 
int main()
{
   int a[NA], b[NB], c[NC], nc;
   srand(time(NULL));
   Init(a, NA);
   Init(b, NB);
   Print(a, NA);
   Print(b, NB);
   Sort(a, NA, b, NB, c, &nc);
   Print(c, nc);
   getch();
   return 0;
}
1
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 330
12.10.2011, 23:55  [ТС]
Спс ато думал в чом косяк уменя чото не то делает

Добавлено через 5 минут
А вторую может помочь сделать? ибо там я не могу понять
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
13.10.2011, 00:24
FRATER1234, ответь на вопрос #5 и напишу
0
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 330
13.10.2011, 00:36  [ТС]
Четыре разных масива тоесть 4 рззных задачи ) все те под задачи во второй ненадо в один делать масив просто сделать по одтельности
0
13.10.2011, 01:29

Не по теме:

Цитата Сообщение от FRATER1234 Посмотреть сообщение
Не могу разобраться с указателями
так бы и написал что не хочешь разбираться, а то заходишь в тему, а тут
Цитата Сообщение от FRATER1234 Посмотреть сообщение
мне задали
Цитата Сообщение от FRATER1234 Посмотреть сообщение
Помогите как и счего

0
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 330
13.10.2011, 01:38  [ТС]
Ну просто поймите для меня освоение даёться тяжело по началу я сам писал а шас толку я пишу оно то куча ошибок то ишо чтото не так построил алгоритм и т.д вот почему и прошу помочь (
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
13.10.2011, 02:59
FRATER1234, а вы думаете что сможете разобрать чужую программу? успехов. за бесплатно представляю без комментариев и пояснений, за работу не отвечаю (хотя и уверен почти совершенно), за читабельность тоже. С последним пунктом - Элементы массивов A и B, коотрые не являются общими дял них (то есть объединение результатов двух - предыдущих вариантов). разберетесь самостоятельно.
код
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
//output.c
#include <stdio.h>
 
void my_error(int *point_array, const int num)
{
    if (!point_array){
        printf("\nerror of memory\n");
        exit(num);
    }
}
 
void print (const int num, const int choise)
{
    switch(choise)
    {
        case 1: printf("%d ", num);
            break;
        case 2: printf("\n\n");
            break;
        case 3: printf("\nsourse array %x\n", num);
            break;
        case 4: printf("\narray a + array b: \n");
            break;
        case 5: printf("\nintersection array a and b\n");
            break;
        case 6: printf("\nintersection is 0\n");
            break;
        case 7: printf("\nelements of array a and not array b: \n");
            break;
        case 8: printf("\nelements of array b and not array a: \n");
            break;
    }
}
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
//main.c
 
#include <stdlib.h>
#include <time.h>
 
int *create_array(int size)
{
    int *tmp = 0, i = 0;
    tmp = (int*)malloc(size * sizeof(int));
    my_error(tmp, 4);
    for (i; i < size; ++i)
        tmp[i] = rand() % 100;
    return tmp;
}
 
void output_array(int * tmp, const int size, const int choise)
{
    int i = 0;
    for (i; i < size; ++i)
        print(tmp[i], choise);
}
 
void double_array(int *a, int *b, int *c, int n, int m)
{
    int i = 0, j;
    for (i; i < n; ++i)
        *(c + i) = *(a + i);
    j = i;
    for (i = 0; i < m; ++i)
        *(c + j++) = *(b + i);
}
 
int find(const int *c, const int num, const int size)
{
    int i = 0;
    for (i; i < size; ++i)
        if (c[i] == num)
            return 1;
    return 0;
}
 
void resize_array(int *c, const int size)
{
    int tmp = 0;
    tmp = realloc(c, size * sizeof(int));
    if (!tmp) exit(-1);
}
 
int intersection(const int *a, const int *b, int *c, const int n, const int m)
{
    int i = 0, j, tmp = 0, size = 0;
 
    for (i; i < n; ++i)
        for (j = 0; j < m; ++j)
        {
            if (!size)
            {
                if (a[i] == b[j])
                {
                    ++size;
                    c = create_array(size);
                    c[0] = a[i];
                }
            }
            else
            {
                if (a[i] == b[j])
                {
                    tmp = find(c, a[i], size);
 
                    if (!tmp)
                    {
                        ++size;
                        resize_array(c, size);
                        c[size - 1] = a[i];
                    }
                }
 
            }
        }
    return size;
}
 
void array_copy(int *in, int *out, const int size)
{
    int i = 0;
 
    for (i; i < size; ++i)
        in[i] = out[i];
}
 
void inclusive_not(const int *a, int *c, const int *tmp, const int n, const int tmp_size)
{
    int i = 0, j, k = 0, check, temp = 0;
 
    for (i; i < n; ++i)
    {
        check = 1;
 
        for (j = 0; j < tmp_size; ++j)
            if (a[i] == tmp[j])
            {
                check = 0; ++temp;
                break;
            }
        if (check)
            c[k++] = a[i];
    }
 
    if (temp > tmp_size)
        resize_array(c, temp - tmp_size);
}
 
int main()
{
    int *a_array = 0, *b_array = 0, *c_array = 0, *tmp_array;
    int n = 10, m = 20, tmp_size, tmp;
 
    srand(time(0));
    a_array = create_array(n);
    my_error(a_array, 1);
    b_array = create_array(m);
    my_error(b_array, 2);
    c_array = create_array(n + m);
    my_error(c_array, 3);
    double_array(a_array, b_array, c_array, n, m);
 
    print(10, 3);
    output_array(a_array, n, 1);
    print(n, 2); print(11, 3);
    output_array(b_array, m, 1);
    print(n, 2); print(n, 4);
    output_array(c_array, n + m, 1);
    free(c_array);
 
    tmp_size = intersection(a_array, b_array, c_array, n, m);
 
    if (!tmp_size)
    {
        print(n, 6);
        c_array = create_array(n + m);
        my_error(c_array, 5);
        double_array(a_array, b_array, c_array, n, m);
        print(n, 2); print(n, 4);
        output_array(c_array, n + m, 1);
        print(n, 2);
    }
    else
    {
        print(n, 2); print(n, 5);
        output_array(c_array, tmp_size, 1);
        tmp_array = create_array(tmp_size);
        array_copy(tmp_array, c_array, tmp_size);
        free(c_array);
 
        c_array = 0;
        c_array = create_array(n - tmp_size);
        my_error(c_array, 6);
 
        inclusive_not(a_array, c_array, tmp_array, n, tmp_size);
        print(n, 2); print(n, 7);
        output_array(c_array, n - tmp_size, 1);
        free(c_array);
 
        c_array = 0;
        c_array = create_array(m - tmp_size);
        my_error(c_array, 7);
 
        inclusive_not(b_array, c_array, tmp_array, m, tmp_size);
        print(n, 2); print(n, 8);
        output_array(c_array, m - tmp_size, 1);
        print(n, 2);
        free(tmp_array);
    }
 
    free(a_array);
    free(c_array);
    free(b_array);
    return 0;
}
консоль

sourse array a
6 77 99 41 75 9 97 9 20 41


sourse array b
16 27 47 95 89 9 66 57 91 18 8 13 87 44 26 21 81 0 5 14


array a + array b:
6 77 99 41 75 9 97 9 20 41 16 27 47 95 89 9 66 57 91 18 8 13 87 44 26 21 81 0 5 14


intersection array a and b
9


elements of array a and not array b:
6 77 99 25 0 97 20 41 73


elements of array b and not array a:
16 27 47 95 89 66 57 91 18 8 13 87 44 26 21 81 0 5 14
2
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 330
15.10.2011, 20:30  [ТС]
В итоге короче вэтом коде
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
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#define NA 5
#define NB 7
#define NC 12
 
void Init(int *a, int n)
{
   int i;
   a[0] = rand()%10;
   for(i = 1; i < n; i++)
      a[i] = a[i-1] + rand()%10;
}
 
void Print(int *a, int n)
{
   int i;
   for(i = 0; i < n; i++)
      printf("%d ", a[i]);
   puts("\n");
}
 
void Sort(int *a, int na, int *b, int nb, int *c, int *nc)
{
   int i, j, k;
   i = j = k = 0;
   while (i < na && j < nb)
      if (a[i] < b[j])
         c[k++] = a[i++];
      else
         c[k++] = b[j++];
 
   if (i < na)
      for(j = i; j < na; j++)
         c[k++] = a[j];
   else
      for(i = j; i < nb; i++)
         c[k++] = b[i];
   *nc = na + nb;
}
 
int main()
{
   int a[NA], b[NB], c[NC], nc;
   srand(time(NULL));
   Init(a, NA);
   Init(b, NB);
   Print(a, NA);
   Print(b, NB);
   Sort(a, NA, b, NB, c, &nc);
   Print(c, nc);
   getch();
   return 0;
}
От пользователя Thinker, не до дуплил как его переделать ибо я не знаю что это такое за
C
1
 #define
команда я тока понял что она придает значение а в итоге я попытался изменить оно тупо без этой команды валиться вся прога а как бы по простецкому написать бы не понял я короче может кто то по проще напишет ибо простите но переделать я этот код не могу( а сам я голову ломаю но оно по порядку выстраивает а упорядочить в сумме по возрастанию не могу((
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
15.10.2011, 20:37
FRATER1234, вместо
C++
1
#define NA 5
можно писать
C++
1
const int NA=5;
на том же месте или в самом начале функции main
1
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 330
15.10.2011, 20:49  [ТС]
Ага шас попробую пределать спс за предоставленую помощь благодарствую вам
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.10.2011, 20:54
Цитата Сообщение от FRATER1234 Посмотреть сообщение
Ага шас попробую пределать спс за предоставленую помощь благодарствую вам

Не по теме:

вот и помогай людям, не нравится код, переделывают, а потом удивляются почему криво работает. Я вам написал ОЧЕНЬ оптимальный вариант

1
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 330
15.10.2011, 21:01  [ТС]
Чем можно заменить эти две команды
C
1
2
printf("%d ", a[i]);
   puts("\n");
ибо через cout<<a[i]<<endl; не катит как можно заменить?

Добавлено через 1 минуту
Thinker,
Я вам благодарен очень я ничего вам не говорил что вы зря написал спс огромнешое просто поймите унас препод ишо такого не преподавал половину умного написанно для меня тоесть он знает примерно мои знания и он просто подумает что я якобы списал вот и всё почему я и хочу переделать а вам ищо рас огромнешое спс и прошу без обид
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
15.10.2011, 21:04
FRATER1234, чтобы был cout, нужно подключать библиотеку iostream вместо stdio
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.10.2011, 21:06
FRATER1234, но у вас же написано, что задачи на Си, а cout это уже из С++
0
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 330
15.10.2011, 21:08  [ТС]
aeshes,
Я это сделал я подключил #include<iostream> и написал using namespace std;

Добавлено через 55 секунд
Thinker,
cout это С++?? круто однако а он говорит что это норм )) якобы относиться к Си
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.10.2011, 21:08
Помогаю со студенческими работами здесь

Не могу разобраться с указателями(не понимаю сути освобождения памяти)
Вот я тоже дуб в указателях... помогите пожалуйста кому не лениво... с горем пополам заработал Enter (ноуту пора в утиль), и вот (вопросы...

Как создать 2-ое дерево со значениями 1-го? Не могу разобраться с указателями
Вот код(недоработанный): #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; struct sNode { int...

Не могу разобраться с указателями в массивах и векторах при передаче по ссылки в функцию
void bubble_sort(vector&lt;int&gt; *array) { ull size = array-&gt;size(); for(ull i = 0; i &lt; size; i++) for(ull j = 0; j...

Си, не могу разобраться с указателями
Здравствуйте, проблема с функцией sort, компилятор ругается на указатели, не могу разобраться. #include &lt;stdio.h&gt; #include...

Задали работу, не могу разобраться. Используется делфи 10, не могу разобраться, как это сделать
В одномерном массиве, состоящем из n вещественных элементов, вычислить: минимальный элемент массива и сумму элементов массива,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru