04.03.2012, 18:59 | #1 (permalink) |
Новичок
Регистрация: 04.03.2012
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите, пожалуйста, с решением двух задач в Pascal
Все задачи нужно решить тремя способами: 1)счетчик (for to do) 2)предпроверка условия (while do) 3)постпроверка условия (repeat until) Задача№2 Напишите программу вычисления среднего геометрического модулей двух введенных с клавиатуры целых чисел.Условие выхода из цикла – значение числа, равное 999. Задача№3 На воду опущен шар радиуса r, изготовленный из вещества плотности p (p<1). Найти расстояние от центра шара до поверхности воды. Указание. При составлении программы воспользоваться формулой объема шарового сегмента высоты h: V = пи*h^2 (3r - h)/3, где r - радиус шара, h - высота шарового сегмента. |
04.03.2012, 18:59 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Прочитайте, и я уверен, что ситуация станет ясней Visual Basic, помогите с решением задач Паскаль. Помогите с решением задач Ребят, помогите, пожалуйста, с Pascal Помогите, пожалуйста, с решением задачи Помогите решить, пожалуйста. Pascal |
04.03.2012, 21:06 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Прежде всего - рассмотрим физико-математическую сторону. Обозначим: R - радиус шара V - объем шара Vs - объем погруженного в воду сегмента h - высота погруженного сегмента, т.е. расстояние от поверхности воды до нижней точки шара g - ускорение свободного падения p - плотность вещества шара По закону Архимеда, вес плавающего шара уравновешивается выталкивающей силой, равной весу вытесненной воды. Т.е., принимая плотность воды за 1, имеем: V*p*g=Vs*g, или (4*π*R³*p*g)/3 =(π*h²*(3R-h)*g)/3 Сокращая всё, что сокращается, и вводя обозначение x=h/R, приходим к уравнению x³ - 3x² + 4p = 0. Уравнение - кубичное, а потому в программах решается численно. Сразу предупреждаю, что я использую свой любимый метод десятикратного дробления шага, а не это дебильное половинное деление, которому вас учат. Извините. Искомая величина (d) есть (1-x)*R, при этом если центр шара находится над поверхностью воды, то считаем расстояние положительным, в противном случае - отрицательным. Ну и сами программки: Код:
Var d,p:Real; i:Byte; Function Search_x(Ro:real):real; var x,step:real; k:byte; begin step:=1.0; x:=-0.1; for k:=1 to 5 do begin step:=step/10; Repeat x:=x+step; Until (x*x*x-x*x*3+Ro*4)<=0; x:=x-step; end; Search_x:=x; end; Begin For i:=1 to 19 do begin p:=0.05*i; d:=1-Search_x(p); writeln('p= ',p:4:2,' D= ',d:8:5,'*R'); end; readln; End. Код:
Var d,p:Real; Function Search_x(Ro:real):real; var x,step:real; k:byte; begin step:=1.0; x:=-0.1; for k:=1 to 5 do begin step:=step/10; Repeat x:=x+step; Until (x*x*x-x*x*3+Ro*4)<=0; x:=x-step; end; Search_x:=x; end; Begin p:=0.5; While p<1 do begin write('Ball density (>0 and <1); "1" to quit: '); readln(p); d:=1-Search_x(p); writeln('p= ',p:4:2,' D= ',d:8:5,'*R'); end; End. Код:
Var d,p:Real; Function Search_x(Ro:real):real; var x,step:real; k:byte; begin step:=1.0; x:=-0.1; for k:=1 to 5 do begin step:=step/10; Repeat x:=x+step; Until (x*x*x-x*x*3+Ro*4)<=0; x:=x-step; end; Search_x:=x; end; Begin Repeat write('Ball density (>0 and <1); "1" to quit: '); readln(p); d:=1-Search_x(p); writeln('p= ',p:4:2,' D= ',d:8:5,'*R'); Until p=1; End. |
|
05.03.2012, 08:14 | #3 (permalink) |
Новичок
Регистрация: 04.03.2012
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо Vladimir_S
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|