Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 04.03.2012, 18:59   #1 (permalink)
Jenya_Miller
Новичок
 
Регистрация: 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 - высота шарового сегмента.
Jenya_Miller вне форума   Ответить с цитированием

Старый 04.03.2012, 18:59
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Прочитайте, и я уверен, что ситуация станет ясней

Visual Basic, помогите с решением задач
Паскаль. Помогите с решением задач
Ребят, помогите, пожалуйста, с Pascal
Помогите, пожалуйста, с решением задачи
Помогите решить, пожалуйста. Pascal

Старый 04.03.2012, 21:06   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Jenya_Miller Посмотреть сообщение
На воду опущен шар радиуса r, изготовленный из вещества плотности p (p<1). Найти расстояние от центра шара до поверхности воды. Указание. При составлении программы воспользоваться формулой объема шарового сегмента высоты h: V = пи*h^2 (3r - h)/3, где r - радиус шара, h - высота шарового сегмента.
Что касается первой задачки, то с этим детским садом уж управьтесь самостоятельно. А вот вторая поинтереснее.
Прежде всего - рассмотрим физико-математическую сторону.
Обозначим:
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 05.03.2012, 08:14   #3 (permalink)
Jenya_Miller
Новичок
 
Регистрация: 04.03.2012
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо Vladimir_S
Jenya_Miller вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 00:02.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.