Вопрос № 111792: Дано натуральное число N. Определить количество цифр в числе N....Вопрос № 111796: Даны натуральное число N, действительные числа A1, …, AN. Заменить в последовательности A1, …, AN единицей числа, равные или превосходящие единицу, а нулем числа, меньшие единицы. Получить (1+R)/(1+S), где R – сумма всех членов последовательности, ме...Вопрос № 111798: Дана строка символов. Группы
символов, разделенные пробелами (одним или несколькими) и не содержащие пробелы внутри себя, будем называть словами. Подсчитать количество букв а в последнем слове строки....Вопрос № 111801: Дан файл координат точек на плоскости. Переписать в файл G все точки, попадающие в окружность радиуса R и с координатами центра X,Y....Вопрос № 111810: Здравствуйте.
Помогите найти ошибку в программе. Функция Compare() некорректно работает, а почему не пойму. Вывожу специально следующие переменные на экран:
cout << "
" << c << "
" << arr[i]; ...Вопрос № 111862: Уважаемые эксперты! Я буду очень благодарен если вы решите мне такую задачу:
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1) количество элементов массива, лежащих в диапазоне от А до В;
2) сумму элементов м...Вопрос № 111874: Здраствуйте !
У меня возникла проблемка с типами даных !
double Ys;
Ys=0.3+1.5*(-0.2); cout <<"....."<<Ys<<endl;
Должно вывести .....0 , но выводит .....-5.55112e-017
Ребята помогите !
А в...Вопрос № 111875: Здраствуйте !
У меня возникла проблемка с типами даных !
double Ys;
Ys=0.3+1.5*(-0.2); cout <<"....."<<Ys<<endl;
Должно вывести .....0 , но выводит .....-5.55112e-017
Ребята помогите !
А во...Вопрос № 111901: Проблемы с созданием UDF для Firebird1.0 на C++Builder6.
В общем нужна функция округления до заданного числа знаков.
В стандартной поставке Firebird есть похожая функция в fbudf.dll - round, но
ее регистрация в БД такая:
declare...Вопрос № 111910: Здравствуйте! Я только начал изучать С++ Builder 2006. Немогу обьявить переменные типов TFileStream, TButton, и тд...
И как можно в С++ Builder динамически создать TPanel?...
Вопрос № 111.792
Дано натуральное число N. Определить количество цифр в числе N.
Отвечает: SiRuS
Здравствуйте, Геннадьев Александр Юрьевич!
Рабочий код в приложении. N - число. summ - кол-во цифр в числе.
Остаёться только ввод и вывод сделать ;)
Приложение:
Ответ отправил: SiRuS (статус: 4-ый класс)
Ответ отправлен: 30.11.2007, 22:31
Отвечает: Архипов Александр Леонидович
Здравствуйте, Геннадьев Александр Юрьевич!
Решение предыдущего эксперта просто и элегантно, но если необходимо подсчитать количество цифр в числе без учёта их повторения, то см. приложение.
Ответ отправил: Djec (статус: 5-ый класс)
Ответ отправлен: 01.12.2007, 13:50
Вопрос № 111.796
Даны натуральное число N, действительные числа A1, …, AN. Заменить в последовательности A1, …, AN единицей числа, равные или превосходящие единицу, а нулем числа, меньшие единицы. Получить (1+R)/(1+S), где R – сумма всех членов последовательности, меньших единицы, S – сумма всех членов последовательности, равных или превосходящих единицу.
Дана строка символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелы внутри себя, будем называть словами. Подсчитать количество букв а в последнем слове строки.
Отвечает: Boriss
Здравствуйте, Геннадьев Александр Юрьевич! В следующий раз отмечайте, в чем пишите программу, С-то они разные Я написал в Turbo C 2.0 (классическом, так сказать) Код в приложении. Если что не понятно, спрашивайте. -- ЗЫ: Я использовал string.h, но можно обойтись и без него
Приложение:
--------- Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss (статус: Профессор) Россия, Саранск Организация: mte WWW:Программирование на Паскале ---- Ответ отправлен: 04.12.2007, 13:30
Вопрос № 111.801
Дан файл координат точек на плоскости. Переписать в файл G все точки, попадающие в окружность радиуса R и с координатами центра X,Y.
Отвечает: Терсков Сергей
Здравствуйте, Геннадьев Александр Юрьевич!
Принцип простой, достаточно вспомнить уравнение окружности:
x^2 + y^2 = r^2
Поэтому точки попадающие внутрь окружности должны соответствовать условию вида:
(x1 - x)^2 + (y1 - y)^2 < r^2
Отсюда и вся программа. Подробнее в приложении...
Приложение:
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 04.12.2007, 02:27
Вопрос № 111.810
Здравствуйте.
Помогите найти ошибку в программе. Функция Compare() некорректно работает, а почему не пойму. Вывожу специально следующие переменные на экран:
cout << "
" << c << "
" << arr[i];
if(arr[i] == c)
count++;
на экран выводятся одинаковые числа, а переменная count всё равно не увеличивается. Может быть они всё же не равны? Тогда почему на экран выводятся одинаковые числа?
И как решить данную проблему?
Приложение:
Отправлен: 01.12.2007, 01:44
Вопрос задал: kaifolom (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Воробьёв Алексей Викторович
Здравствуйте, kaifolom!
С числами с плавающей запятой надо работать очень аккуратно.
Стандарт утверждает конкретно, что равенство двух чисел с плавающей запятой ГАРАНТИРУЕТСЯ только тогжа, когда эти числа получены по одному алгоритму.
Обратите внимание, что это не означает, что числа полученные разными алгоритмами не могут быть равны, но для этого нет никакой гарантии.
Тот факт, что при выводе числа показывают одинаковые значения всего лишь говоритЮ что числа равны после округления до какого-то знака, но это вовсе не означает, что числа действительно равны, что Вы и наблюдаете.
Поэтому, при работе с числами с плавающей запятой нужно проверять, что число отличаются не больше, чем на приемлемую ошибку.
Что-то типа:
if(fabs(a-b) < epsilon)
{
++count;
}
Ответ отправил: Воробьёв Алексей Викторович (статус: Практикант)
Ответ отправлен: 01.12.2007, 02:35 Оценка за ответ: 5 Комментарий оценки: Спасибо, разобрался. Ошибка была где-то "посередине", т.е. алгоритм и особенности работы с числами с плавающей запятой приводили к зацикливанию программы.
Отвечает: Лясин Александр Владимирович
Здравствуйте, kaifolom!
В ф-ии Compare значение sz никогда не будет равно count, ф-я всегда будет возвращать 0.
А алгоритм можно легко проверить, задав в массиве константные значения типа 0.1f и проверить с такой же константой 0.1f к примеру. Тогда будет определённо видно - либо это погрешность, либо ошибка алгоритма
Ответ отправил: Лясин Александр Владимирович (статус: 2-ой класс)
Ответ отправлен: 01.12.2007, 15:29 Оценка за ответ: 3 Комментарий оценки: Если бы я спрашивал алгоритм по обнаружению ошибок, за ваш ответ можно было бы смело ставить пятёрку. Но вопрос был более конкретизирован - отсюда и оценка.
Вопрос № 111.862
Уважаемые эксперты! Я буду очень благодарен если вы решите мне такую задачу:
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1) количество элементов массива, лежащих в диапазоне от А до В;
2) сумму элементов массива, расположенных после максимального элемента.
Ответ отправил: Djec (статус: 5-ый класс)
Ответ отправлен: 01.12.2007, 17:42 Оценка за ответ: 4 Комментарий оценки: Большое спасибо! Конечно громоздко (для меня) и разбираться придёться долго, но что бы я без вас делал. Ещё раз спасибо.
Вопрос № 111.874
Здраствуйте !
У меня возникла проблемка с типами даных !
double Ys;
Ys=0.3+1.5*(-0.2); cout <<"....."<<Ys<<endl;
Должно вывести .....0 , но выводит .....-5.55112e-017
Ребята помогите !
А вобще у меня код:
Y[w1][w1]=X[w1][w1]+liamda*(X[w1][w1]-Xo[w1][w1]);
параметр X[w1][w1] - может быть как целым так и дробным,
но все наверно портит параметр liamda, который должен быть типа
double.
Отвечает: Хватов Сергей
Здравствуйте, Nikolas Franchsko Matrilotti!
Непонятно для вас здесь только то, что плавающая арифметика представляется в компьютерах достаточно неадекватно.
Более того, компьютеры считают в двоичной системе, поэтому даже такое красивое число 0.1 точно быть представлено не может. Вот ошибки и нагорают. Хотя странно - порядок результата на i386 должен быть около -35. Похоже ещё компилятор нагадил: сосчитал константное выражение со слишком малой точностью (а он обязан сосчитать его заранее на этапе компиляции)
Увеличение точности помогает мало. Поэтому финансовая информация всегда считается в целых числах. Советую и вам до последней возможности пользоваться целыми, а данные для этого нужным образом масштабировать.
Ответ отправил: Хватов Сергей (статус: Студент)
Ответ отправлен: 01.12.2007, 17:23
Вопрос № 111.875
Здраствуйте !
У меня возникла проблемка с типами даных !
double Ys;
Ys=0.3+1.5*(-0.2); cout <<"....."<<Ys<<endl;
Должно вывести .....0 , но выводит .....-5.55112e-017
Ребята помогите !
А вобще у меня код:
Y[w1][w1]=X[w1][w1]+liamda*(X[w1][w1]-Xo[w1][w1]);
параметр X[w1][w1] - может быть как целым так и дробным,
но все наверно портит параметр liamda, который должен быть типа
double.
Отвечает: Воробьёв Алексей Викторович
Здравствуйте, Nikolas Franchsko Matrilotti!
Это корректный ответ. Вы должны хорошо понимать, что согласно стандарту представления чисел с плавающей запятой, равенство двух таких чисел гарантируется ТОЛЬКО если эти числа получены одинаковым путём.
Это не означает, что равенства не будет в других случаях, но оно не гарантируется, что Вы и наблюдаете.
При работе с числами с плавающей запаятой надо проверять не на равенство, а на то, что разница лежит в пределах ошибки.
Что-то типа fabs(a-b)
Проблемы с созданием UDF для Firebird1.0 на C++Builder6.
В общем нужна функция округления до заданного числа знаков.
В стандартной поставке Firebird есть похожая функция в fbudf.dll - round, но
ее регистрация в БД такая:
declare external function Round
int by descriptor, int by descriptor
returns parameter 2
entry_point 'round' module_name 'fbudf';
А мне нужен параметр double передавать..
В общем, решил сам написать UDF
Текст dll:
============================
#include <vcl.h>
#include <windows.h>
#include <Math.hpp>
//---------------------------------------------------------------------------
#pragma hdrstop
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
__declspec(dllexport) double roundTo(double aValue, int digit)
{
return RoundTo(aValue, digit);
}
//---------------------------------------------------------------------------
============================
Готовую fbudf.dll ложу в папку UDF сервера
Регистрирую ее в БД так:
declare external function F_ROUNDTO
double precision, integer
returns double precision by value
entry_point 'roundTo' module_name 'ar_fbUdf';
============================
Когда пытаюсь использовать,
select f_roundto(12.6, 2) from rdb$database
почему-то она не находится, выдает мне:
Invalid token.
invalid request BLR at offset 59.
function F_ROUNDTO is not defined.
module name or entrypoint could not be found.
Что самое интересное. У меня есть подобная функция в dll, написанная на Delphi -
тут все нормально проходит. А нужно именно на C++Builder.
В С++ сигнатура функции включает и параметы - думал из-за этого не находится функция
в dll-ке. Пытался регистрирова следующим образом
declare external function F_ROUNDTO
double precision, integer
returns double precision by value
entry_point 'roundTo(double,int)' module_name 'ar_fbUdf';
Все равно не помагает, выдается то же самое
..
function F_ROUNDTO is not defined.
module name or entrypoint could not be found.
..
Подскажите, в чем ошибка?
Отправлен: 01.12.2007, 19:59
Вопрос задал: Igor_ (статус: 4-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Это не позволит компилятору использовать искажение имен (name mangling)
--------- Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 02.12.2007, 14:18 Оценка за ответ: 5 Комментарий оценки: Спасибо. Это как раз то, что нужно.
Вопрос № 111.910
Здравствуйте! Я только начал изучать С++ Builder 2006. Немогу обьявить переменные типов TFileStream, TButton, и тд...
И как можно в С++ Builder динамически создать TPanel?
Отвечает: Лясин Александр Владимирович
Здравствуйте, Зощенко Алексей!
С++ Builder использует в основно библиотеку визуальных компонентов (компонент) - vcl, которая не предусматривает статическое размещение в памяти объектов. Практически все компоненты этой библиотеки можно создавать только динамически. Вы можете объявлять только указатели на перечисленные вами типы и создавать объекты когда вам потребуется с помощью new:
TButton *btnOk=new TButton(Form1) // например так
то же самое можно сказать и про TPanel
int в AnsiString -
int number=0;
AnsiString snum=IntToStr(number);
по поводу третьего вопроса - есть несколько путей:
отслеживать события мыши при нажатом состоянии и в случае движения мышью (отслеживая изменения координат) перемещать панель в ту или ниую сторону - в зависимости от направления движения мыши.
ещё способ - почитайте про методы Drag & Drop. Это первое что на память пришло, конкретней не могу уточнить, работаю не в win
Ответ отправил: Лясин Александр Владимирович (статус: 2-ой класс)
Ответ отправлен: 02.12.2007, 08:29 Оценка за ответ: 4