Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 371
∙ повысить рейтинг »
Степанов Иван /REDDS
Статус: 3-й класс
Рейтинг: 141
∙ повысить рейтинг »
solowey
Статус: 3-й класс
Рейтинг: 109
∙ повысить рейтинг »

∙ С / С++

Номер выпуска:1891
Дата выхода:09.12.2016, 23:45
Администратор рассылки:Андрей Кузнецов aka Dr_Andrew (Старший модератор)
Подписчиков / экспертов:23 / 16
Вопросов / ответов:2 / 2

Консультация # 190185: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Помогите решить прооблему с ошибкой. Есть класс Time, который находится в другой папке и когда я меняю тип вектора с Vector<int>v(3) на Vector<Time>v(3), то сыпатся ошибка. Использую DEV-C++ 4.9.9.2 файл Time.h
...
Консультация # 190216: Здравствуйте! У меня возникли сложности с таким вопросом: 1)Вывести столбиком значения sin 0,1, sin 0,2, ..., sin 1,1. Язык программирования Си 2)Вводится последовательность из N целых чисел. Вычислить сумму только двузначных чисел. Язык Си Помогите пожалуйста,а то совсем не соображаю....

Консультация # 190185:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

Помогите решить прооблему с ошибкой. Есть класс Time, который находится в другой папке и когда я меняю тип вектора с Vector<int>v(3) на Vector<Time>v(3), то сыпатся ошибка.
Использую DEV-C++ 4.9.9.2
файл Time.h

class Time
{
int min, sec;
public:
Time(){min=0;sec=0;};
Time(int m, int s){min=m;sec=s;}
Time(const Time&t){min=t.min;sec=t.sec;}
~Time(){};
int get_min(){return min;}
int get_sec(){return sec;}
void set_min(int m){min=m;}
void set_sec(int s){sec=s;}
//перегруженные операции
Time&operator=(const Time&);
Time operator+(const Time&);
Time operator/(const Time&);
Time operator/(const int&);
bool operator >(const Time&);
bool operator <(const Time&);
//глобальные функции ввода-вывода
friend istream& operator>>(istream&in, Time&t);
friend ostream& operator<<(ostream&out, const Time&t);
};


файл Time.cpp
#include "Time.h"
//перегрузка операции присваивания
Time&Time::operator=(const Time&t)
{
//проверка на самоприсваивание
if(&t==this) return *this;
min=t.min;
sec=t.sec;
return *this;
}
//перегрузка глобальной функции-операции ввода
istream&operator>>(istream&in, Time&t)
{
cout<<"min?"; in>>t.min;
cout<<"sec?"; in>>t.sec;
return in;
}
//перегрузка глобальной функции-операции вывода
ostream&operator<<(ostream&out, const Time&t)
{
return (out<<t.min<<" : "<<t.sec);
}

bool Time::operator <(const Time &t)
{
if(min<t.min)return true;
if(min==t.min&&sec<t.sec)return true;
return false;
}
bool Time::operator >(const Time &t)
{
if(min>t.min)return true;
if(min==t.min&&sec>t.sec)return true;
return false;
}
Time Time::operator+(const Time&t)
{
int temp1=min*60+sec;
int temp2=t.min*60+t.sec;
Time p;
p.min=(temp1+temp2)/60;
p.sec=(temp1+temp2)%60;
return p;
}
//перегрузка бинарной операции деления
Time Time::operator/(const Time&t)
{
int temp1=min*60+sec;
int temp2=t.min*60+t.sec;
Time p;
p.min=(temp1/temp2)/60;
p.sec=(temp1/temp2)%60;
return p;
}
Time Time::operator/(const int&t)
{
int temp1=min*60+sec;
Time p;
p.min=(temp1/t)/60;
p.sec=(temp1/t)%60;
return p;
}


файл zadacha3_main.cpp
//полный путь к файлу Time.h
using namespace std;
#include <iostream>
#include "Vector.h"
#include <C:\prog\11\2\Time.h>
int main(void)
{
Vector<Time>vec(5);//создать вектор из 5 элементов
vec.Print();//печать вектора
Time s=vec.Srednee();//среднее ариметическое
cout<<"Srednee="<<s<<endl;
cout<<"pos?";
int p;
cin>>p;//ввести позицию для добавления
vec.Add(s,p);//добавить элемент в вектор
vec.Print();//печать вектора
p=vec.Max();//найти максимальный элемент
vec.Del(p);//удаление
vec.Print();//печать
vec.Delenie();//деление
vec.Print();//печать
system ("pause");
}


файл Vector.h
#pragma once
#include <vector>
#include <iostream>
//шаблон класса
template<class T>
class Vector
{
vector <T> v;//последовательный контейнер для хранения элементов вектора
int len;
public:
Vector(void);//конструктор без параметра
Vector(int n);//конструктор с параметром
void Print();//печать
~Vector(void);//деструктор
T Srednee();//вычисление среднего арифметического
void Add(T el, int pos);//добавление элемента el на позицию pos
int Max();//найти номер максимальнго элемента
void Del(int pos);//удалить элемент из позиции pos
int Min();//найти номер минимальнго элемента
void Delenie();//деление на минимальный
};

//конструктор без параметра
template <class T>
Vector<T>::Vector()
{
len=0;
}
//деструктор
template <class T>
Vector<T>::~Vector(void)
{
}
//конструктор с параметром
template <class T>
Vector<T>::Vector(int n)
{
T a;
for(int i=0;i<n;i++)
{
cin>>a;
v.push_back(a);
}
len=v.size();
}
//печать
template <class T>
void Vector<T>::Print()
{
for(int i=0;i<v.size();i++)
cout<<v[i]<<" ";
cout<<endl;
}
//вычислить среднее арифметическое
template<class T>
T Vector<T>::Srednee()
{
T s=v[0];
for(int i=1;i<v.size();i++)
s=s+v[i];
int n=v.size();
return s/n;
}
//добавление элемента
template<class T>
void Vector<T>::Add(T el, int pos)
{
v.insert(v.begin()+pos,el);
}
//поиск максимального элемента
template <class T>
int Vector<T>::Max()
{
T m=v[0];
int n=0;
for(int i=1;i<v.size();i++)
if(v[i]>m)
{
m=v[i];
n=i;
}
return n;
}
//удаление элемента из позиции pos
template<class T>
void Vector<T>::Del(int pos)
{
v.erase(v.begin()+pos);
}
//поиск минимального элемента
template<class T>
int Vector<T>::Min()
{
T m=v[0];
int n=0;
for(int i=1;i<v.size();i++)
if(v[i]<m)
{
m=v[i];
n=i;
}
return n;
}
//деление всех элементов вектора на минимальный элемент
template<class T>
void Vector<T>::Delenie()
{
int m=Min();T min=v[m];
for(int i=0;i<v.size();i++)
v[i]=v[i]/min;
};
//поиск минимального элемента
template <class T>
int Vector<T>::Min()
{
T m=s.top();
vector<T> v=copy_stack_to_vector(s);
while(!s.empty())
{
if(s.top()<m)m=s.top();
s.pop();
}
s=copy_vector_to_stack(v);
return m;
}
//деление всех элементов на минимальный
template <class T>
void Vector<T>::Delenie()
{
T m=Min();
vector<T> v;
T t;
while(!s.empty())
{
t=s.top();
v.push_back(t/m);
s.pop();
}
s=copy_vector_to_stack(v);
}

Дата отправки: 29.11.2016, 08:41
Вопрос задал: User194586 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует solowey (3-й класс):

Здравствуйте, User194586!

могу посоветовать следующее:
1. в файле Vector.h разберитесь почему дублируются методы template <class T> int Vector<T>::Min() и template <class T> void Vector<T>::Delenie(). Это точно не даст собраться проекту. Так же в файл добавьте доступ к пространству имен std -

using namespace std;


2. в начало файла Time.h добавьте:
#include <istream>
#include <iostream>
using namespace std;


3. в файлe zadacha3_main.cpp укажите корректный путь к файлу Time.h. Обычно в угловых скобках (<>) указываются файлы идущие с компилятором. Файлы создаваемые пользователем указывают в кавычках ("").
#include "Time.h"


Так я бы перенес using namespace std после всех заголовочных файлов.

Пробуйте должно все собраться.

Консультировал: solowey (3-й класс)
Дата отправки: 04.12.2016, 09:24

5
нет комментария
-----
Дата оценки: 04.12.2016, 10:52

Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 190216:

Здравствуйте! У меня возникли сложности с таким вопросом:

1)Вывести столбиком значения sin 0,1, sin 0,2, ..., sin 1,1. Язык программирования Си
2)Вводится последовательность из N целых чисел. Вычислить сумму только двузначных чисел. Язык Си

Помогите пожалуйста,а то совсем не соображаю.

Дата отправки: 04.12.2016, 12:51
Вопрос задал: maxim387 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, maxim387!
1)

#include <stdio.h>		//printf
#include <conio.h>		//_getch
#include <math.h>		//sin

int main()
{
	int		i;
	double	x;

	for(i=1; i<=11; i++)	//вещественные числа лучше не использовать
	{						//в качестве переменной цикла из-за их неточности
		x = i*0.1;			// x будет меняться от 0.1 до 1.1
		printf("sin(%g) = %g\n", x, sin(x));
	}
	
	_getch();				//ждем нажатие на клавишу
	return 0;
}

2)
#include <stdio.h>      //printf, scanf
#include <conio.h>      //_getch

int main()
{
	int		i, num, N;
	int		sum = 0;

	printf("Enter N: ");
	scanf("%d", &N);				//вводим количество чисел

	for(i=0; i<N; i++)				//ждем ровно N чисел
	{
		printf("Enter number: ");
		scanf("%d", &num);			//вводим очередное число
		if ((num>=10) && (num<=99))	//проверяем, что число двузначное
			sum += num;				// двузначные складываем
	}
	printf("Sum = %d\n", sum);		//выводим сумму
	_getch();						//ждем нажатие на клавишу
	return 0;
}

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 05.12.2016, 11:51
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное