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

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

Форум «Всё о Паскале» _ Задачи _ модули

Автор: Lis 2.07.2010 4:27

Провести вычисления. Необходимые для вычислений функции (факториал, возведение в степень и т.д.) описать в модуле.

Вот есть пример кода из учебного пособия:
Описать модуль, содержащий функцию вычисления n!.

Код
unit MyUnit;
interface {раздел объявлений}
function f(n:Integer):Longint;
implementation {раздел реализации}
function f(n: Word): Longint;
var
   i: Integer; {параметр для организации цикла}
   Result: Longint; {вспомогательная переменная используемая как резуль-тат вычислений}
begin
   Result:=1; {0!=1}
   for i:= 1 to n do
   Result:=  Result*i;
   f:= Result; {формирование результата выполнения функции}
end;
begin {раздел инициализации}

end.{конец модуля}


Тут моя программа, условие прикреплено ниже картинкой.
Код
Unit MyUnit1;
interface function f(a,b,c:real):real;
implementation
function f(a,b,c:real):real;
begin
f:=(2*a-b-sin(c))/(5+abs(c));
end;
begin
end.


Подскажите пожалуйста что нужно сделать чтоб ее запустить, чтоб она работала, до меня так и не доходит.. Нужно еще вроде какой то файл создать.
Пишет ошибку при запуске Ctrl + F9
Error: Cannot run a unit
нажимаю Ок и ничего не происходит.


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Unconnected 2.07.2010 4:30

Цитата

Тут моя программа, условие прикреплено ниже картинкой.


Это не программа, ты будто ещё раз юнит пишешь. Сохрани юнит куда нужно, потом создай новый проект и в Uses напиши имя модуля, а потом можешь вызывать функции, которые в нём есть, обычным способом. И ещё, почему ты передаёшь в функцию a,b и с? Они тебе известны, их можно записать внутри функции в виде констант. Передавать надо то, что ещё неизвестно и будет дано, то есть s и t.

Автор: Lis 2.07.2010 4:35

извиняюсь за мою тупость, но я не понимаю о чем речь..
то есть мне нужно создать новый проект в Turbo Pascal, а затем что?
нужно написать одну строку чтоль: "Uses myunit1" ?
А вас не затруднит помочь исправить, насчет a,b,c?

Автор: Unconnected 2.07.2010 4:57

Про входные параметры беру слова обратно, надо действительно передавать a,b,c, тормознул я. Модуль будет выглядеть примерно так:

unit math;
interface

function fact(n:integer):longint;
function getabc(a,b,c:real):real;

implementation

Function fact(n:integer):longint;
var i:integer;
res:longint;
begin
res:=1;
for i:=2 to n do res:=res*i;
fact:=res;
end;

Function getabc(a,b,c:real):real;
begin
getabc:=(2*a-b-sin©)/(5+abs©);
end;

end.


Далее сохраняешь файл и жмёшь Compile->Build (не забудь в опциях проверить, что установлено Destination Disk). На выходе получишь TPU-файл модуля. Потом создаёшь ещё одну программу, такого содержания:

uses math;
var s,t:real;
begin
writeln(fact(5));
readln(s,t);
writeln(getabc(t,-2*s,1.17)+getabc(2.2,t,s-t));
readln;
end.

, сохраняешь, в папку с ней кидаешь свой модуль (у меня он назывался math.tpu), компилируешь..

Автор: Lis 2.07.2010 14:14

Цитата
Далее сохраняешь файл и жмёшь Compile->Build (не забудь в опциях проверить, что установлено Destination Disk). На выходе получишь TPU-файл модуля.

В опциях поставил Destination Disk, затем нажал Compile->Build, а он мне ошибку (там даже путь то не мой какой то)

Вобщем у меня все через ж*пу... если закрыть паскаль, и двойным щелчком запустить файл math.pas (при условии что его открывать с помощью TPC.EXE ), то создается TPU, далее я делаю второй файл, сохраняю его, закрываю паскаль, так же двойным щелчком его запускаю, создается файл с расширением *.exe
его запускаю и там вроде как выводится нужный результат "120".. Спасибо!

мне еще пару примеров так же нужно сделать, не поможете?

Автор: Lapp 2.07.2010 16:00

Цитата(Lis @ 2.07.2010 11:14) *
а он мне ошибку (там даже путь то не мой какой то)
Если хочешь получить помощь, пиши, какая ошибка, точно. Расплывчатые "там даже путь не мой" прибереги для телепатов.

Цитата
еще пару примеров так же нужно сделать, не поможете?
Странный вопрос. Никаких официальных лимитов на помощь у нас нет. Только если они на другую тему, то создавай новые темы и проследи, чтоб все было в соответствии с Правилами (как Форума, так и раздела).

Добавлено через 2 мин.
Да, и еще: используй правильные тэги (правила раздела, п.2)

Автор: Lis 2.07.2010 16:13

Цитата(Lapp @ 2.07.2010 12:00) *

Если хочешь получить помощь, пиши, какая ошибка, точно. Расплывчатые "там даже путь не мой" прибереги для телепатов.

Странный вопрос. Никаких официальных лимитов на помощь у нас нет. Только если они на другую тему, то создавай новые темы и проследи, чтоб все было в соответствии с Правилами (как Форума, так и раздела).

Спасибо, да все хорошо, с этой я разобрался, все работает.
Мне еще нужно две так же сделать, они на эту же тему. Тогда я прикреплю их сюда.


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Unconnected 2.07.2010 16:50

Цитата
его запускаю и там вроде как выводится нужный результат "120".. Спасибо!


Если бы ты повнимательнее посмотрел на код, то увидел бы, что после вывода 5! программа запрашивает ещё s и t и считает по второй функции.. ;)

Задание №5 я где-то уже видел. Min в задании №5 - я так понимаю, функция нахождения минимального числа из двух данных? Сможешь организовать сравнение двух параметров и по аналогии добавить функцию в модуль?

Автор: Lis 2.07.2010 16:52

вот что то мне сделали к 5 задаче, я в математике вообще не шарю(

unit myunit;

function min (x,y:real):real;
function max (x,y:real):real;

var a,b: real;
n: integer;
result: real;

function min (x,y:real):real
begin
if x<=y then min:=x
else min:=y;
end;

function max(x,y:real):real;
begin
if x>=y then max:=x
else max:=y;
end;

begin
write ('a= ');
readln (a);
write ('b= ');
readln (b);
write ('n= ');
readln (n);
result:=0;
x := a;
y := b*n;
result := result+min(x;y)
x := (a-b)^n;
y := (a+b)^n;
result := result-min(x;y)
x := a^(n-1);
y := b^n+1;
result := result+max(x;y);
writeln (result);
end.

Автор: Unconnected 2.07.2010 16:56

И это у тебя компилируется? Паскаль так просто не умеет в степень возводить, только в квадрат (и в 0.5). smile.gif

Автор: sheka 2.07.2010 17:01

Unconnected, ^ - Указатель, указывает в какую степень надо поднести lol.gif
x^n = exp(n*ln(x));

Автор: Lis 2.07.2010 17:08

блин ну тогда все потеряно sad.gif мне сейчас через пару часов это все сдавать надо, уже обратиться не к кому sad.gif

Автор: TarasBer 2.07.2010 17:08

А если икс отрицательное? Или ноль?