Программирование
#51
Отправлено 16 November 2010 - 11:14
Пожалуйста, объясните овощу чисто для интереса:
Паскаль.
Дано n дипломов, w ширина, h высота. Все одинакового размера. Нужно найти минимальную длину/ширину квадратной полки, на которую все эти дипломы уместились бы. Разумеется, дипломы не могут пересекаться.
Например:
input: 2(ширина), 3(длина), 10(количество)
output: 9.
Буду благодарна, если объясните решение математически (и можно код под спойлером).
#52
Отправлено 16 November 2010 - 13:24
Спасибо, смысл понятен.
Вопрос: массивы всё-таки тут нужны, или я что-то не догоняю?
#53
Отправлено 16 November 2010 - 21:55
В любом случае, для вещественного типа x я бы подкорректировал условие. Почему точность лишь до тысячных? Ну и про true/false верно ибо на это компилятор и ругается.
Немного измененный ваш же код:
var
x,f:real;
flag:boolean;
begin
writeln('Введите действ. число х: ');
readln(x);
f:=x*x+4*x+5;
flag:=false;
writeln('If...then');
if x<=2
then
begin
writeln('Значение функции f(x): ',f:6:2);
flag:=true;
end
else writeln('Значение функции f(x): ', (1/f):6:2);
writeln('Case...of');
case flag of
false: writeln('Значение функции f(x): ', (1/f):6:2);
true: writeln('Значение функции f(x): ',f:6:2);
end;
readln;
end.
Все замечательно работает.
#54
Отправлено 17 November 2010 - 12:57
Я лишь подтвердил правильность этого высказывания, не более. То, что Tomb_and_Jerry не захотел это попробовать - уже другой вопрос.Ну вообще-то я в прошлом сообщении уже все сказала про true и false, разве трудно было 0 и 1 поменять на данные значения?
Согласен, просто неясно, в таком случае, зачем в задании просят использовать case, если с ним все равно в паре нужен if для определения состояния flag'а. Какая-то нерациональная задача. А вот если x использует тип от byte до longint, то, зная пределы этих типов, в case можно было бы включить лишь диапазоны:Действительные числа - множество, в которое также входят и целочисленные, разве нет?
[нижний предел]..2
3..[верхний предел]
Почему переменная не может быть равна точно двум? Чем это обусловлено? Под переменную real определяется 4 байта и если задать двойку в real, то она занесется в память как 2.0(0)E0, т.е. остальные биты информации останутся нулями. В задании условие четкое, поэтому его, мне кажется, и нужно соблюсти. Если не верите, вот попробуйте выполнить:И насчет данного условия не уверена: x<=2. Вообще-то, если преподаватели не врут - вещественные числа вообще не стоит приравнивать друг к другу, ибо вряд ли переменная станет точно равной двум. Поэтому для того, чтобы наверняка попадало в диапазон, я и прибавила погрешность. Можно и меньше сделать, не спорю - 0.0000....01.
var i: integer;
r1,r2: real;
begin
i:=2;
r1:=2;
r2:=2.0000000;
if i=r1 then writeln(i,' =',r1) else writeln(i,' <>',r1);
if i=r2 then writeln(i,' =',r2) else writeln(i,' <>',r2);
if r1=r2 then writeln(r1,' =',r2) else writeln(r1,' <>',r2);
readln;
end.
Результат:
Значения для наглядности специально без округления.
Возможно, в другом языке программирования кроме непосредственно значения сравниваются еще и типы переменных, но не в Turbo Pascal 7.0.
Сообщение изменено: WinterWolf (17 November 2010 - 13:06)
#55
Отправлено 17 November 2010 - 18:14
#56
Отправлено 12 October 2010 - 19:35
Диаметр описанной окружности равно отношению стороны к синусу противоположного угла, если в формуле, то, по идее
2R= ?/sinA
Спасибо большое, и Andariel, и Robert Langdon
Пока формулы искал, вот, поздно запостил
#57
#58
Отправлено 12 October 2010 - 20:20
#59
Отправлено 13 November 2010 - 21:58
Информатика, помогите, пожалуйста =_=
Дано действительное число x. Вычислить f(x), если

Желательно сделать и в if/then и в case, НО даже если в одном сделаете, то буду много-премного благодарен
Сообщение изменено: Tomb_and_Jerry (13 November 2010 - 21:58)
#60
Отправлено 13 November 2010 - 23:15
#61
Отправлено 16 November 2010 - 20:22

74: Constant and case types do not match. Что делать?
#62
Отправлено 16 November 2010 - 20:50
Прям и не знаю что делать
курсор ставит на строчку
0: writeln('Значение функции f(x): ', (1/f):6:2);
#63
Отправлено 16 November 2010 - 21:25
var
x, f: real;
BEGIN
writeln('Введите действительное значение x: ');
readln(x);
f:= x*x + 4x + 5;
if x<= (2+0.001)
then
writeln ('Значение функции f(x): ', f:6:2)
else writeln('Значение функции f(x): ', (1/f):6:2);
END.
#64
Отправлено 17 November 2010 - 17:05
всё правильно получилось, просто я сомневался, писать или нет, так как мы еще формально flag не учили, а у меня учитель еще конечно...
спасиб, "отлично" получил)
#65
Отправлено 13 November 2010 - 22:42
var
x,f:real;
begin
writeln('Введите действ. число х: ');
readln(x);
f:=x*x+4*x+5;
writeln('If...then');
if x<=(2+0.001)
then writeln('Значение функции f(x): ',f:6:2)
else writeln('Значение функции f(x): ', (1/f):6:2);
writeln('Case...of');
case x<=(2+0.001) of
0: writeln('Значение функции f(x): ', (1/f):6:2);
1: writeln('Значение функции f(x): ',f:6:2)
end;
readln
end.
Насчет case не уверена, никогда вроде бы для логического типа не использовала.
"Given enough eyeballs, all bugs are shallow". Э. Рэймонд
#66
Отправлено 16 November 2010 - 20:43
var
x,f:real;
flag:boolean;
begin
writeln('Введите действ. число х: ');
readln(x);
f:=x*x+4*x+5;
flag:=false;
writeln('If...then');
if x<2.001
then
begin
writeln('Значение функции f(x): ',f:6:2);
flag:=true
end
else writeln('Значение функции f(x): ', (1/f):6:2);
writeln('Case...of');
case flag of
0: writeln('Значение функции f(x): ', (1/f):6:2);
1: writeln('Значение функции f(x): ',f:6:2)
end;
readln
end.'
Сообщение изменено: Invisible (16 November 2010 - 20:49)
"Given enough eyeballs, all bugs are shallow". Э. Рэймонд
#67
Отправлено 16 November 2010 - 20:53
"Given enough eyeballs, all bugs are shallow". Э. Рэймонд
#68
Отправлено 16 November 2010 - 21:31
case flag of
false: writeln('Значение функции f(x): ', (1/f):6:2);
true: writeln('Значение функции f(x): ',f:6:2)
end;
Печально.
"Given enough eyeballs, all bugs are shallow". Э. Рэймонд
#69
Отправлено 16 November 2010 - 22:27
Действительные числа - множество, в которое также входят и целочисленные, разве нет?
И насчет данного условия не уверена: x<=2. Вообще-то, если преподаватели не врут - вещественные числа вообще не стоит приравнивать друг к другу, ибо вряд ли переменная станет точно равной двум. Поэтому для того, чтобы наверняка попадало в диапазон, я и прибавила погрешность. Можно и меньше сделать, не спорю - 0.0000....01.
"Given enough eyeballs, all bugs are shallow". Э. Рэймонд
#70
Отправлено 12 October 2010 - 19:49
Если известны углы и радиус описанной окружности, то используется формула герона:

Короче, вот наш труегольник (правда, без окружности):

Теперь собсно код:
var a, b, c, r, AB, AC, BC: integer;
begin
write('Введите угол a: ');
readln(a);
write('Введите угол b: ');
readln(<img src='http://tombraider.ru/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;
write('Введите угол c: ');
readln©;
write('Введите радиус описанной окружности: ');
readln®;
AB:=2*r*sin©;
AC:=2*r*sin(<img src='http://tombraider.ru/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;
BC:=2*r*sin(a);
write('Длинна стороны AB=',AB,', длинна стороны AC=',AC,', длинна стороны BC=',BC,'.');
readln;
end.
Вроде так. Правда Паскаля под рукой нет, проверить код не могу. Будут ошибки при компиляции - пиши.
#71
Отправлено 12 October 2010 - 19:58
#72
Отправлено 12 October 2010 - 20:20
а также убирай
write('Введите угол c: ');
readln©;и меняйAB:=2*r*sin©;на
AB:=2*r*sin(pi - a - <img src='http://tombraider.ru/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />;а если хочешь вводить углы не в радианах, а в градусах, то меняй
AB:=2*r*sin(pi - a - <img src='http://tombraider.ru/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />; AC:=2*r*sin(<img src='http://tombraider.ru/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />; BC:=2*r*sin(a);на
AB:=2*r*sin((180 - a - <img src='http://tombraider.ru/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' /> / 180 * pi); AC:=2*r*sin(b / 180 * pi); BC:=2*r*sin(a / 180 * pi);
#73
Отправлено 12 October 2010 - 21:49
А с третьим углом можно и так и так. Хотя да, в твоем варианте меньше вероятность получить что угодно кроме треугольника
#74
Отправлено 16 November 2010 - 12:36
Думаю так:Я в расстройстве. На горолимпиаде 3 задачи из 5 были на строки и массивы, а я о них в паскале тупо ничего не знаю ибо не проходили.Обидно. С горя не решила вот что:
Пожалуйста, объясните овощу чисто для интереса:
Паскаль.
Дано n дипломов, w ширина, h высота. Все одинакового размера. Нужно найти минимальную длину/ширину квадратной полки, на которую все эти дипломы уместились бы. Разумеется, дипломы не могут пересекаться.
Например:
input: 2(ширина), 3(длина), 10(количество)
output: 9.
Буду благодарна, если объясните решение математически (и можно код под спойлером).
Пробуем выложить в n столбцов, где n от 1 до 10 (количество). Для каждого числа столбцов считаем сколько будет получаться строк: т.е. если 1 столбец, то 10 строк, если 2, то 5 и т.д. где надо округляем к большему. Для каждого из вариантов считаем общую длину и ширину и запоминаем из них большее значение (это и будет ширина/длина квадратной полки). Соответственно из 10 получившихся вариантов выбираем меньшее значение.
Но это решение лишь с той оговоркой, что дипломы нельзя вращать, хотя я думаю раз это имеено дипломы, то их нужно размещать в единственном правильном положении )))
#75
Отправлено 16 November 2010 - 13:59
Тут не нужныДа, вращать не нужно.
Спасибо, смысл понятен.
Вопрос: массивы всё-таки тут нужны, или я что-то не догоняю?
2 посетителей читают эту тему
0 пользователей, 2 гостей, 0 скрытых



Наверх









