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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2009, 22:39   #1
Many man
Пользователь
 
Регистрация: 25.11.2008
Сообщений: 83
По умолчанию Векторы в С++

Дана задача
Дана последовательность целых чисел, удалить из массива все числа значения которых попадают в данный интервал.
Код:
#include"iostream"
#include"algorithm"
#include"vector"
#include<conio.h>
using namespace std;
bool isNeg(int x)
{
	return (x);
}
int main()
{
	vector <int> iVec;
	int x,n;
	cout<<"n="; cin>>n;
	for(int i=0;i<n;i++)
	{
		cout<<"vvedite"<<i<<"elem vectora"<<endl;
		cin>>x;
		iVec.push_back(x);
	}
	vector<int>::iterator iEnd=remove_if(iVec.begin(),iVec.end(),isNeg);
	iVec.erase(iEnd,iVec.end());
	for(vector<int>::iterator iter=iVec.begin();iter<iVec.end();iter++)
		cout<<*iter<<endl;
	
	getch();
	return 0;

}
Вот я решил но неуверен правильно ли, может нужно было вписывать отдельный интервал который нужно удалять?

Последний раз редактировалось Many man; 25.04.2009 в 22:45.
Many man вне форума Ответить с цитированием
Старый 25.04.2009, 22:44   #2
Many man
Пользователь
 
Регистрация: 25.11.2008
Сообщений: 83
По умолчанию

И вот ещё одна Заменить все элементы попадающие в интервал [a,b],нулём. Здесь тоже нужно менять отдельно заданный интервал [a,b] или оставить данную последовательность и просто все элементы заменить на ноль ?
Не могу понять условие
Many man вне форума Ответить с цитированием
Старый 25.04.2009, 22:48   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

В условии:
Цитата:
значения которых попадают в данный интервал.
То есть функция у вас как-то так должна выглядеть:
Код:
bool isNeg(int x)
{
 if(x>5 && x<10) return true; // удаляем числа из интервала (5;10)
	return false;
}
Задание второй задачи:
Код:
Заменить все элементы попадающие в интервал [a,b],нулём.
звучит уже не так однозначно. Но думаю, что имеется то же самое.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 25.04.2009, 22:55   #4
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Цитата:
попадают в данный интервал
Какой именно?
Цитата:
Код:
bool isNeg(int x)
{
 if(x>5 && x<10) return true; // удаляем числа из интервала (5;10)
	return false;
}
поще так
Код:
bool isNeg(int x)
{
  return (x>5 && x<10); // удаляем числа из интервала (5;10)
}
2,
Код:
replace_if(vec.begin(),vec.end(),isNeg,0);
и вывводить вектор проще так
Код:
copy(vec.begin(),vec.end(),ostream_iterator<int>(cout," "));
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 26.04.2009, 11:09   #5
Many man
Пользователь
 
Регистрация: 25.11.2008
Сообщений: 83
По умолчанию

Я переписал задачу
Код:
#include"iostream"
#include"algorithm"
#include"vector"
#include<conio.h>
using namespace std;

bool isNeg(int x)
{int a,b;
cin>>a; cin>>b;
return (x>a && x<b);

	 
	
}
int main()
{
	vector <int> iVec;
	int x,n;
	cout<<"n="; cin>>n;
	for(int i=0;i<n;i++)
	{
		cout<<"vvedite"<<i<<"elem vectora"<<endl;
		cin>>x;
		iVec.push_back(x);
	}
	replace_if(iVec.begin(),iVec.end(),isNeg,0);
	for(vector<int>::iterator iter=iVec.begin();iter<iVec.end();iter++)
		cout<<*iter<<endl;
	
	getch();
	return 0;

}
В функции сделал так чтобы интервал вводить вручную
, только теперь интервал не работает.
Many man вне форума Ответить с цитированием
Старый 26.04.2009, 12:35   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вводите a и b вне функции. Например, так:
Код:
#include"iostream"
#include"algorithm"
#include"vector"
#include<conio.h>
using namespace std;

namespace interval
 {
  int a,b;
 }

bool isNeg(int x)
{
return (x>interval::a && x<interval::b);
}

int main()
{
	vector <int> iVec;
	int x,n;
	cout<<"n="; cin>>n;
	cout<<"a= "; cin>>interval::a;
	cout<<"b= "; cin>>interval::b;
	for(int i=0;i<n;i++)
	{
		cout<<"vvedite "<<i<<" elem vectora"<<endl;
		cin>>x;
		iVec.push_back(x);
	}
	replace_if(iVec.begin(),iVec.end(),isNeg,0);
	for(vector<int>::iterator iter=iVec.begin();iter<iVec.end();iter++)
		cout<<*iter<<endl;

	getch();
	return 0;

}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Векторы. koston Помощь студентам 10 09.04.2008 20:44
помогите пожалуйста с Паскалем.Тема векторы Moroka Помощь студентам 1 23.12.2007 16:17