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


Ответ
 
Опции темы Опции просмотра
Старый 19.02.2011, 18:24   #1 (permalink)
Ксения)777)
Member
 
Регистрация: 25.12.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Процедуры и функции. Паскаль

Задача 1.
Определить площадь треугольника по трём вершинам.Треугольник задан координатами своих вершин. Нахождение длины сторон оформить в подпрограмме.
Задача 2.
Составить программу определения количества цифр в целом числе.
Ксения)777) вне форума   Ответить с цитированием

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

Люди часто создают схожие топики, советую вам почитать созданное ранее

Оформить в виде процедуры. Паскаль
Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл
Процедуры, функции
Паскаль - график функции
Процедуры-подпрограммы-паскаль
Процедуры-массивы

Старый 19.02.2011, 18:50   #2 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,343
Сказал(а) спасибо: 288
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Цитата:
Сообщение от Ксения)777) Посмотреть сообщение
Задача 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.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 20.02.2011, 08:26   #3 (permalink)
Mr.Програмист
Banned
 
Регистрация: 25.01.2011
Сообщений: 27
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Пожалуйста обьясните строчку:
Код:
WriteLn(TRUNC(Ln(Abs(n))/Ln(10))+1);
Mr.Програмист вне форума   Ответить с цитированием
Старый 20.02.2011, 09:21   #4 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,343
Сказал(а) спасибо: 288
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Цитата:
Сообщение от Mr.Програмист Посмотреть сообщение
Пожалуйста обьясните строчку:
Код:
WriteLn(TRUNC(Ln(Abs(n))/Ln(10))+1);
А Вы знаете что такое логарифм?
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 20.02.2011, 09:22   #5 (permalink)
Long Cat
Banned
 
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
По умолчанию

Цитата:
Сообщение от Mr.Програмист Посмотреть сообщение
Пожалуйста обьясните строчку:
<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 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 20.02.2011, 09:25   #6 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,343
Сказал(а) спасибо: 288
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Long Cat - снимаю шляпу (мысленно).
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 20.02.2011, 09:27   #7 (permalink)
Long Cat
Banned
 
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
По умолчанию

Спасибо :-) Давно меня не было...
Long Cat вне форума   Ответить с цитированием
Старый 20.02.2011, 09:33   #8 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,343
Сказал(а) спасибо: 288
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Цитата:
Сообщение от Long Cat Посмотреть сообщение
Спасибо :-) Давно меня не было...
Название: offtopic.gif
Просмотров: 563

Размер: 925 байт Что, замечу, весьма и весьма прискорбно. Сколько раз, бывало, просят люди помочь с микропроцессорами, прошивками и т.п. - и думаешь: "Эх, где-то наш Long Cat!"... Да и СИ-шников мало.
Так что Вы уж, пожалуйста, постарайтесь (по возможности) надолго не исчезать.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 20.02.2011, 09:36   #9 (permalink)
Long Cat
Banned
 
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Вложение 30749 Что, замечу, весьма и весьма прискорбно. Сколько раз, бывало, просят люди помочь с микропроцессорами, прошивками и т.п. - и думаешь: "Эх, где-то наш Long Cat!"... Да и СИ-шников мало.
Так что Вы уж, пожалуйста, постарайтесь (по возможности) надолго не исчезать.
К сожалению, очень много работы. Так что буду появляться набегами :-)
Long Cat вне форума   Ответить с цитированием
Старый 20.02.2011, 11:57   #10 (permalink)
Mr.Програмист
Banned
 
Регистрация: 25.01.2011
Сообщений: 27
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S
А Вы знаете что такое логарифм?
Нет я ещё школяр.
Mr.Програмист вне форума   Ответить с цитированием
Ads

Яндекс

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

Опции темы
Опции просмотра

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

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




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

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