воскресенье, 25 июля 2010
2 вопроса.Pascal.Здравствуйте,есть 2 вопроса:
1-ый: Имеется вот такая функция :
=======================
Function transform(i:integer;K:byte):boolean;
begin
If (i < K) then transform:=true
else If ((i mod (K*K)) = 0) then transform:=false
else transform( (i div K) , K);
end;
========================
Далее я вызываю эту под-программу и передаю случайные параметры:
l:=transform(29,3);//l:boolean
writeln(l);
И вижу следущее : TRUE
Я никак не могу понять в чём проблема ведь должно быть false ,а не true
2-ой вопрос : Как написать следующую программу : вводится функция y=f(x) как строка,левая и правая границы отрезка и шаг.Нужно вычислить значение этой функции на данном отрезке в соотвествии с указанным шагом.
Сколько я ни пробовал её написать,не получается,трудность в основном заключается в том,что функция воспринимается машиной как набор символов
Заранее спасибо.Modified by moderator. Код оформляем нормально....
@темы:
Pascal
-
-
25.07.2010 в 02:491.
вы вызываете функцию transform.
Она идет по ветке кода else, в которой рекурсивно вызывается функция transform().
Рекурсивно вызванная функция transform идет по ветке else if, в которой возвращает значение FALSE. Но! - возвращает она его не программе, а той функции, которая ее вызвала, т.е. функции transform верхнего уровня.
Функция transform верхнего уровня доходит до конца конструкции if/else и (я так понимаю, поскольку возвращаемое значение не определено явно) использует значение возврата по умолчанию, которое стоит в TRUE.
2.
либо подключайте внешний парсер строк, позволяющий трактовать их как матем. выражение, либо описывайте операторы и правила, которые могут встречаться в строке, руками.
-
-
25.07.2010 в 07:59-
-
25.07.2010 в 13:23Я никак не могу понять в чём проблема ведь должно быть false ,а не true
Проблема в том, что в строке else transform( (i div K) , K); вычисляется выражение transform( (i div K) , K); но функция вычисленное значение не возвращает. То есть вычислилось значение false, мы ничего с ним не сделали, пошли дальше до конца блока и вернули значение по умолчанию.
-
-
25.07.2010 в 15:33-
-
25.07.2010 в 21:34да. Далее все так, как написал Слушатель
-
-
26.07.2010 в 00:44-
-
26.07.2010 в 01:14посмотрите примеры: www.delphikingdom.com/asp/viewitem.asp?catalogi...
-
-
26.07.2010 в 13:45У Microsoft есть интерпритатор скриптов: ScriptControl. Импортируйте его из ActiveX и считайте выражения, введенные строкой. Он сам их распарсит и вычислит. Вот описание: citforum.ru/programming/delphi/msdelphi/
Можно еще использовать сторонние компоненты.
Хотя если задача учебная - можно и вручную проанализировать и посчитать.
-
-
27.07.2010 в 00:42Вы не знаете с чем это может быть связано?Вот код на всякий случай:
#include
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
-
-
27.07.2010 в 01:09[Linker Error] Unresolved external '_main' referenced from...
Нет main функции (первая функция куда заходит программа (точка входа)). Пишется:
В main ты создаёшь экземпляр формы.
Если ты пишешь модуль в котором эти функции реализуешь, то для того чтобы запустить всю программу - в другом файле (модуле) всё равно нужно задать точку входа.