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

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

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

Автор: asu2006 26.11.2007 22:29

вычислить S=(x-2)(x-4)…(x-8)/(x-1)(x-3)…(x-7)

Код
var
s:real;
k,i:byte;
x,is,ks: integer;
begin
write('X=');
readln(x);
i:=2;K:=1; is:=1; ks:=1;
while (i<8) and (k<7) do
ks:=ks*(x-k);
is:=is*(x-i);
i:=i+2;
k:=k+2;
s:=is/ks
write('s=', s:5:1);
readln;
end.

Но он почему то считает не правильно.
Почему?

Автор: volvo 26.11.2007 22:36

Ты задавал вопрос насчет циклов, тебе там ответили - тебя и след простыл. Теперь здесь ты делаешь ТУ ЖЕ ошибку, и опять просишь помощи... Надоело отвечать просто так, понимаешь? Сколько можно? Ты ж даже не читаешь, что тебе пишут!

Автор: asu2006 26.11.2007 22:39

Цитата(volvo @ 26.11.2007 18:36) *

Ты задавал вопрос насчет циклов, тебе там ответили - тебя и след простыл. Теперь здесь ты делаешь ТУ ЖЕ ошибку, и опять просишь помощи... Надоело отвечать просто так, понимаешь? Сколько можно? Ты ж даже не читаешь, что тебе пишут!

Ты имеешь веду begin и end. ТО это не то......

Автор: asu2006 27.11.2007 0:01

ПОмогите give_rose.gif

Автор: Malice 27.11.2007 0:37

Цитата(asu2006 @ 26.11.2007 18:39) *

Ты имеешь веду begin и end. ТО это не то......

Именно то. Подумай где дожен быть цикл и добавь туда begin и end.

Автор: asu2006 27.11.2007 10:56

var
s:real;
k,i:byte;
x,is,ks: integer;
begin
write('X=');
readln(x);
i:=2;K:=1; is:=1; ks:=1;
while (i<8) and (k<7) do
begin
ks:=ks*(x-k);
is:=is*(x-i);
i:=i+2;
k:=k+2;
end;
s:=is/ks
write('s=', s:5:1);
readln;
end.

вот так наверное

Автор: Lapp 27.11.2007 17:50

Цитата(asu2006 @ 27.11.2007 6:56) *

вот так наверное

Так лучше, но еще пока не совсем хорошо.
1. Если в условии цикла ты используешь строгие неравенства, то при i=8 и k=7 он не выполнится. Советую заменить на нестрогие.
2. Второе условие в цикле лишнее. Достаточно одного первого.

Автор: asu2006 28.11.2007 0:08

Код
var
  s:real;
  k,i:byte;
  x,iss,ks: integer;
begin
  write('X=');
  readln(x);
  i:=2;K:=1; iss:=1; ks:=1;
  while (i<=32) do
  begin
    ks:=ks*(x-k);
    iss:=iss*(x-i);
    i:=i+2;
    k:=k+2;
   end;
  if (iss>0) and (ks>0) then
   begin
  s:=iss/ks;
  write('s=', s:5:3);
    end
  else
  write('Деление на ­  0');
  readln;
end.

А почему сдесь везде выдает сообщение "деление на 0"

Автор: Совсем новичок 28.11.2007 0:14

Так ты отлакдку сделай и поймешь :-)

Автор: asu2006 28.11.2007 0:18

Цитата(Совсем новичок @ 27.11.2007 20:14) *

Так ты отлакдку сделай и поймешь :-)

Смысле?

Автор: Ozzя 28.11.2007 16:03

Цитата(asu2006 @ 27.11.2007 21:18) *

Смысле?

Волшебные кнопки f4,f7,f8.

Автор: Lapp 28.11.2007 16:15

А также Ctrl-f4, Ctrl-f7... smile.gif)))
- но это уже после тех.. smile.gif