Консультация № 177046
03.03.2010, 23:22
45.00 руб.
0 10 1
Уважаемые эксперты помогите в написание программы:Даны 2 массива 50 элементов каждый, построить из этих 2-х массивов 3 в котором должны быть только элементы имеющиеся либо в 1 массиве либо во 2 массиве.Желательно подробно прокомментировать код.

Обсуждение

давно
Старший Модератор
17042
808
04.03.2010, 04:38
общий
sagir1000:
Непонятно в таком случае: а зачем второй массив? Или имеется в виду: элементы, встречающиеся и в первом, и во втором массиве (т.е., например, берутся элементы из первого массива и проверяется их наличие во втором)? И какова размерность массива №3?
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
04.03.2010, 10:16
общий
sagir1000:
Да, уточните пожалуйста, что должно получится вот в таком случае (массивы по 5 элементов):
A = {1, 1, 2, 3, 4}
B = {1, 3, 5, 5, 6}

Какой из вариантов массива будет правильным на выходе:
1. {1, 1, 1, 2, 3, 3, 4, 5, 5, 6} - полное объединение
2. {1, 2, 3, 4, 5, 6} - объединение по уникальным элементам
3. {2, 4, 5, 5, 6} - элементы массивов, не встречающихся в другом массиве
4. {2, 4, 5, 6} - тоже, что и 3, но с уникальностью
5. {1, 1, 3} - элементы массива A, также присутствующие и в B
6. {1, 3} - общие элементы с учетом кратности
Неизвестный
04.03.2010, 10:17
общий
Dr_Andrew:
Ну, размерность от 50 до 100
Если пересечение - то 50 элементов максимум, если объединение - 100.
Неизвестный
04.03.2010, 18:44
общий
Поясняю: верен 4 вариант, таким образом имея допустим 12 эл-ов из 50 из 1-ого массива и 34 элемента из 50 из второго подходящие под условия задачи записываем их в 3-ий и имеем 3 массив из 46 элементов...Выводим на экран все 3 массива.
Неизвестный
06.03.2010, 18:29
общий
это ответ
Здравствуйте, sagir1000.
Решение Вашей задачи в приложении. Просматриваем первый массив, проверяя его элементы на вхождение во второй и в результирующий (это для соблюдения условия уникальности), подходящие пишем в новый массив, не забывая отслеживать его размерность. Потом то же самое делаем со вторым массивом. И выводим результаты.
Всё должно быть ясно из комментариев. Проверено в Visual Studio 2005.
Удачи!

Приложение:
#include <stdio.h> //для функции printf/scanf
#include <stdlib.h> //для функции system
#include <conio.h> //для функции getch
#include <locale.h> //для функции setlocale

#define n 50

int main ()
{
setlocale (LC_ALL, "Russian"); //для отображения русского языка в консоли
int a [n]; //массивы
int b [n];
int c [2*n];
printf ("Введите первый массив\n"); //ввод данных
for (int i=0; i<n; i++) {
printf ("a[%i] = \n", i);
scanf ("%i", &a[i]);
}
printf ("Введите второй массив\n");
for (int i=0; i<n; i++) {
printf ("b[%i] = \n", i);
scanf ("%i", &b[i]);
}
system ("cls"); //очистка экрана
int rc = 0; //фактическое количество элементов результирующего массива
bool f = true; //флаг
for (int i=0; i<n; i++) {
f = true; //проверяем наличие элемента во втором массиве
for (int j=0; j<n && f; j++) //цикл до конца массива или срабатывания флага
if (a[i]==b[j]) f = false; //если есть - выставляем флаг
for (int j=0; j<rc && f; j++) //цикл до конца результирующего массива или срабатывания флага
if (a[i]==c[j]) f = false; //если элемент уже есть в массиве, выставляем флаг
if (f) {c[rc] = a[i]; rc++;} //если флаг не сработал, добавляем элемент в массив и наращиваем размерность
}
for (int i=0; i<n; i++) { //всё аналогично, но для второго массива
f = true;
for (int j=0; j<n && f; j++)
if (b[i]==a[j]) f = false;
for (int j=0; j<rc && f; j++)
if (b[i]==c[j]) f = false;
if (f) {c[rc] = b[i]; rc++;}
}
printf ("Первый массив: "); //вывод входных и выходных данных
for (int i=0; i<n; i++)
printf ("%i, ", a[i]);
printf ("\nВторой массив: ");
for (int i=0; i<n; i++)
printf ("%i, ", b[i]);
printf ("\nРезультирующий массив: ");
for (int i=0; i<rc; i++)
printf ("%i, ", c[i]);
_getch (); //ожидание реакции пользователя
return 0;
}
Неизвестный
09.03.2010, 23:02
общий
Verena, извините, но в кодах гир с++ у меня ошибка вылезает([BCC32 Warning] File1.cpp(26): W8004 'f' is assigned a value that is never used)((, вот эта строчка:
bool f = true; //флаг
Не подскажите в чем дело, так поздно отвечаю долго возился с установкой с++ на компьютер...
Неизвестный
09.03.2010, 23:37
общий
sagir1000:
Это не ошибка, а предупреждение, полагаю, возникает из-за того, что ниже флаг всё равно заново инициализируется. Хотя и странно, потому что такое предупреждение не должно бы возникать в данной ситуации. Программа должна работать даже с предупреждением, наверно, влияют настройки Вашей среды. Попробуйте просто убрать начальную инициализацию, то есть вместо
bool f = true;
написать
bool f;
Неизвестный
10.03.2010, 20:40
общий
Verena,Извините пожалуйста но не подскажите как заполнить массивы автоматически, а то заполнять по 40 чисел за каждый массив очень долго(
Неизвестный
10.03.2010, 20:58
общий
sagir1000:
Ну, можно проинициализировать случайными числами. Подключите time.h и поменяйте начало на такое:
Код:
	int a [n]; //массивы
int b [n];
int c [2*n];
printf ("Первый массив\n"); //генерация данных
srand (time(NULL)); //инициализация генератора случайных чисел
for (int i=0; i<n; i++) {
a[i] = rand()%n; //случайное число от 0 до 50
printf ("a[%i] = %i\n", i, a[i]);
}
printf ("Второй массив\n"); //аналогично
for (int i=0; i<n; i++) {
b[i] = rand()%n;
printf ("b[%i] = %i\n", i, b[i]);
}
Неизвестный
10.03.2010, 21:43
общий
Спасибо
Форма ответа