Выпуск № 897 от 02.06.2009, 04:05
Администратор рассылки: Калашников О.А., Руководитель
В рассылке: подписчиков - 337, экспертов - 146
В номере: вопросов - 2, ответов - 2
Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке: оценить выпуск >>
Вопрос № 168397: Ввести дату в формате дд.мм.гг Проанализировать правильность ввода даты. Месяц должен лежать в интервале от 1 до 12. Если месяц четный, то число дней не должно превышать 30, а для февраля 28 или 29 в зависимости от того, является ли год високосным...
Вопрос № 168413: Как мне избавится от дублирующего кода в функциях CalculationK и CalculationF???
Код:
Вопрос № 168397:
Ввести дату в формате дд.мм.гг Проанализировать правильность ввода даты. Месяц должен лежать в интервале от 1 до 12. Если месяц четный, то число дней не должно превышать 30, а для февраля 28 или 29 в зависимости от того, является ли год високосным. Если месяц нечетный, то число дней в нем может быть до 31. Год в интервале от 1000 до 3000. Если ошибка : "Неправильно введена даты, а именно число (месяц,год)"
Отправлен: 27.05.2009, 17:41
Вопрос задал: lolit, Посетитель
Всего ответов: 1 Страница вопроса >>
Отвечает Пупорев Юрий Борисович, Специалист :
Здравствуйте, lolit! Интересно кто это сказал, что во всех четных месяцах по 30 дней? А август, октябрь, декабрь? То же и с нечетными. В приложении правильное решение этой задачи.
#thank 249928
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 168413:
Как мне избавится от дублирующего кода в функциях CalculationK и CalculationF???
Код:
Program KKR2_10; uses CRT; type TLimits=record LeftFrontier:extended; RightFrontier:extended; end;
Procedure InputWithChecking(var Value:extended;
MinValue:extended); begin repeat readln(Value); if (Value<=MinValue) then writeln ('Ошибка ввода! Повторите ввод!'); until (Value>MinValue); end;
Procedure Input(var l:TLimits; var h,e:extended); begin write('Введите, пожалуйста, а, левую границу интервала вычислений функции '); readln(l.LeftFrontier); write('Введите, пожалуйста, b (b>a), правую границу интервала вычислений функции '); InputWithChecking(l.RightFrontier,l.LeftFrontier); write('Введите, пожалуйста, величину шага изменения аргумента h (h>0) '); InputWithChecking(h,0); write('Введите, пожалуйста, точность вычислений e (e>0) и нажмите "ENTER" '); InputWithChecking(e,0); end;
Function FunctionX(x,k:extended):extended; begin FunctionX:=(-sqr(x)*(2*k-1))/(sqr(2*k+1)*2*k); end;
Function CalculationF(n:longint; x,e:extended):extended; var c,d,f:extended;
k:longint; begin c:=1; k:=0; f:=0; d:=c*x; while abs(d)>e do begin f:=f+d; k:=k+1; c:=FunctionX(x,k); d:=c*d; end; CalculationF:=f; end;
Function CalculationK(n:longint; x,e:extended):longint; var c,d,f:extended; k:longint; begin c:=1; k:=0; f:=0; d:=c*x; while abs(d)>e do begin f:=f+d; k:=k+1;
c:=FunctionX(x,k); d:=c*d; end; CalculationK:=k; end;
Function CalculationX(l:TLimits; i:longint; h:extended):extended; begin Calculationx:=l.LeftFrontier+h*(i-1); end;
Procedure PrintTableRows(l:TLimits; h,e:extended); var i,n:longint; begin n:=trunc((l.RightFrontier-l.LeftFrontier)/h); writeln(' ТАБЛИЦА ЗНАЧЕНИЙ ФУНКЦИИ '); writeln('-----------------------------------------------------------------');
writeln('| № | x | f(x) | № чл. р. |'); writeln('-----------------------------------------------------------------'); for i:=1 to n do writeln('| ',i:4,' | ',CalculationX(l,i,h):4:2,' | ', CalculationF(n,CalculationX(l,i,h),e):4:2,' | ',CalculationK(n,CalculationX(l,i,h),e):4,' |'); writel
n('-----------------------------------------------------------------'); end;
var h,e:extended; l:TLimits; begin clrscr; writeln('Здравствуйте, уважаемый пользователь!'); writeln('Эта программа вычисления таблицы значений функции, заданной в виде разложения в ряд'); Input(l,h,e); PrintTableRows(l,h,e); readln; end.
Отвечает Зенченко Константин Николаевич, Модератор :
Здравствуйте, Bel9illi. Есть два варианта решения Вашей задачи, оба в приложении. 1)с помощью процедуры; 2)с помощью функции. В обоих вариантах нужно использовать параметр(ы)-переменные. Внимание: второй вариант зависит от того как компилятор формирует выводимую строку в операторе writeln, у меня ТР7.0, он формирует строку с правой стороны в сторону начала выводимой строки. Если у Вас будет формироватся по другому, Вам нужно будет поменять местами тип функции
и параметра-переменной и соответсвенно место вызова функции.
Единица или двойка в начале строки говорят какой вариант работает.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.