Выпуск № 1323 от 05.06.2009, 00:35
Администратор рассылки: Dr_Andrew, Младший модератор
В рассылке: подписчиков - 626, экспертов - 142
В номере: вопросов - 3, ответов - 5
Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке: оценить выпуск >>
Вопрос № 168549: Помогите пожалуйста написать программу! Задание: Два выпуклых многоугольника заданы на плоскости перечислением координат вершин в порядке обхода границы. Определить площади многоугольников и проверить лежит ли один из них строго внутри другого....
Вопрос № 168568: Здраствуйте, подскажите как обединить char* и int в одну строку, т.е. к примеру есть:
Код:
Вопрос № 168578: Расположите числа на простые множетели. Составить программу, которая выдает разложение данного целого числа N на просты множетели например: 128=2*2*2*2*2*2*2 17- простое число ...
Вопрос № 168549:
Помогите пожалуйста написать программу! Задание: Два выпуклых многоугольника заданы на плоскости перечислением координат вершин в порядке обхода границы. Определить площади многоугольников и проверить лежит ли один из них строго внутри другого.
// Класс-точка class point { public: point(double x=0,double y=0); double x() const; double
y() const; private: double _x,_y; };
// Класс-многоугольник class polygon { public: // Конструктор polygon(const point& start,const point& end); polygon(std::vector<point> points); // Площадь double square() const; // Если многоугольник-аргумент находится внутри bool contain(const polygon& p) const; private: // Класс-сторона используется внутри класса. Можно и без него обойтись class si
de { public: side(point p1,point p2); const point& p1() const; const point& p2() const; private: point _p1,_p2; }; // Площадь треугольника double square(point p1,point p2,point p3) const; // Возвращает положительное значение, если p лежит слева от вектора side и отрицательное если наоборот double pointposition(side v,point p) const; typedef std::vector<point> points; typedef points::const_iterator cit; points _points; };
int main() { locale::global(locale("russian_russia.866")); //
Массивы точек для каждого многоугольника point firstPoints[4]={point(0,0),point(10,0),point(10,10),point(0,10)}; point secondPoints[3]={point(0,0),point(5,0),point(5,5)}; // Многоугольники polygon first(firstPoints[0],firstPoints[sizeof(firstPoints)/sizeof(point)]); polygon second(secondPoints[0],secondPoints[sizeof(secondPoints)/sizeof(point)]);
Отвечает AMV007, 2-й класс :
Здравствуйте, Станислав. ну например : char test[255]; memset(test,0,sizeof(test)); char* rez1 = "Rezultat: "; int rez = 8; sprintf(test,"%s %d", rez1, rez); в test будет то, что вы хотите
----- Работать, работать и еще раз работать (да не, шутка :) )
Ответ отправил: AMV007, 2-й класс
Ответ отправлен: 30.05.2009, 20:26
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 250077
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает Navnav, 3-й класс :
Здравствуйте, Станислав.
Оператор cout является стандартным потоком вывода. Поток – свойство, отражающее перемещение данных от источника к приемнику. Стандартный поток вывода направлен на экран, а поток ввода направлен с клавиатуры. Операция << -- это операция вставки в поток. Она копирует содержимое переменной,
стоящей справа от нее в поток, стоящий слева.
Ответ отправил: Navnav, 3-й класс
Ответ отправлен: 30.05.2009, 21:48
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 250080
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает Micren, Практикант :
Здравствуйте, Станислав. Суть в том, что без дополнительных ухищрений, таких как дополнительное выделение памяти для результата или использования промежуточного буфера Вы не можете этого сделать. Это потому, что данная строка представляет собой фиксированное место в памяти с заранее(на этапе компиляции) определенным размером. Поэтому, чтоб собрать новую строку необходимо выделить место в памяти, учитывая размер числа, и скопировать туда данные.
Я могу предложить Вам несколько методов решения Вашей
задачи. 1. Выделить место для результата с запасом на число.
int main(){ char str[sizeof(RESULT_STR)+numeric_limits<int>::digits10+1]=RESULT_STR; int res=8; itoa(res,str+sizeof(RESULT_STR)-1,10); cout<<str<<endl; system("PAUSE"); return 0; }
2.Использовать возможности STL C++. Например тип данных class string вместо char*. Этот класс обладает несравненными преимуществами по сравнению с char*
Все приведенные примеры выдают один и тот же результат:
Код:
Result : 8
Ответ отправил: Micren, Практикант
Ответ отправлен: 30.05.2009, 23:22
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 250085
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 168578:
Расположите числа на простые множетели. Составить программу, которая выдает разложение данного целого числа N на просты множетели например: 128=2*2*2*2*2*2*2 17- простое число
Отправлен: 30.05.2009, 21:36
Вопрос задал: nnt.org
Всего ответов: 1 Страница вопроса >>
Отвечает Micren, Практикант :
Здравствуйте, nnt.org. Программа C++. Проверял MS VS 2008
// Этот класс будет использоваться
для представления результата вычислений class simplemultipliers { private: // Тип ассоциированный массив будет использоваться для хранения множителей и подсчета их количества // Ключ - множитель // Значение - сколько раз встречается typedef map<unsigned int,unsigned int> countersType; public: // Константные итераторы для доступа к данным typedef countersType::const_iterator const_iterator; typedef countersType::con
st_reverse_iterator const_reverse_iterator; // Возвращает общее количество множителей unsigned int multipliersCount() const; // Возвращает количество различных множителей unsigned int countersCount() const; // Возвращает число для которого ищем множители unsigned int number() const; // Возвращают итераторы. Применение аналогично итераторам из STL const_iterator begin() const; const_iterator end() const; const_reverse_iterator rbegin() const; const_reverse_iterator
rend() const; private: // Конструктор explicit simplemultipliers(unsigned int number); // Индексатор для доступа к значениям по ключу. Используется внутри decomposed() unsigned int& operator[](unsigned int key); unsigned int _number; countersType _counters; friend simplemultipliers decomposed(unsigned int number); };
simplemultipliers decomposed(unsigned int number) { // Здесь будем хранить результат simplemultipliers result(number); // Максимальное значение до которого имеет смысл перебирать множители unsigned int maxNumber=static_cast<unsigned int>(sqrt(static_cast<double>(number))); // Начинаем с 2 unsigned int multiplier=2; // Пока множитель не больше максимального значения до которого есть смысл
перебирать while(multiplier<=maxNumber) { // Флаг показывающий, что множитель добавлен bool ifAdded=false; // Пока делится на множитель while(!(number%multiplier)) { // Увеличим счетчик ++result[multiplier]; // Разделим число number/=multiplier; // И установим флаг ifAdded=true; } // А если изменилось number то есть смысл пересчитать maxNumber if(ifAdded) { maxNumber=static_c
ast<unsigned int>(sqrt(static_cast<double>(number))); } // А этот оператор увеличит множитель на 2 если множитель нечетный и на 1 если множитель четный, // а четный он может быть только 2 multiplier+=(multiplier&1)+1; } // Если есть остаток добавим и его if(number!=1 || !result._counters.size()) { ++result[number]; } return result; }
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.