Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Сосчитать количество чисел в десятичной записи числа

Автор: Archie 16.09.2007 20:49

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 div 2;
cy := my div 2;

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 := 1 to n do begin

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 := 2 to n do begin
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

ну я вот тоже ради эксперемента попробовал, вроде нормально smile.gif))

Автор: 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 blink.gif wacko.gif ?!
(никаких изменений, просто убрана графика)

{$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 := 1 to n do begin

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 := 2 to n do begin
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.


Добавлено через 15 мин.
Проблема ясна ...

sqr(200) = -25536 smile.gif


Добавлено через 4 мин.
Век живи, век учись ...


begin
writeln('200*200 = ', 200*200);
writeln('sqr(200) = ', sqr(200));
writeln('sqr(200.0) = ', sqr(200.0):0:0);
end.


По чему так, написано в хелпе ...

Автор: volvo 17.09.2007 19:14

Цитата
FPC 1.0.8 compiler ver. 2.0.4
yes2.gif В {$MODE ObjFPC}... Однако, раздел называется "Задачи", а не "32-битные компиляторы"...

Цитата
По чему так, написано в хелпе ...
... и на форуме тоже объяснялось неоднократно...