Весь ХарцызскГлавная Весь Харцызск
Весь Харцызск
Весь Харцызск
   Логин:  Пароль:

14.04.2021 г. 3:47 

Виды Харцызска 

Виды Харцызска

Весь Харцызск 

  Главная
  Новости Харцызска

  Информация о Харцызске
  О городе
  Власти Харцызска
  История города
  Статистика города
  Статьи о городе
  Каталог предприятий
  Карта Харцызска
  Харцызск на карте Google

  Задать вопрос мэру Харцызска
  Юридическая консультация

  Форум
  Чат

  Фотоальбом
  Файлы
  Ссылки

  Телепрограмма 
  Гороскопы
  Анекдоты
  Игры

  Топ-10
  Поиск

  О нас
  Реклама на сайте
  Написать нам
  Рекомендовать нас
  Добавить в Избранное

Кто на сайте: 


В чате: 1


Реклама 

Интернет-провайдер «DiDAN» — 100 Мбит/сек!

Поиск по сайту 




Реклама 


• 





Весь Харцызск :: Просмотр темы - Borland Turbo Paskal
 Правила форумаПравила   FAQFAQ   ПоискПоиск   ГруппыГруппы   ПользователиПользователи   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход  


Внимание новичков!

В связи с участившимися случаями спама, у вновь зарегистрированных пользователей отключена возможность создания сообщений на форуме. Возможность писать сообщения будет включаться администратором вручную — через некоторое время после регистрации пользователя. Для включения этой функции быстрее, пишите личное сообщение администратору сайта (в сообщении напишите кратко о себе и с какой целью регистрировались на сайте).
Обратите внимание: пользователям, нарушающим п.2.1 возможность писать сообщения включаться не будет!
Просим отнестись с пониманием: это вынужденная мера.
 

Borland Turbo Paskal

 
Начать новую тему   Ответить на тему    Список форумов Весь Харцызск -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
SHTORM
Старожил
Старожил


Зарегистрирован: Apr 23, 2006
Сообщения: 281

СообщениеДобавлено: Пт Dec 22, 2006 14:54    Заголовок сообщения: Borland Turbo Paskal Ответить с цитатой

Вот какая проблемка. Дана задача:
Для формулы y:=log2(x-4)+exp(2a-x) вычислить значение результата для массива чисел от 1 до 50 с шагом 0,2. Результаты вычислений представить в виде таблицы и сохранить в файле.
Я так понял, это табулирование функции. В программе используются следующие переменные: xmin и xmax - для указания диапазона (интервала) табулирования; dx - для указания шага табулирования; x и y - для арумента и значения функции, соответственно. Вот написал программку на Паскаль:

PROGRAM TablFunc_1;
VAR
x, y,
xmin, xmax, dx : Real;
BEGIN
Writeln('Табулирование функции');
xmin := 1;
xmax := 50;
dx := 0.2;
x := xmin;
WHILE x<=xmax DO begin
y := log2(x-4)+exp(2a-x);
Writeln(x:6:3, y:6:3);
x := x+dx;
end {while};
Readln
END.


Прога Borland Turbo Paskal 7.0 при компиляции выдает, что log2 - неизвестный индетификатор. Пробовал убрать двойку, все равно log - неизвестный идентификатор. Странно. Может я ошибся при написании программы? Подскажите, если кто соображает в этих делах.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
ale
Постоялец
Постоялец


Зарегистрирован: Aug 30, 2006
Сообщения: 38

СообщениеДобавлено: Пт Dec 22, 2006 15:13    Заголовок сообщения: Re: Borland Turbo Paskal Ответить с цитатой

SHTORM писал(а):
Прога Borland Turbo Paskal 7.0 при компиляции выдает, что log2 - неизвестный индетификатор. Пробовал убрать двойку, все равно log - неизвестный идентификатор. Странно. Может я ошибся при написании программы? Подскажите, если кто соображает в этих делах.

http://www.michael-prokop.at/google.png

ну да ладно, я седня добрый:
В Паскале только натуральный логарифм есть (если не использовать дополнительные модуль Math).
Впрочем логарифм по нужному основанию можно получить вот так:
log_a(B)=log_c(B)/log_c(a)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Techus
Omne ignotum pro magnifico est


Зарегистрирован: Mar 21, 2006
Сообщения: 259
Откуда: Харцызск

СообщениеДобавлено: Пт Dec 22, 2006 16:46    Заголовок сообщения: Ответить с цитатой

ale, прав. Нужно поменятб основание логарифма. И где ты такое слово взял, "табулирования"?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Владислав_ДИВАКОВ
Старожил
Старожил


Зарегистрирован: Apr 20, 2006
Сообщения: 175
Откуда: Из Харцызска

СообщениеДобавлено: Пт Dec 22, 2006 17:34    Заголовок сообщения: Ответить с цитатой

Присоединяюсь к ale и Techus'у. Но, ребята, компилятору параллельно, что вы указали не то основание. Ему главное, чтобы имя функции, число и тип ее параметров совпали с тем, которое есть в его библиотеке. Если не ошибаюсь, за натуральный логорифм в Турбо Паскале отвечает функция lg()
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Techus
Omne ignotum pro magnifico est


Зарегистрирован: Mar 21, 2006
Сообщения: 259
Откуда: Харцызск

СообщениеДобавлено: Пт Dec 22, 2006 19:05    Заголовок сообщения: Ответить с цитатой

ошибаешься - ln()
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
SHTORM
Старожил
Старожил


Зарегистрирован: Apr 23, 2006
Сообщения: 281

СообщениеДобавлено: Вс Dec 24, 2006 23:08    Заголовок сообщения: Ответить с цитатой

Techus писал(а):
ale, прав. Нужно поменятб основание логарифма. И где ты такое слово взял, "табулирования"?


Табулирование функции - это вычисление значенй функции при изменении аргумента от некоторого начального значения до некоторого конечного значения с определенным шагом. Именно так составляются таблицы значений функций, отсюда и название - табулирование. Необходимость в табулировании возникает при решении достаточно широкого круга задач. Например, при численном решении нелинейных уравнений f(x) = 0, путем табулирования можно отделить (локализовать) корни уравнения, т.е. найти такие отрезки, на концах которых, функция имеет разные знаки. С помощью табулирования можно, хотя и очень грубо, найти минимум или максимум функции. Иногда случается так, что функция не имеет аналитического представления, а ее значения получаются в результате вычислений, что часто бывает при компьютерном моделировании различных процессов. Если такая функция будет использоваться в последующих расчетах (например, она должна быть проинтегрирована или продифференцирована и т.п.), то часто поступают следующим образом: вычисляют значения функции в нужном интервале изменения аргумента, т.е. составляют таблицу (табулируют), а затем по этой таблице строят каким-либо образом другую функцию, заданную аналитическим выражением (формулой). Необходимость в табулировании возникает также при построении графиков функции на экране компьютера. И т.д. и т.п.

Итак, пусть необходимо протабулировать функцию y(x)=exp(-x2) на интервале [-2, 2] с шагом 0.1. Поскольку программа должна многократно вычислять значения функции (одной и той же), то разумно составить циклический алгоритм. Для организации цикла можно использовать любой из циклических операторов (WHILE, REPEAT..UNTIL или FOR). В данной постановке задачи наиболее удобны два первых оператора, поскольку для оператора FOR необходимо еще предварительно вычислить количество шагов.

Ниже приведены две программы, которые используют операторы WHILE и REPEAT..UNTIL для органзцации цикла, а также блок-схемы соответствующих алгоритмов.

В программах используются следующие переменные: xmin и xmax - для указания диапазона (интервала) табулирования; dx - для указания шага табулирования; x и y - для арумента и значения функции, соответственно.

PROGRAM TablFunc_1;
VAR
x, y,
xmin, xmax, dx : Real;
BEGIN
Writeln('Табулирование функции.');
xmin := -2;
xmax := 2;
dx := 0.1;
x := xmin;
WHILE x<=xmax DO begin
y := exp(-sqr(x));
Writeln(x:6:3, y:6:3);
x := x+dx;
end {while};
Readln
END.

PROGRAM TablFunc_2;
VAR
x, y,
xmin, xmax, dx : Real;
BEGIN
Writeln('Табулирование функции.');
xmin := -2;
xmax := 2;
dx := 0.1;
x := xmin;
REPEAT
y := exp(-sqr(x));
Writeln(x:6:3, y:6:3);
x := x+dx;
UNTIL (x>xmax);
Readln
END.

Любую из этих программ можно легко модифицировать с тем, чтобы значения переменных xmin, xmax и dx, определяющих, соответственно, интервал изменения аргумента и шаг, задавались с клавиатуры.

Изменим немного постановку задачи: необходимо вычислить значения функции y(x)=exp(-x2) на интервале [-2, 2] в 20-ти равноотстоящих точках (узлах). Здесь явно не задан шаг, а указано количество значений аргумента N=20 и, соответственно, количество значений функции. Шаг табулирование определяется простым соотношением

dx = (xmax-xmin)/(N-1).

Значение аргумента на любом i-том шаге можно определить как

xi = xmin + dx * (i-1).

При решении этой задачи оператор FOR оказывается наиболее подходящим.

PROGRAM TablFunc_3;
VAR
x, y,
xmin, xmax, dx : Real;
i, N : Integer;
BEGIN
Writeln('Табулирование функции.');
xmin := -2;
xmax := 2;
N := 20;
dx := (xmax-xmin)/(N-1);
FOR i:=1 TO N DO begin
x := xmin + dx*(i-1);
y := exp(-sqr(x));
Writeln(x:6:3, y:6:3);
end {for};
Readln;
END.

Во всех рассмотренных выше примерах, результаты табулирования просто выводятся на экран и не доступны в дальнейшем. Для хранения результатов табулирования можно использовать два одномерных массива (вектора) длинной N. Если результаты необходимо сохранить и по окончании работы программы, то их можно записать в текстовый файл.

Ниже приведен пример, в котором результаты табулирования записываются в массивы и одновременно сохраняются в текстовом файле с именем tabl.dat в текущем каталоге.

PROGRAM TablFunc_4;
CONST
N = 20; { табулируем функцию в 20-ти точках }
VAR
X, Y : array[1..N] of Real;
xmin, xmax, dx : Real;
i : Integer;
f : Text; { файловая переменная }
BEGIN
Assign(f,'tabl.dat'); { связываем f с физическим файлом }
Rewrite(f); { открываем новый файл для записи }
Writeln('Табулирование функции.');
xmin := -2;
xmax := 2;
dx := (xmax-xmin)/(N-1);
FOR i:=1 TO N DO begin
X[i] := xmin + dx*(i-1);
Y[i] := exp(-sqr(X[i]));
Writeln(X[i]:6:3, Y[i]:6:3);
Writeln(f, X[i]:6:3, Y[i]:6:3); { выводим данные в файл }
end {for};
Close(f); { закрываем файл }
{ Здесь можно использовать массивы
X и Y для дальнейших вычислений }
Readln
END.

Спасибо ребята за помощь, попробую сделать по вашим подсказкам Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Весь Харцызск -> Программирование Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001 phpBB Group

Version 2.0.6 of PHP-Nuke Port by Tom Nitzschner © 2002 www.toms-home.com
Forums ©



Наверх
О нас  :: Контакт с автором  :: Реклама на сайте  :: Рекомендовать Нас
Наверх
Khartsizsk2007 theme by Весь Харцызск
Яндекс цитирования
Все логотипы и торговые марки на этом сайте являются собственностью их соответствующих владельцев. Все материалы на сайте являются собственностью их авторов. Администрация сайта может не разделять точку зрения авторов. Использование материалов сайта без разрешения администрации сайта не допускается
© 2006 - 2016 khartsizsk.com Использование материалов разрешается при условии ссылки (для интернет-изданий - гиперссылки) на сайт «Весь Харцызск»
PHP-Nuke Copyright © 2006 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. The Russiаn localizatiоn - prоjесt РhрNukе.RU
Открытие страницы: 0.02 секунды и 16 запросов к БД