Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2012, 17:12   #1
Xameleon666
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 44
По умолчанию Динамический масив домашка

Здравствуйте недавно начал учитса дали задание всегда справлялся а щас влез в тупик суть задачидинамический масив)
Написать программу где дано два масива одинакового размера . размер масива указывает пользователь (от 15 до 20) заполнение рандомное.
создать третий масив и поместить в него:
1)все елементы 1го и 2го масива
2)все общие элементы масива.
3)элементы из первого массива каторые не имеютса в 2
4)Элементы из второго каторые не вошли в первый масив
(для каждого выполнения можно использовать новый масив)
вот что я сделать смог потом столкнулся с ошибкой(
компелирую через Microsoft Visual Studio 10.0
Код:
#include <iostream>//объевление библиотеки имен
#include<Math.h>//математическая библеотека
#include<time.h>//работа со временем
#include<iomanip>// резервацыя места
#include<stdlib.h>// в этом файле содержится функция rand

using namespace std;//Использовать дерикторию имен std для работы операторов cout<<(вывод) и cin>>(ввод)
int main()//объявление главной функции 
{
	setlocale( LC_ALL,"Russian" );//руский текст

int size;
cout<<"введите size от 15 до 20"<<endl;
cin>>size;
do
{
	if(size<15 || size>20)
	{
		cout<<"Ошибка вы ввели не верную длину масива"<<endl;
	}
	else if(size>=15 || size<=20)
	{
		int *mas=new int[size];
		int *mas1=new int[size];
		int a;
		a=2*size;
		int *mas2=new int[a];
		for(int i=0;i<size;i++)
		{
			mas[i]=rand()%70;
			cout<<mas[i]<<" ";
		}
		cout<<"\n\n";
		for(int i=0;i<size;i++)
		{
			mas1[i]=rand()%40;
			cout<<mas1[i]<<" ";
		}
		cout<<"\n\n";
		for(int i=0;i<a;i++)
		{
			mas2[i]=mas[i];
			mas2[size+i-1]=mas1[i];
			cout<<mas2[i]<<" ";
		}
	
	}
	else
	{
		cout<<endl;
	}
cin>>size;
}
while(size<15 || size>20);
	//sustem("pausee");
return 0;
}
Зарание огромное спасибо
не могу написать дальнейшее решение задаю выводит на экран в третем масиве элементы первого а вместо элементов второго масива выводит непонятные цыфры

Последний раз редактировалось Xameleon666; 08.02.2012 в 17:51.
Xameleon666 вне форума Ответить с цитированием
Старый 08.02.2012, 17:18   #2
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Цитата:
вот что я сделать смог потом столкнулся с ошибкой(
Конкретнее, с какой ошибкой вы столкнулись?

Первое, на что упал взгляд:

Код:
else if(size>=15 || size<=20)
не знаю, зачем вам вообще это условие, но тут надо ставить &&, а не ||
Код:
else
	{
		cout<<endl;
	}
Это не будет выполняться. Хотя бы потому, что введенное число может быть или <= 15, или >15. Третьего не дано.

Нужна более подробная помощь - опишите проблему.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать

Последний раз редактировалось ACE Valery; 08.02.2012 в 17:28.
ACE Valery вне форума Ответить с цитированием
Старый 08.02.2012, 18:09   #3
Xameleon666
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 44
По умолчанию

Цитата:
Сообщение от ACE Valery Посмотреть сообщение
Конкретнее, с какой ошибкой вы столкнулись?

Первое, на что упал взгляд:

Код:
else if(size>=15 || size<=20)
не знаю, зачем вам вообще это условие, но тут надо ставить &&, а не ||
Код:
else
	{
		cout<<endl;
	}
Это не будет выполняться. Хотя бы потому, что введенное число может быть или <= 15, или >15. Третьего не дано.

Нужна более подробная помощь - опишите проблему.
без elsa вобще не хотело и так || потому что на && сильно ругался и пропускал действие суть програма поняла что проверка диапазона и если не верно то повторить запрос тут проблем нет проблемма есть в логике обьявления третьего масива
Xameleon666 вне форума Ответить с цитированием
Старый 08.02.2012, 19:13   #4
alexey2
Пользователь
 
Регистрация: 27.01.2012
Сообщений: 37
По умолчанию

Код:
for(int i=0;i<a;i++)
		{
			mas2[i]=mas[i];
			mas2[size+i-1]=mas1[i];
			cout<<mas2[i]<<" ";
		}
ты уж реши ты 2 элемента за раз пишешь или один. Если 2 - то цикл не по a, а по size
alexey2 вне форума Ответить с цитированием
Старый 08.02.2012, 20:58   #5
Xameleon666
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 44
По умолчанию

Цитата:
Сообщение от alexey2 Посмотреть сообщение
Код:
for(int i=0;i<a;i++)
		{
			mas2[i]=mas[i];
			mas2[size+i-1]=mas1[i];
			cout<<mas2[i]<<" ";
		}
ты уж реши ты 2 элемента за раз пишешь или один. Если 2 - то цикл не по a, а по size
a это для того чтоб мы смогли указать сразу две длины масивов чтоб влезло сразу два ряда элементов
Xameleon666 вне форума Ответить с цитированием
Старый 08.02.2012, 21:30   #6
alexey2
Пользователь
 
Регистрация: 27.01.2012
Сообщений: 37
По умолчанию

как будет работать твой код когда i==a-1?
разбей на 2 цикла и будет работать:
Код:
for(int i=0;i<size;i++)
{
	mas2[i]=mas[i];
	mas2[size+i]=mas1[i];
}
for(int i=0;i<a;i++)
{
	cout<<mas2[i]<<" ";
}
alexey2 вне форума Ответить с цитированием
Старый 08.02.2012, 22:53   #7
Xameleon666
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 44
По умолчанию

Цитата:
Сообщение от alexey2 Посмотреть сообщение
как будет работать твой код когда i==a-1?
разбей на 2 цикла и будет работать:
Код:
for(int i=0;i<size;i++)
{
	mas2[i]=mas[i];
	mas2[size+i]=mas1[i];
}
for(int i=0;i<a;i++)
{
	cout<<mas2[i]<<" ";
}
Хм спасибо всё показал так как задано теперь придумать второе третье и четвёртое ну там вроде через сравнение надо)
Xameleon666 вне форума Ответить с цитированием
Старый 08.02.2012, 23:01   #8
_kilik_
Пользователь
 
Аватар для _kilik_
 
Регистрация: 16.08.2011
Сообщений: 69
По умолчанию

Поправил:
Код:
#include <iostream>//объевление библиотеки имен
#include<Math.h>//математическая библеотека
#include<time.h>//работа со временем
#include<iomanip>// резервацыя места
#include<stdlib.h>// в этом файле содержится функция rand
using namespace std;//Использовать дерикторию имен std для работы операторов cout<<(вывод) и cin>>(ввод)

int *allArray(int *fArray,int *sArray,int size,int &anseSize);//все елементы 1го и 2го масива
int *uArray(int *fArray,int *sArray,int size,int &anseSize);//все общие элементы масива.
int *dArray(int *fArray,int *sArray,int size,int &anseSize);//элементы из первого массива каторые не имеютса в 2



int main()//объявление главной функции 
{
	setlocale( LC_ALL,"Russian" );//руский текст
	
	int size;
	int sizeAnse=0;
	cout<<"введите size от 15 до 20"<<endl;
	
	do{
		cin>>size;
		if(size<15 || size>20)
			cout<<"Ошибка вы ввели не верную длину масива"<<endl;
		else{
			int *mas=new int[size];
			int *mas1=new int[size];
			int *mas2;

			for(int i=0;i<size;i++){
				mas[i]=rand()%70;
				cout<<mas[i]<<'\t';
			}
			cout<<"\n\n";
			for(int i=0;i<size;i++){
				mas1[i]=rand()%40;
				cout<<mas1[i]<<'\t';
			}

			int kom;
			make:
			cout<<"\n\n1)все елементы 1го и 2го масива"<<endl
				<<"2)все общие элементы масива."<<endl
				<<"3)элементы из первого массива каторые не имеютса в 2"<<endl
				<<"4)Элементы из второго каторые не вошли в первый масив"<<endl;
			cin>>kom;

			switch (kom){
			case 1: 
				mas2=allArray(mas,mas1,size,sizeAnse);
				break;
			case 2: 
				mas2=uArray(mas,mas1,size,sizeAnse);
				break;
			case 3: 
				mas2=dArray(mas,mas1,size,sizeAnse);
				break;
			case 4: 
				mas2=dArray(mas1,mas,size,sizeAnse);
				break;
			default: 
				cout<<"неверно введена команда";
				goto make;//чтоб не править тыкнул метку
			}
			
			for(int i=0;i<sizeAnse;i++)
				cout<<mas2[i]<<'\t';
			
			delete []mas;
			delete []mas1;
			delete []mas2;
			break;
		}
		
	}while(size<15 || size>20);
	cout<<endl;
	std::system("pause");
	return 0;
}

int *allArray(int *fArray,int *nArray,int size,int &anseSize){//все элементы 1го и 2го масива
	anseSize=2*size;
	int *arr=new int[anseSize];
	for(int i=0;i<size;i++){
		arr[i]=fArray[i];
		arr[size+i]=nArray[i];
	}
	return arr;
}
int *uArray(int *fArray,int *nArray,int size,int &anseSize){//все общие элементы массива.
	anseSize=0;
	int tmpSize=0;
	int l;
	bool rep=false;
	int *tmp=new int[2*size];
	
	for(int i=0;i<size;i++)//прошли по первому массиву
		for(int j=0;j<size;j++)//по второму
			if(fArray[i]==nArray[j]){//нашли общий элемент
		
				for(l=0;l<anseSize;l++)//провер добавляли ли уже этот элемент 
					if(tmp[l]==fArray[i])
						rep=true;
				if(!rep){//если не добавляли 
					tmp[anseSize++]=fArray[i];
					rep=false;
				}
			}
	int *arr=new int[anseSize];
	memcpy(arr,tmp,sizeof(int)*anseSize);
	delete[] tmp;
	return arr;
}

int *dArray(int *fArray,int *sArray,int size,int &anseSize){//элементы из первого массива которые не имеются в 2
	anseSize=0;
	int tmpSize=0;
	bool rep=false;
	int *tmp=new int[size];
	
	for(int i=0;i<size;i++){//прошли по первому массиву
		for(int j=0;j<size;j++)//по второму
			if(fArray[i]==sArray[j]){//нашли общий элемент
				rep=true;
				break;
			}
		if(!rep)
			tmp[anseSize++]=fArray[i];
		rep=false;
	}
	int *arr=new int[anseSize];
	memcpy(arr,tmp,sizeof(int)*anseSize);
	delete []tmp;
	return arr;
}
_kilik_ вне форума Ответить с цитированием
Старый 08.02.2012, 23:23   #9
Xameleon666
Пользователь
 
Регистрация: 08.02.2012
Сообщений: 44
По умолчанию

Цитата:
Сообщение от _kilik_ Посмотреть сообщение
Поправил:
Код:
#include <iostream>//объевление библиотеки имен
#include<Math.h>//математическая библеотека
#include<time.h>//работа со временем
#include<iomanip>// резервацыя места
#include<stdlib.h>// в этом файле содержится функция rand
using namespace std;//Использовать дерикторию имен std для работы операторов cout<<(вывод) и cin>>(ввод)

int *allArray(int *fArray,int *sArray,int size,int &anseSize);//все елементы 1го и 2го масива
int *uArray(int *fArray,int *sArray,int size,int &anseSize);//все общие элементы масива.
int *dArray(int *fArray,int *sArray,int size,int &anseSize);//элементы из первого массива каторые не имеютса в 2



int main()//объявление главной функции 
{
	setlocale( LC_ALL,"Russian" );//руский текст
	
	int size;
	int sizeAnse=0;
	cout<<"введите size от 15 до 20"<<endl;
	
	do{
		cin>>size;
		if(size<15 || size>20)
			cout<<"Ошибка вы ввели не верную длину масива"<<endl;
		else{
			int *mas=new int[size];
			int *mas1=new int[size];
			int *mas2;

			for(int i=0;i<size;i++){
				mas[i]=rand()%70;
				cout<<mas[i]<<'\t';
			}
			cout<<"\n\n";
			for(int i=0;i<size;i++){
				mas1[i]=rand()%40;
				cout<<mas1[i]<<'\t';
			}

			int kom;
			make:
			cout<<"\n\n1)все елементы 1го и 2го масива"<<endl
				<<"2)все общие элементы масива."<<endl
				<<"3)элементы из первого массива каторые не имеютса в 2"<<endl
				<<"4)Элементы из второго каторые не вошли в первый масив"<<endl;
			cin>>kom;

			switch (kom){
			case 1: 
				mas2=allArray(mas,mas1,size,sizeAnse);
				break;
			case 2: 
				mas2=uArray(mas,mas1,size,sizeAnse);
				break;
			case 3: 
				mas2=dArray(mas,mas1,size,sizeAnse);
				break;
			case 4: 
				mas2=dArray(mas1,mas,size,sizeAnse);
				break;
			default: 
				cout<<"неверно введена команда";
				goto make;//чтоб не править тыкнул метку
			}
			
			for(int i=0;i<sizeAnse;i++)
				cout<<mas2[i]<<'\t';
			
			delete []mas;
			delete []mas1;
			delete []mas2;
			break;
		}
		
	}while(size<15 || size>20);
	cout<<endl;
	std::system("pause");
	return 0;
}

int *allArray(int *fArray,int *nArray,int size,int &anseSize){//все элементы 1го и 2го масива
	anseSize=2*size;
	int *arr=new int[anseSize];
	for(int i=0;i<size;i++){
		arr[i]=fArray[i];
		arr[size+i]=nArray[i];
	}
	return arr;
}
int *uArray(int *fArray,int *nArray,int size,int &anseSize){//все общие элементы массива.
	anseSize=0;
	int tmpSize=0;
	int l;
	bool rep=false;
	int *tmp=new int[2*size];
	
	for(int i=0;i<size;i++)//прошли по первому массиву
		for(int j=0;j<size;j++)//по второму
			if(fArray[i]==nArray[j]){//нашли общий элемент
		
				for(l=0;l<anseSize;l++)//провер добавляли ли уже этот элемент 
					if(tmp[l]==fArray[i])
						rep=true;
				if(!rep){//если не добавляли 
					tmp[anseSize++]=fArray[i];
					rep=false;
				}
			}
	int *arr=new int[anseSize];
	memcpy(arr,tmp,sizeof(int)*anseSize);
	delete[] tmp;
	return arr;
}

int *dArray(int *fArray,int *sArray,int size,int &anseSize){//элементы из первого массива которые не имеются в 2
	anseSize=0;
	int tmpSize=0;
	bool rep=false;
	int *tmp=new int[size];
	
	for(int i=0;i<size;i++){//прошли по первому массиву
		for(int j=0;j<size;j++)//по второму
			if(fArray[i]==sArray[j]){//нашли общий элемент
				rep=true;
				break;
			}
		if(!rep)
			tmp[anseSize++]=fArray[i];
		rep=false;
	}
	int *arr=new int[anseSize];
	memcpy(arr,tmp,sizeof(int)*anseSize);
	delete []tmp;
	return arr;
}
ого огромное спасибо но у меня есчё есть время разобратса в коде чтоб по мимо того чтоб скопировать но и понять как оно работает правда по программе мы есчё не учили вставки функцый так но я читал эту информацыю для себя и на прошлом уроке с препадом говорил про это но за решение конечно огромное спасибо буду разбиратса
Xameleon666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Домашка по С/С++. Сложные задачи( AmaTeRaTSu Общие вопросы C/C++ 6 01.06.2011 23:41
Динамический масив(опишите функцию) genya-yatsun Общие вопросы C/C++ 0 13.01.2011 15:24
Домашка! =Р Ксюшка=**** Помощь студентам 8 02.12.2010 01:14
Динамический масив (Си) VadEr Помощь студентам 2 18.01.2010 20:33
Вывести динамический масив с помощью функции Gavreil Общие вопросы C/C++ 2 17.12.2008 21:27