Программирование
#51
Отправлено 16 November 2010 - 11:14
Пожалуйста, объясните овощу чисто для интереса:
Паскаль.
Дано n дипломов, w ширина, h высота. Все одинакового размера. Нужно найти минимальную длину/ширину квадратной полки, на которую все эти дипломы уместились бы. Разумеется, дипломы не могут пересекаться.
Например:
input: 2(ширина), 3(длина), 10(количество)
output: 9.
Буду благодарна, если объясните решение математически (и можно код под спойлером).
#52
Отправлено 16 November 2010 - 13:24
Спасибо, смысл понятен.
Вопрос: массивы всё-таки тут нужны, или я что-то не догоняю?
#53
Отправлено 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". Э. Рэймонд
#54
Отправлено 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". Э. Рэймонд
#55
Отправлено 16 November 2010 - 20:53
"Given enough eyeballs, all bugs are shallow". Э. Рэймонд
#56
Отправлено 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". Э. Рэймонд
#57
Отправлено 16 November 2010 - 22:27
Действительные числа - множество, в которое также входят и целочисленные, разве нет?
И насчет данного условия не уверена: x<=2. Вообще-то, если преподаватели не врут - вещественные числа вообще не стоит приравнивать друг к другу, ибо вряд ли переменная станет точно равной двум. Поэтому для того, чтобы наверняка попадало в диапазон, я и прибавила погрешность. Можно и меньше сделать, не спорю - 0.0000....01.
"Given enough eyeballs, all bugs are shallow". Э. Рэймонд
#58
Отправлено 12 October 2010 - 19:35
Диаметр описанной окружности равно отношению стороны к синусу противоположного угла, если в формуле, то, по идее
2R= ?/sinA
Спасибо большое, и Andariel, и Robert Langdon
Пока формулы искал, вот, поздно запостил
#59
#60
Отправлено 12 October 2010 - 20:20
#61
Отправлено 13 November 2010 - 21:58
Информатика, помогите, пожалуйста =_=
Дано действительное число x. Вычислить f(x), если
Желательно сделать и в if/then и в case, НО даже если в одном сделаете, то буду много-премного благодарен
Сообщение изменено: Tomb_and_Jerry (13 November 2010 - 21:58)
#62
Отправлено 13 November 2010 - 23:15
#63
Отправлено 16 November 2010 - 20:22
74: Constant and case types do not match. Что делать?
#64
Отправлено 16 November 2010 - 20:50
Прям и не знаю что делать
курсор ставит на строчку
0: writeln('Значение функции f(x): ', (1/f):6:2);
#65
Отправлено 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.
#66
Отправлено 17 November 2010 - 17:05
всё правильно получилось, просто я сомневался, писать или нет, так как мы еще формально flag не учили, а у меня учитель еще конечно...
спасиб, "отлично" получил)
#67
Отправлено 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.Все замечательно работает.
#68
Отправлено 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)
#69
Отправлено 17 November 2010 - 18:14
#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
Тут не нужныДа, вращать не нужно.
Спасибо, смысл понятен.
Вопрос: массивы всё-таки тут нужны, или я что-то не догоняю?
3 посетителей читают эту тему
0 пользователей, 3 гостей, 0 скрытых