• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите найти ошибку

Александр1111

Ученик
Регистрация
18 Мар 2012
Сообщения
7
Реакции
0
Баллы
0
Помогите найти ошибку

unit Unit1;

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.
 
какую ошибку? что должна делать программа?
 
Вы целочисленной переменной x присваиваете вещественное значение. Функция st() у вас определена как вещественная, а вы результат выполнения передаете в Edit, используя команду целочисленного преобразования.
 
аписать рекурсивную функцию, которая по заданному вещественному вычисляет величину согласно формуле
 
Вот выше условие, а ошибка в том, что не выводит результат...компилятор работает, и если прогу переписать в паскале то всё отлично работает)
AlexZir, как исправить, помоги пожалуйста
 
Сегодня дома гляну, нет компилятора под рукой сейчас.
var n,x,step1,step2,i,q: integer;
x:=StrToFloat(Edit1.Text);
Вот это компилятор ни в коем случае не скушает, нужно писать так:
Код:
x:=StrToInt(Edit1.Text);
...
Edit3.Text:=FloatToStr(st(n));
 
Александр, где полный текст задания? Непонятно, зачем вам вычислять дополнительные переменные. По сути, в своем варианте программы вы вызываете функцию только один раз, причем с самыми последними значениями step1 и step2. При этом, насколько я это понимаю, рекурсией в вашем варианте реализации функции даже и не пахнет.
 
3*.Написать рекурсивную функцию, которая по заданному вещественному вычисляет величину согласно формуле:
если n=0 тогда st=1
если n<0 тогда st=1/x в степени (модуль n)
если n>0 тогда st=x*(x в степени n-1)
 
Извините меня, конечно, но пока я совершенно не вижу, где в этом условии можно прикрутить рекурсию. Обычное сложное условие без всяких повторений функции самой в себе. У вас n в каких диапазонах изменяется?

Ждите, чуть позже выложу рабочее решение.
 
Ну вот такое задание(((не задан диапазон, любой, до longint думаю))
спасибо, жду)
 
Назад
Сверху