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

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

Форум «Всё о Паскале» _ Делфи _ Калькулятор

Автор: Наська 23.03.2007 1:55

Помогите! Ума не приложу как сделать икс в степени игрик?

Автор: мисс_граффити 23.03.2007 2:12

FAQ читать не пробовала?
http://forum.pascal.net.ru/index.php?showtopic=4535&st=0&p=38227&#entry38227

Автор: St@senk@ 23.03.2007 3:29

А почему Power не подходит blink.gif ?

Автор: мисс_граффити 23.03.2007 4:18

Тогда надо подключить модуль math
З.Ы. Заходила из "обзора непрочитанных" и не обратила внимание, что тема в Delphi, а не в задачах...


Автор: Kirill_ 23.03.2007 4:26

Цитата(Наська @ 22.03.2007 21:55) *

Помогите! Ума не приложу как сделать икс в степени игрик?


А так не пойдет. Код написан на Паскале.
Код
var
   x1,x2,y,i:integer;
begin
write('x');
readln(x1);
write('y');
readln(y);
x2:=x1;
     for i:=0 to y do
         begin
              if y=0 then begin
                          x1:=1;
                          break;
                          end;
              x1:=x1*x2;
         end;
     x1:=x1 div (x2*x2);
writeln(x1);
readln;
end.


Автор: St@senk@ 23.03.2007 4:42

А если Y дробный?

Автор: Lapp 23.03.2007 5:03

Kirill, твой код работает только для неотрицательных целых степеней (как уже заметил St@senk@), но если уж на то пошло, позволь дать совет.
Читай значение х с клавы в х2, а в х1 положи 1.
Цикл делай от 1 до y.
Тогда можно выбросить проверку на y=0 и деление после цикла.
Ок?

Автор: Kirill_ 23.03.2007 5:06

Понял как делать.
Сутра код выложу. Спать охота.

Автор: Наська 23.03.2007 12:18

А как плюс/минус сделать??? blink.gif

Автор: St@senk@ 23.03.2007 13:34

Код

var a,b,res : integer;
...
res:=a+b; //сумма
res:=a-b; //разность
res:=-a; // изменение знака на противоположный

Автор: Гость 23.03.2007 14:54

А факториал можешь? Срочно11111

Автор: мисс_граффити 23.03.2007 15:02

Поиском пользуйся. 100 раз решалось!

Автор: St@senk@ 23.03.2007 15:25

 
Function Factorial(n:Integer):Integer;Assembler;
Asm
MOV CX,[n]
MOV AX,1
@@1:
MUL CX
LOOP @@1
End;


Вот это пожалуй самое быстрое из красивых реализаций факториала, которе я видел. smile.gif


Добавлено через 3 мин.
smile.gif кажется, я потихоньку научаюсь искать smile.gif
http://forum.pascal.net.ru/index.php?s=&showtopic=8318&view=findpost&p=56371
Если делаешь калькулятор, то неплохо было бы добавить сюда проверку того, что а>=0, и напомню, что 0!=1 smile.gif

Автор: Наська 23.03.2007 15:38

Вот факториал

procedure TForm1.Button30Click(Sender: TObject);
var
ves,i,j: byte;
begin
ves := 1;
j := StrToInt(Edit1.Text);
for i := 1 to j do
begin
ves := ves*i
end;
Edit1.Text := IntToStr(ves);
end;

end.

Автор: St@senk@ 23.03.2007 16:52

smile.gif Вот видишь, у тебя получилось good.gif , поздравляю, но проверку я бы добавил.

Автор: Наська 26.03.2007 11:37

А такой ряд, как посчитать 1!*2!"*3!*4!*...n! ???

Автор: Lapp 26.03.2007 12:48

Цитата(Наська @ 26.03.2007 7:37) *

как посчитать 1!*2!"*3!*4!*...n! ???

Назовем такую функцию "супер-факториал" smile.gif
Если у тебя уже есть функция для вычисление обычного факториала, то наш супер-факториал вычислить можно так:
function Factorial(x:integer):LongInt;
begin
if x=0 then Factorial:=1 else Factorial:=x*Factorial(x-1)
end;

function SuperFactorial(x:integer):LongInt;
begin
if x=0 then SuperFactorial:=1
else SuperFactorial:=Factorial(x)*SuperFactorial(x-1)
end;
Оффтоп: держу пари, твой преп задал тебе этот "супер" после того, как ты принесла ему обычный факториал без рекурсии.. smile.gif

Автор: Наська 26.03.2007 19:55

Да нет, она всем задала
Спасибо, это просто супер...суперфакториал cool.gif .

Автор: Наська 26.03.2007 20:51

а можно еще один вопросик? а как его вывести
FloatToStr не хочет. как правильно-то,

Автор: St@senk@ 27.03.2007 0:14

inttostr попробуй

Автор: Наська 27.03.2007 12:11

Чего-то не понимаю...где косяк? blink.gif


procedure TForm1.Button32Click(Sender: TObject); {кнопка результат} 
begin
Label8.Caption := IntToStr(SuperFactorial);
end;

Function Factorial(y: integer): Longint;
var
Edit1: TEdit;
begin
y := StrToInt(Edit1.Text);
if y = 0 then factorial := 1
else factorial := y*Factorial((y-1));
end;

Function SuperFactorial(y: integer): LongInt;
var
Edit4: TEdit;
begin
y := StrToInt(Edit4.Text);
if y = 0 then SuperFactorial := 1
else SuperFactorial := Factorial(y)*SuperFactorial((y-1));
end;


М
Теги, Наська, теги!! Lapp


Автор: Malice 27.03.2007 12:46

Цитата(Наська @ 27.03.2007 9:11) *

Label8.Caption := IntToStr(SuperFactorial);

А где параметр у функции SuperFactorial ? Да и сами функции надо выше процедуры 1Button32Click написать.

Автор: Наська 27.03.2007 20:24

В смысле параметр функции, что ты имеешь ввиду?
Чего дописать-то ё-птыч? unsure.gif

Автор: Malice 27.03.2007 20:52

Цитата(Наська @ 27.03.2007 17:24) *

В смысле параметр функции, что ты имеешь ввиду?
Чего дописать-то ё-птыч? unsure.gif

Цитата
Function SuperFactorial(y: integer): LongInt; <- в функции есть

Label8.Caption := IntToStr(SuperFactorial(?)); <- а в вызове нет

Автор: Наська 27.03.2007 21:39

Ой ! blink.gif
Точно-точно

спасибо

Автор: Наська 28.03.2007 23:39

а знаешь, не робит dry.gif