С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
kingler1
0 / 0 / 1
Регистрация: 08.04.2016
Сообщений: 21
1

Добавить n элементов из массива xs в конец массива array

22.06.2016, 10:05. Просмотров 212. Ответов 3
Метки си (Все метки)

C
1
2
3
4
5
6
7
8
9
10
void appendElements (Array, *array, int *xs, int n);
Добавляет n элементов из массива xs в конец массива array.
Пример. Исходный массив:
1 2 3 4 5
Вызов:
int xs[] = {6, 7, 8, 9};
int n = sizeof(xs) / sizeof(*xs);
appendElements(array, xs, n);
Результат:
1 2 3 4 5 6 7 8 9
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2016, 10:05
Ответы с готовыми решениями:

Дописать в конец массива 2 элемента, в первый их них записать сумму элементов массива
Помогите пожалуйста с задачей: Организовать ввод динамического массива...

Добавить элемент в конец массива
Всем привет! Есть пример кода "Удалить все элементы с четными индексами" Как...

Как добавить в конец массива 3 элемента
Вот кусок кода с выводом массива, как добавить в конец 3 элемента? #include...

Добавить элементы одного массива в конец другого
void appendElements (Array, *array, int *xs, int n); Добавляет n элементов из...

С помощью какой команды можно добавить элемент в конец одномерного массива?
С помощью какой команды можно добавить элемент в конец одномерного массива????

3
Mycola
23 / 13 / 47
Регистрация: 23.03.2013
Сообщений: 157
23.06.2016, 03:04 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
#include <stdlib.h>
 
#define N 10
 
char appendElements(int*& ARRAY, unsigned short array_size, int* xs, unsigned short xs_size) {
    if (ARRAY && array_size) {
        // можна проверять указатели массивов, их размеры и что возвращает функция realloc
        ARRAY = (int*)realloc(ARRAY, sizeof(int)*(array_size+xs_size));
        int i = array_size;
        for (;i < array_size + xs_size; i++)
            ARRAY[i] = xs[i-array_size];
        return EXIT_SUCCESS;
    }
    else return EXIT_FAILURE;
}
 
int main() {
    int* ARRAY = NULL;
 
    ARRAY = (int*)malloc(sizeof(int)*N);
    int n = 0;
    for (;n < N; n++)
        ARRAY[n] = n; // заполняем данными массив
 
    int xs[] = { 6, 7, 8, 9 };
    n = sizeof(xs) / sizeof(*xs);
    appendElements(ARRAY, N, xs, n);
    
    free(ARRAY);
    return EXIT_SUCCESS;
}
0
HighPredator
5689 / 2008 / 723
Регистрация: 10.12.2010
Сообщений: 5,774
Записей в блоге: 3
23.06.2016, 10:04 3
Mycola, перестаньте пожалуйста постить плюсовый код в сишном разделе.
2
kingler1
0 / 0 / 1
Регистрация: 08.04.2016
Сообщений: 21
24.06.2016, 15:53  [ТС] 4
вот написал код. Только функция работает не правильно.

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
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct Array {
    int *data;
    int n;
} Array;
 
void* mymalloc (size_t size);
void* myrealloc (void *ptr, size_t size);
 
Array* newArray (int n);
Array* copyArray (const Array *array);
void destroyArray (Array *array);
 
 
Array* readArray (const char *str);
void pprintArray (const Array *array, const char *str);
void pprintLineArray (const Array *array);
void prependElements (Array *array, int *xs, int n);
 
 
void* myrealloc (void *ptr, size_t size) {
void *res = realloc(ptr, size); 
    if (res == NULL && size != 0) { 
        fprintf(stderr, "myrealloc: unable to allocate %zd bytes\n", size); 
        exit(EXIT_FAILURE);
    }
    return res; 
}
 
void* mymalloc (size_t size) { 
    void *res = malloc(size); 
    if (res == NULL) { 
        fprintf(stderr, "mymalloc: unable to allocate %zd bytes\n ", size); 
        exit(EXIT_FAILURE); 
    } 
    return res; 
}
 
Array* newArray (int n){
    Array* array = (Array*)mymalloc(sizeof(*array));
    array->n = n;
    array->data = (int*)mymalloc(sizeof(*array->data)*n);
    return array;
}
 
Array* copyArray (const Array *array) {
    Array* arraycopy=newArray(array->n);
    int* data = array->data;
    int* datacopy = arraycopy->data;
    int i,len=array->n;
    
    for(i=0;i<len;i++) datacopy[i] = data[i];
    return arraycopy;
}
 
void destroyArray (Array *array) { 
    free(array->data); 
    free(array); 
}
 
Array* readArray (const char *str) {
    Array *result = NULL;
    int n;
    printf("Enter size of %s: ", str);
    if (scanf("%d", &n) != 1 || n < 0) {
        fprintf(stderr, "readArray: input error reading %s\n", str);
        destroyArray(result);
        return NULL;                
    }
    result = newArray(n);
    int *data = result->data;
    for (int i = 0; i < n; i++) {
        if (scanf("%d", data + i) != 1) {
            fprintf(stderr, "readArray: input error reading %s\n", str);
            destroyArray(result);
            return NULL;                  
        }
    }
    return result;
}
 
void pprintArray (const Array *array, const char *str) {
    const int *data = array->data;
    int n = array->n;
    for (int i = 0; i < n; i++) {
        printf("%s[%d] = %d\n", str, i, data[i]);
    }
}
 
void pprintLineArray (const Array *array) {
    const int *data = array->data;
    int n = array->n;
    if (n > 0) {
        printf("%d", data[0]);
    }
    for (int i = 1; i < n; i++) {
        printf(" %d", data[i]);
    }
    if (n > 0) {
        printf("\n");
    }
}
 
 
void appendElements (Array *array, int *xs, int n) {
 
    int i;
    array->data=(int*)myrealloc(array->data,sizeof(int)*(array->n+n));
    array->n+=n;
    int l = array->n;
 
    for(i=l+1;i<=n;i++) {
        
        array->data[i]=array->data[i+n];
    }
    
    for(i=0;i<n;i++) {
        
        array->data[i]=xs[i];
    }
}
 
 
int main () {
    Array *array = readArray("array");
    if (array == NULL) {
        printf("I don't want to play with you anymore!!!\n");
        exit(EXIT_FAILURE);
    }
    pprintLineArray(array);
    int app_E = 0;
    printf("Enter size of app: ");
    if (scanf("%d", &app_E) != 1 || app_E < 0) {
        fprintf(stderr, "readArray: input error reading app_E\n");
        exit(EXIT_FAILURE);
    }
    int app[app_E];
    for (int i = 0; i<app_E; i++)   app[i] = (i+1);
    
    appendElements(array,app,app_E);
    pprintLineArray(array);
    destroyArray(array);
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2016, 15:53

Если в массиве присутствует заданное значение - удалить его, иначе добавить в конец массива
Определить, есть ли в целочисленном массиве Q(10) заданное число Х, и если...

Переместить каждый второй элемент массива в конец массива
Доброго времени суток. Проверьте пожалуйста программу. Задание: Написать...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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