1) Подсчитать количество (k) цифр в десятичной записи целого неотрицательного числа n. 2) Даны натуральное n и вещественные числа x1,y1,x2,y2,...,xn,yn. Рассматривая пары xi и yi как координаты точек на плоскости, определить радиус наименьшего круга (с центром в начале координат), внутрь которого попадают все эти точки. В паскале плохо шарю и плохо его помню...а тут такое дело - завтра лабораторную эту сдавать а я не могу даже вникнуть...прошу помочь...
мисс_граффити
16.09.2007 20:51
Читать правила + пользоваться поиском. Первая точно решалась. Если тема не будет переименована в течение часа - закрою.
З.Ы. Плюсики ты пока не можешь ставить.
klem4
17.09.2007 1:00
по поводу первой задачи ... Если с центром в начале координат, то мне кажется достаточно найти самую удаленную точку от начала координат (используй теорему Пифагора), расстояние до нее собственно и будет радиусом ...
по поводу второй:
обнуляешь счетчик
далее начинаешь делить заданное число на 10 без остатка и увеличивать счетчик на 1 до тех пор, пока число > 0.
klem4
17.09.2007 1:31
{$R-}uses crt, graph;
type
TPoint = record
x, y: integer;
end;
const
zero: TPoint = (x:0; y:0);
type
PArray = ^TArray;
TArray = array [1..1] of TPoint;
function get_len(const a, b: TPoint): Single;
begin
get_len := sqrt(sqr(a.x - b.x) + sqr(a.y - b.y));
end;
function FloatToStr(const fValue: single): String;
begin
str(fValue:5:2, FloatToStr);
end;
var
gd, gm, cx, cy, mx, my: integer;
i, n: integer;
len, max_len: single;
points: PArray;
begin
gd := detect;
initgraph(gd, gm, '');
mx := getMaxX;
my := getMaxY;
cx := mx div2;
cy := my div2;
setColor(RED);
line(cx, 0, cx, my);
line(0, cy, mx, cy);
n := 150;
GetMem(points, n * sizeof(TArray));
randomize;
setColor(BLUE);
setFillStyle(SOLIDFILL, blue);
for i := 1to n dobegin
points^[i].x := random(301) - 150;
points^[i].y := random(301) - 150;
fillellipse(cx + points^[i].x, cy - points^[i].y, 2, 2);
end;
max_len := get_len(zero, points^[1]);
for i := 2to n dobegin
len := get_len(zero, points^[i]);
if len > max_len then
max_len := len;
end;
setColor(WHITE);
circle(cx, cy, round(max_len));
outTextXY(1, 1, 'R = ' + FloatToStr(max_len));
readkey;
closegraph;
FreeMem(points, n * sizeof(TArray));
end.
Archie
17.09.2007 1:44
СПС
volvo
17.09.2007 1:52
function FloatToStr(const fValue: single): String;
begin
str(fValue:5:2, FloatToStr);
end;
Это не должно компилироваться (хотя надо будет проверить)
klem4
17.09.2007 10:35
ну я вот тоже ради эксперемента попробовал, вроде нормально ))
volvo
17.09.2007 13:17
Компилятор какой? У меня ни TP, ни FPC 2.2 это НЕ компилируют...
klem4
17.09.2007 17:42
FPC 1.0.8 compiler ver. 2.0.4 BP не компилит ...
Теперь меня другое волнует, почему следующий код выдает invalid floating point operation на BP ?! (никаких изменений, просто убрана графика)
{$R-}{$N+}uses crt, graph;
type
TPoint = record
x, y: integer;
end;
const
zero: TPoint = (x:0; y:0);
type
PArray = ^TArray;
TArray = array [1..1] of TPoint;
function get_len(const a, b: TPoint): Single;
begin
get_len := sqrt(sqr(a.x - b.x) + sqr(a.y - b.y));
end;
function FloatToStr(const fValue: single): String;
var
temp: string;
begin
str(fValue:5:2, temp);
FloatToStr := temp;
end;
var
gd, gm, cx, cy, mx, my: integer;
i, j, n: integer;
len, max_len: single;
points: PArray;
begin{gd := detect;
initgraph(gd, gm, 'd:\bp\bgi');
mx := getMaxX;
my := getMaxY;
cx := mx div 2;
cy := my div 2;
setColor(RED);
line(cx, 0, cx, my);
line(0, cy, mx, cy);
}
n := 15;
GetMem(points, n * sizeof(TArray));
randomize;
{
setColor(BLUE);
setFillStyle(SOLIDFILL, blue);
}for i := 1to n dobegin
points^[i].x := random(301) - 150;
points^[i].y := random(301) - 150;
{
fillellipse(cx + points^[i].x, cy - points^[i].y, 2, 2);
}end;
max_len := get_len(zero, points^[1]);
for i := 2to n dobegin
len := get_len(zero, points^[i]);
if len > max_len then
max_len := len;
end;
{
setColor(WHITE);
circle(cx, cy, round(max_len));
outTextXY(1, 1, 'R = ' + FloatToStr(max_len));
}
readkey;
{
closegraph;
}
FreeMem(points, n * sizeof(TArray));
end.