Буду рад любой помощи!
1. Даны два массива: А [M] и B[N] (M и N вводятся с клавиатуры). Необходимо создать третий массив минимально возможного размера, в котором нужно собрать элементы массива A, которые не включаются в массив B, без повторений.
2. Даны два массива: А [M] и B[N] (M и N вводятся с клавиатуры). Необходимо создать третий массив минимально возможного размера, в котором нужно собрать элементы массивов A и B, которые не являются общими для них, без повторений.
3. Даны два массива: А [M] и B[N] (M и N вводятся с клавиатуры). Необходимо создать третий массив минимально возможного размера, в котором нужно собрать элементы обоих массивов.
4. Дан массив: А [M] (M вводится с клавиатуры). Необходимо удалить из массива четные или нечетные значения. Пользователь вводит данные в массив, а также с помощью меню решает, что нужно удалить.
Другие языки программирования и технологии
Помогите с решением задач по С по теме "Динамическое выделение памяти"!
Задачи 1-3 можно решать вместе.
Это делается в 4 этапа:
1. Отсортировать массивы A и B допустим по возрастанию. Можно отсеять повторяющиеся элементы в каждом из массивов по ходу сортировки, но можно этого и не делать, дальше я предполагаю последний вариант. Готовых алгоритмов сортировки в сети уйма.
2. Просмотреть массивы начиная с первого элемента, посчитать количество одинаковых элементов: A[i]!=A[i-1] и B[j]!=B[j-1] для i=1..(M-1) и j=1..(N-1). А можно считать количество повторений - это не принципиально. Для каждого уникального элемента массива А нужно проверить, что в массиве B есть элемент, который равен найденному. Если таковой будет обнаружен, то увеличить счетчик общих элементов.
Мой код рабочий, но скорее всего его зарубят за интеллектуальность, так как я это делаю за единственный проход по массивам, так что будьте проще, пишите сами
int i=0, j=0;
int sA=0, sB=0, s=0;
do {
// пропустим одинаковые и сосчитаем повторения
while ((i<M-1) && (A[i]==A[i+1])) ++i, ++sA;
while ((j<N-1) && (B[j]==B[j+1])) ++j, ++sB;
// для отладки
printf("A[%d]=%d, B[%d]=%d\n", i, (i<M)?A[i]:0, j, (j<N)?B[j]:0);
// когда один кончился, добираем остатки другого
if (i==M) ++j;
else if (j==N) ++i;
// продвигаем минимальный
else if (A[i]<B[j]) ++i;
else if (B[j]<A[i]) ++j;
// продвигаем синхронно
else /* A[i]==B[j] */++i, ++j, ++s;
} while (i<M || j<N);
Результатом станет количество уникальных элементов массива A, массива B и число общих.
3. На основании сосчитанных уникальных элементов и длин массивов A и B найти длины результирующих массивов и отвести под них память, не забыть в конце программы эту память освободить.
4. Немного изменив код пункта 2, можно заставить его заполнять результирующие массивы. Специально именно для этого я оставил в коде отладочный вывод значений проверяемых уникальных элементов.
Это делается в 4 этапа:
1. Отсортировать массивы A и B допустим по возрастанию. Можно отсеять повторяющиеся элементы в каждом из массивов по ходу сортировки, но можно этого и не делать, дальше я предполагаю последний вариант. Готовых алгоритмов сортировки в сети уйма.
2. Просмотреть массивы начиная с первого элемента, посчитать количество одинаковых элементов: A[i]!=A[i-1] и B[j]!=B[j-1] для i=1..(M-1) и j=1..(N-1). А можно считать количество повторений - это не принципиально. Для каждого уникального элемента массива А нужно проверить, что в массиве B есть элемент, который равен найденному. Если таковой будет обнаружен, то увеличить счетчик общих элементов.
Мой код рабочий, но скорее всего его зарубят за интеллектуальность, так как я это делаю за единственный проход по массивам, так что будьте проще, пишите сами
int i=0, j=0;
int sA=0, sB=0, s=0;
do {
// пропустим одинаковые и сосчитаем повторения
while ((i<M-1) && (A[i]==A[i+1])) ++i, ++sA;
while ((j<N-1) && (B[j]==B[j+1])) ++j, ++sB;
// для отладки
printf("A[%d]=%d, B[%d]=%d\n", i, (i<M)?A[i]:0, j, (j<N)?B[j]:0);
// когда один кончился, добираем остатки другого
if (i==M) ++j;
else if (j==N) ++i;
// продвигаем минимальный
else if (A[i]<B[j]) ++i;
else if (B[j]<A[i]) ++j;
// продвигаем синхронно
else /* A[i]==B[j] */++i, ++j, ++s;
} while (i<M || j<N);
Результатом станет количество уникальных элементов массива A, массива B и число общих.
3. На основании сосчитанных уникальных элементов и длин массивов A и B найти длины результирующих массивов и отвести под них память, не забыть в конце программы эту память освободить.
4. Немного изменив код пункта 2, можно заставить его заполнять результирующие массивы. Специально именно для этого я оставил в коде отладочный вывод значений проверяемых уникальных элементов.
почитай про malloc() и free()
Похожие вопросы
- Язык си, не могу понять динамическое выделение памяти.
- Вопрос для людей, знающих С/С++ -динамическое выделение памяти
- Помогите с решение задачи по информатике!!!
- Помогите с решением задачи на C++
- помогите с решением задачи на языке делфи..задача ниже
- помогите с решение задачи на Турбо паскале
- Помогите в решении задачи на Pascal
- помогите в решении задачи, программу надо написать в турбо паскале
- Помогите плз решение задачи по Паскулю!!! Дано натуральное число и определить яв-ся ли оно простым.
- Большая просьба!! ! помогите с решением задачи с++