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

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

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

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

 Комментарий модератора 
Не выделяем так больше, глаза болят.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2011, 17:57
Ответы с готовыми решениями:

Не могу разобраться с указателями
Здравствуйте, никак не могу разобраться с этими указателями, вот есть одна функция: //Вводимо...

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

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

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

39
56 / 56 / 16
Регистрация: 01.08.2011
Сообщений: 141
12.10.2011, 18:39 2
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
Сообщений: 326
12.10.2011, 21:02  [ТС] 3
спс я постараюсь переделать сам под Си благодарствую

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


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
Сообщений: 326
12.10.2011, 23:55  [ТС] 7
Спс ато думал в чом косяк уменя чото не то делает

Добавлено через 5 минут
А вторую может помочь сделать? ибо там я не могу понять
0
Заблокирован
13.10.2011, 00:24 8
FRATER1234, ответь на вопрос #5 и напишу
0
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 326
13.10.2011, 00:36  [ТС] 9
Четыре разных масива тоесть 4 рззных задачи ) все те под задачи во второй ненадо в один делать масив просто сделать по одтельности
0
Jupiter
13.10.2011, 01:29
  #10

Не по теме:

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

0
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 326
13.10.2011, 01:38  [ТС] 11
Ну просто поймите для меня освоение даёться тяжело по началу я сам писал а шас толку я пишу оно то куча ошибок то ишо чтото не так построил алгоритм и т.д вот почему и прошу помочь (
0
Заблокирован
13.10.2011, 02:59 12
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
Сообщений: 326
15.10.2011, 20:30  [ТС] 13
В итоге короче вэтом коде
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
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
15.10.2011, 20:37 14
FRATER1234, вместо
C++
1
#define NA 5
можно писать
C++
1
const int NA=5;
на том же месте или в самом начале функции main
1
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 326
15.10.2011, 20:49  [ТС] 15
Ага шас попробую пределать спс за предоставленую помощь благодарствую вам
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.10.2011, 20:54 16
Цитата Сообщение от FRATER1234 Посмотреть сообщение
Ага шас попробую пределать спс за предоставленую помощь благодарствую вам

Не по теме:

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

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

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

Добавлено через 55 секунд
Thinker,
cout это С++?? круто однако а он говорит что это норм )) якобы относиться к Си
0
15.10.2011, 21:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2011, 21:08
Помогаю со студенческими работами здесь

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

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

Си, не могу разобраться с указателями
Здравствуйте, проблема с функцией sort, компилятор ругается на указатели, не могу разобраться. ...

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


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

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