18.03.2012, 19:33 | #1 (permalink) |
Новичок
Регистрация: 18.03.2012
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите найти ошибку
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; Label2: TLabel; Edit2: TEdit; Button1: TButton; Label3: TLabel; Edit3: TEdit; private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} end. procedure TForm1.Button1Click(Sender: TObject); var n,x,step1,step2,i,q: integer; function st (n: integer): real; begin if n=0 then st:=1; if n>0 then st:=x*step2 else st:=1/step1; end; begin x:=StrToFloat(Edit1.Text); n:=StrToInt(Edit2.Text); step1:=1; step2:=1; for i:=1 to(n-1) do step2:=step2*x; for q:=(-1) downto n do step1:=step1*x; Edit3.Text:=IntToStr(st(n)); end. |
18.03.2012, 19:33 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Бывает, что в аналогичных темах можно найти множество нужной информации Помогите найти ошибку на плате Помогите найти ошибку Помогите найти ошибку в Пролог-Д Помогите найти ошибку Помогите найти ошибку в программе |
18.03.2012, 21:06 | #3 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Вы целочисленной переменной x присваиваете вещественное значение. Функция st() у вас определена как вещественная, а вы результат выполнения передаете в Edit, используя команду целочисленного преобразования.
|
19.03.2012, 13:35 | #5 (permalink) |
Новичок
Регистрация: 18.03.2012
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Вот выше условие, а ошибка в том, что не выводит результат...компилятор работает, и если прогу переписать в паскале то всё отлично работает)
AlexZir, как исправить, помоги пожалуйста |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
19.03.2012, 13:57 | #6 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Сегодня дома гляну, нет компилятора под рукой сейчас.
Вот это компилятор ни в коем случае не скушает, нужно писать так: Код:
x:=StrToInt(Edit1.Text); ... Edit3.Text:=FloatToStr(st(n)); |
19.03.2012, 18:10 | #8 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Александр, где полный текст задания? Непонятно, зачем вам вычислять дополнительные переменные. По сути, в своем варианте программы вы вызываете функцию только один раз, причем с самыми последними значениями step1 и step2. При этом, насколько я это понимаю, рекурсией в вашем варианте реализации функции даже и не пахнет.
|
19.03.2012, 21:58 | #9 (permalink) |
Новичок
Регистрация: 18.03.2012
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
3*.Написать рекурсивную функцию, которая по заданному вещественному вычисляет величину согласно формуле:
если n=0 тогда st=1 если n<0 тогда st=1/x в степени (модуль n) если n>0 тогда st=x*(x в степени n-1) |
20.03.2012, 07:27 | #10 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Извините меня, конечно, но пока я совершенно не вижу, где в этом условии можно прикрутить рекурсию. Обычное сложное условие без всяких повторений функции самой в себе. У вас n в каких диапазонах изменяется?
Ждите, чуть позже выложу рабочее решение. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|