Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
FRATER1234
3 / 3 / 2
Регистрация: 01.10.2011
Сообщений: 226
#1

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

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

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

 Комментарий модератора 
Не выделяем так больше, глаза болят.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2011, 17:57     Не могу разобраться с указателями
Посмотрите здесь:

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

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

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

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

Нужно разобраться с указателями - C++
#include <iostream> #include <stdio.h> using namespace std; //подсчет кол-ва согласных в слове int cntsogl(char *s) { int n=0;...

Помогите разобраться с работой с указателями.... - C++
Кто нить мог бы посоветовать, что можно почитать для того что бы понять работу с указателями.... :help:

Разобраться с указателями и ссылками. Совсем запутался - C++
Привет! Расскажите или скажите где подробно и понятно описан механизм работы с указателями и ссылками. то что * - указатель, а & -...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ree.exe
56 / 56 / 4
Регистрация: 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;
 
}
Вот код первой задачи, тока на С++
FRATER1234
3 / 3 / 2
Регистрация: 01.10.2011
Сообщений: 226
12.10.2011, 21:02  [ТС]     Не могу разобраться с указателями #3
спс я постараюсь переделать сам под Си благодарствую

Добавлено через 28 минут
А со второй поможет ктото ?
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.10.2011, 21:24     Не могу разобраться с указателями #4
Ree.exe, исходные массивы могут иметь различные размерности. У вас алгоритм не верный, проанализируйте его. Например,
A: 1 2 3
B: 10 20
alkagolik
Заблокирован
12.10.2011, 21:26     Не могу разобраться с указателями #5
FRATER1234, для задачи 2 все ее подзадачи собираются в один массив или это 4 разных массива?
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 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;
}
FRATER1234
3 / 3 / 2
Регистрация: 01.10.2011
Сообщений: 226
12.10.2011, 23:55  [ТС]     Не могу разобраться с указателями #7
Спс ато думал в чом косяк уменя чото не то делает

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

Не по теме:

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

FRATER1234
3 / 3 / 2
Регистрация: 01.10.2011
Сообщений: 226
13.10.2011, 01:38  [ТС]     Не могу разобраться с указателями #11
Ну просто поймите для меня освоение даёться тяжело по началу я сам писал а шас толку я пишу оно то куча ошибок то ишо чтото не так построил алгоритм и т.д вот почему и прошу помочь (
alkagolik
Заблокирован
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
FRATER1234
3 / 3 / 2
Регистрация: 01.10.2011
Сообщений: 226
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
команда я тока понял что она придает значение а в итоге я попытался изменить оно тупо без этой команды валиться вся прога а как бы по простецкому написать бы не понял я короче может кто то по проще напишет ибо простите но переделать я этот код не могу( а сам я голову ломаю но оно по порядку выстраивает а упорядочить в сумме по возрастанию не могу((
aeshes
440 / 203 / 13
Регистрация: 07.10.2011
Сообщений: 462
15.10.2011, 20:37     Не могу разобраться с указателями #14
FRATER1234, вместо
C++
1
#define NA 5
можно писать
C++
1
const int NA=5;
на том же месте или в самом начале функции main
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2011, 20:49     Не могу разобраться с указателями
Еще ссылки по теме:

Работа с указателями в объектах и без них, помогите разобраться - C++
Значит так! Есть 4 указателя - 2 из них описанны в классе, 2 глобально. В классе есть конструктор, который выделяет место под...

Не могу что-то понять с указателями - C++
Объясните мне,пожалуйста, почему когда я пишу так: void main() { char arr=&quot;erbb45&quot;; char *parr = &amp;arr; cout &lt;&lt; hex; ...

не могу сделать программу с указателями на массив и с функцией - C++
такая &quot;беда&quot; впервые столкнулся с указателями,в них чайник.. вот код задание--вывести массив,сделать так,чтоб к этому массиву...

Не могу понять, что означает данная операция с указателями - C++
вот такой код #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int rrr2 (int **p) {return ((**p-1)***p);}; ...

не могу разобраться с ошибкой - C++
Нарушение прав доступа при записи &quot;0x001a0fc0&quot;. не могу понять где ошибка. программа на рекурсию #include &quot;stdafx.h&quot; #include...


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

Или воспользуйтесь поиском по форуму:
FRATER1234
3 / 3 / 2
Регистрация: 01.10.2011
Сообщений: 226
15.10.2011, 20:49  [ТС]     Не могу разобраться с указателями #15
Ага шас попробую пределать спс за предоставленую помощь благодарствую вам
Yandex
Объявления
15.10.2011, 20:49     Не могу разобраться с указателями
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru