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

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

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

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

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

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

 Комментарий модератора 
Не выделяем так больше, глаза болят.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2011, 17:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу разобраться с указателями (C++):

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

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

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

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

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

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

39
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;
 
}
Вот код первой задачи, тока на С++
1
FRATER1234
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 253
12.10.2011, 21:02  [ТС] #3
спс я постараюсь переделать сам под Си благодарствую

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

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

Не по теме:

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

0
FRATER1234
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 253
13.10.2011, 01:38  [ТС] #11
Ну просто поймите для меня освоение даёться тяжело по началу я сам писал а шас толку я пишу оно то куча ошибок то ишо чтото не так построил алгоритм и т.д вот почему и прошу помочь (
0
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
2
FRATER1234
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 253
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
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
1
FRATER1234
4 / 4 / 2
Регистрация: 01.10.2011
Сообщений: 253
15.10.2011, 20:49  [ТС] #15
Ага шас попробую пределать спс за предоставленую помощь благодарствую вам
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2011, 20:49
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
15.10.2011, 20:49
Ответ Создать тему
Опции темы

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