Помощь - Поиск - Пользователи - Календарь
Полная версия: Сосчитать количество чисел в десятичной записи числа
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Archie
1) Подсчитать количество (k) цифр в десятичной записи целого неотрицательного числа n.
2) Даны натуральное n и вещественные числа x1,y1,x2,y2,...,xn,yn. Рассматривая пары xi и yi как координаты точек на плоскости, определить радиус наименьшего круга (с центром в начале координат), внутрь которого попадают все эти точки.
В паскале плохо шарю и плохо его помню...а тут такое дело - завтра лабораторную эту сдавать а я не могу даже вникнуть...прошу помочь...
мисс_граффити
Читать правила + пользоваться поиском. Первая точно решалась.
Если тема не будет переименована в течение часа - закрою.

З.Ы. Плюсики ты пока не можешь ставить.
klem4
по поводу первой задачи ... Если с центром в начале координат, то мне кажется достаточно найти самую удаленную точку от начала координат (используй теорему Пифагора), расстояние до нее собственно и будет радиусом ...

по поводу второй:

обнуляешь счетчик

далее начинаешь делить заданное число на 10 без остатка и увеличивать счетчик на 1 до тех пор, пока число > 0.
klem4
{$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
СПС
volvo
function FloatToStr(const fValue: single): String;
begin
str(fValue:5:2, FloatToStr);
end;


Это не должно компилироваться (хотя надо будет проверить)
klem4
ну я вот тоже ради эксперемента попробовал, вроде нормально smile.gif))
volvo
Компилятор какой? У меня ни TP, ни FPC 2.2 это НЕ компилируют...
klem4
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
Цитата
FPC 1.0.8 compiler ver. 2.0.4
yes2.gif В {$MODE ObjFPC}... Однако, раздел называется "Задачи", а не "32-битные компиляторы"...

Цитата
По чему так, написано в хелпе ...
... и на форуме тоже объяснялось неоднократно...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.