• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Процедуры и функции. Паскаль

Ксения)777)

Новые
Регистрация
25 Дек 2010
Сообщения
12
Реакции
0
Баллы
0
Процедуры и функции. Паскаль

Задача 1.
Определить площадь треугольника по трём вершинам.Треугольник задан координатами своих вершин. Нахождение длины сторон оформить в подпрограмме.
Задача 2.
Составить программу определения количества цифр в целом числе.
 
Задача 1.
Определить площадь треугольника по трём вершинам.Треугольник задан координатами своих вершин. Нахождение длины сторон оформить в подпрограмме.
Задача 2.
Составить программу определения количества цифр в целом числе.
Код:
VAR
 Xa,Ya,Xb,Yb,Xc,Yc,p,S:REAL;

Function Side(x1,y1,x2,y2:REAL):REAL;
 begin
  Side:=SQRT(SQR(x1-x2)+SQR(y1-y2));
 end;

BEGIN
 Write('Xa= ');
 Readln(Xa);
 Write('Ya= ');
 Readln(Ya);
 Write('Xb= ');
 Readln(Xb);
 Write('Yb= ');
 Readln(Yb);
 Write('Xc= ');
 Readln(Xc);
 Write('Yc= ');
 Readln(Yc);
 p:=0.5*(Side(Xa,Ya,Xb,Yb)+Side(Xa,Ya,Xc,Yc)+Side(Xb,Yb,Xc,Yc));
 S:=SQRT(p*(p-Side(Xa,Ya,Xb,Yb))*(p-Side(Xa,Ya,Xc,Yc))*(p-Side(Xb,Yb,Xc,Yc)));
 WriteLn('S=',S:10:5);
 ReadLn;
END.
Код:
VAR
 n:LongInt;
BEGIN
 Write('n= ');
 ReadLn(n);
 If n=0 then
  WriteLn('1')
 else
  WriteLn(TRUNC(Ln(Abs(n))/Ln(10))+1);
 ReadLn;
END.
 
Пожалуйста обьясните строчку:
Код:
WriteLn(TRUNC([COLOR=Red]Ln(Abs(n))/Ln(10))+1[/COLOR]);
 
Пожалуйста обьясните строчку:
<code>WriteLn(TRUNC(Ln(Abs(n))/Ln(10))+1);</code>
Очень просто, достаточно вспомнить определение логарифма.
Итак, логарифм положительного числа по основанию 10 - величина, в которую нужно возвести 10 чтобы получить это самое число.
Код:
log10(10) =1      10=10
log10(100)=2     100=10^2=10*10
log10(1000)=3   1000=100^3=10*10*10
Таким образом, для любого числа в десятичной системе счисления достаточно взять целую часть его десятичного логарифма и прибавить 1, чтобы узнать число цифр в его записи.

Так как Паскаль (а точнее, математический сопроцессор) умеет считать только логарифмы по основанию e=2,7... (натуральные логарифмы), применена формула перехода к другому основанию
Код:
Ln(Abs(n))/Ln(10)=log10(Abs(n))
Модуль (abs) здесь появился именно из-за требования положительности числа под логарифмом.

А trunc как раз и берет ту самую целую часть от десятичного логарифма.

Важные замечания:
1)
Обратите внимание, что сначала берется целая часть, а затем прибавляется единица. Это очень важно, иначе программа будет врать.
2) При n=0 трюк с логарифмом работать не будет. Поэтому 0 обрабатывается отдельно.
 
Long Cat - снимаю шляпу (мысленно). :D:D:D
 
Спасибо :-) Давно меня не было...
 
Спасибо :-) Давно меня не было...
offtopic.gif Что, замечу, весьма и весьма прискорбно. Сколько раз, бывало, просят люди помочь с микропроцессорами, прошивками и т.п. - и думаешь: "Эх, где-то наш Long Cat!"... Да и СИ-шников мало.
Так что Вы уж, пожалуйста, постарайтесь (по возможности) надолго не исчезать.
 
Посмотреть вложение 30749 Что, замечу, весьма и весьма прискорбно. Сколько раз, бывало, просят люди помочь с микропроцессорами, прошивками и т.п. - и думаешь: "Эх, где-то наш Long Cat!"... Да и СИ-шников мало.
Так что Вы уж, пожалуйста, постарайтесь (по возможности) надолго не исчезать.
К сожалению, очень много работы. Так что буду появляться набегами :-)
 
во второй задаче нужно использовать процедуру или функцию!
 
Назад
Сверху