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

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

Образовательный студенческий форум _ Информатика / Программирование _ Циклическая программа на Паскаль

Автор: tonibis 26.9.2009, 8:46

помогите пожалуйста нужен алгоритм и программа!
http://lampert.ya.ru/replies.xml?item_no=3


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: граф Монте-Кристо 26.9.2009, 8:54

В чём проблема-то?Где собственные наработки?

Автор: tonibis 26.9.2009, 11:01

program my;
uses crt;
var t,x:real; k,m:integer;
begin readln(x);
k:=1; t:=0;
repeat
t:=t+((sin(x)/cos(x)+k)/2*k*x);
k:=k+1
until abs((sin(x)/cos(x)+k)/2*k*x)>=m;
writeln('t=',t:10:5);
readln;
end. smile.gif unsure.gif


Автор: tig81 26.9.2009, 11:08

Цитата(tonibis @ 26.9.2009, 14:01) *

t:=t+((sin(x)/cos(x)+k)/2*k*x);

Могу ошибаться, но это вы случайно не сумму пытаетесь сделать? У вас вроде произведение?!
Попробуйте вручную для k=1, k=2...

Автор: tonibis 26.9.2009, 12:15

program my;
uses crt;
var t,x:real; k,m:integer;
begin readln(x);
k:=1; t:=0;
repeat
t:=t*((sin(x)/cos(x)+k)/2*k*x);
k:=1,k:=2...k:=m
until abs((sin(x)/cos(x)+k)/2*k*x)>=m;
writeln('t=',t:10:5);
readln;
end. smile.gif
помогите пожалуйста я же девушка

Автор: граф Монте-Кристо 26.9.2009, 12:17

Цитата(tonibis @ 26.9.2009, 16:15) *

program my;
uses crt;
var t,x:real; k,m:integer;
begin readln(x);
k:=1; t:=01;
repeat
t:=t*((sin(x)/cos(x)+k)/2*k*x);
k:=1,k:=2...k:=m
until abs((sin(x)/cos(x)+k)/2*k*x)>=m;
writeln('t=',t:10:5);
readln;
end. smile.gif
помогите пожалуйста я же девушка

Зачем это?У Вас же теперь всё время ноль будет в итоге smile.gif
Скорее,нужно задать t=1.

Автор: tig81 26.9.2009, 12:19

Цитата(tonibis @ 26.9.2009, 15:15) *

t:=t*((sin(x)/cos(x)+k)/2*k*x);

на первом шаге получим вроде 0.
Цитата
помогите пожалуйста я же девушка

Первый, кто скажет, что я мальчик, пусть бросит в меня камень. rolleyes.gif

Цитата(граф Монте-Кристо @ 26.9.2009, 15:17) *

Скорее,нужно задать t=1.

Тоже так думаю. Ура, значит я права. clap.gif

Автор: tonibis 26.9.2009, 12:26

щас попробую cool.gif

Автор: tonibis 26.9.2009, 12:40

проверьте пожалуйста
program my;
uses crt;
var t,x:real; k,m:integer;
begin readln(x);
k:=1; t:=1;
repeat
t:=t*((sin(x)/cos(x)+k)/2*k*x);
k:=1; k:=2; k:=m
until abs((sin(x)/cos(x)+k)/2*k*x)>=m;
writeln('t=',t:10:5);
readln;
end

Автор: tig81 26.9.2009, 12:42

Цитата(tonibis @ 26.9.2009, 15:40) *

k:=1; k:=2; k:=m

это что?

Автор: tonibis 26.9.2009, 13:08

как же записать k:=k+1
пока k не будет равно m
или как быть с ручным вводом k:=1,k:=2...
что верно то... unsure.gif
информатика только в школе была

Автор: граф Монте-Кристо 26.9.2009, 13:32

Ну так и запишите, k:=k+1.
А что это за число m,где оно у Вас вообще определено?

Автор: tonibis 26.9.2009, 14:29

program my;
uses crt;
var t,x:real; k,m:integer;
begin readln(x);
k:=1; t:=1;
repeat
t:=t*((sin(x)/cos(x)+k)/2*k*x);
k:=k+1
until abs((sin(x)/cos(x)+k)/2*k*x)>=m;
writeln('t=',t:10:5);
readln;
end
так вроде?

Автор: граф Монте-Кристо 26.9.2009, 14:52

Если я правильно понял условие, нужно найти произведение первых m множителей, так? Тогда, во-первых, число m нужно либо вводить с клавиатуры,либо оно должно быть задано в самОм коде программы. Во-вторых, у Вас неправильно записано условие, Вам же нужно,чтобы у Вас номер k-того множителя не превышал m, а в коде Вы сравниваете почему-то (k+1)-й множитель с m.

Автор: tig81 26.9.2009, 14:53

Цитата(tonibis @ 26.9.2009, 17:29) *

t:=t*((sin(x)/cos(x)+k)/(2*k*x));
так вроде?

ну я бы еще в знаменателе скобочки поставила. А тае\к не знаю правильно, но я бы сделала так.

П.С.
Цитата
until abs((sin(x)/cos(x)+k)/2*k*x)>=m;

Что такое m?

Автор: tonibis 26.9.2009, 15:04

цикл должен повторяться m раз вроде
и поэтому такое условие until модуль>=m
?

Автор: tig81 26.9.2009, 15:05

Цитата(tonibis @ 26.9.2009, 18:04) *

цикл должен повторяться m раз вроде
и поэтому такое условие until модуль>=m?

Могу ошибатся, но из условия я вижу, что k должно изменяться от одного до m, а при чем здесь модуль выражения не понятно.

Автор: tonibis 26.9.2009, 15:13

условием выхода из цикла является достижение заданной точности вычисления модуля постановленной задачи.
и как же условие тогда поставить?

Автор: tonibis 26.9.2009, 15:37

может быть until abs(...) unsure.gif
дальше пока не знаю

Автор: граф Монте-Кристо 26.9.2009, 17:11

По-моему,проще сделать while'ом, примерно так:
k:=1;
t:=1;
while (k<=m) do
begin
t:=t*{...}
k:=k+1;
end;

Автор: tig81 26.9.2009, 17:25

smile.gif тоже так думала rolleyes.gif

Автор: tonibis 27.9.2009, 8:01

с while'ом
k:=1;
t:=1;
while (k<=m) do
begin
t:=t*{...}
k:=k+1;
end;
в ответе постоянно получается 1.
что это значит?

Автор: tig81 27.9.2009, 8:36

Цитата(tonibis @ 27.9.2009, 11:01) *

в ответе постоянно получается 1.
что это значит?

как так?
Вместо {...} вы заданное выражение подставляли? m задавали?

Автор: tonibis 27.9.2009, 8:41

да верно. m не задавала.
как же задавать, тоже 1? rolleyes.gif

Автор: tig81 27.9.2009, 8:45

Цитата(tonibis @ 27.9.2009, 11:41) *

как же задавать, тоже 1? rolleyes.gif

тогда в вашем произведение будет всего один сомножитель. Тоже вариант.
А так задайте 1, 2, 3, ....посмотрите, что будет. Сделайте так, чтобы оно (m) вводилось интерактивно, любой пользователь сел и задал его самостоятельно.

Автор: tonibis 27.9.2009, 8:57

program;
uses crt;
var t,x:real; k,m:integer;
begin
writeln('x,m'); readln(x,m);
k:=1;
t:=1;
while (k<=m) do
begin
t:=t*{...}
k:=k+1;
end;
writeln('t=',t:10:4);
readln;
end. rolleyes.gif
так вроде

Автор: tig81 27.9.2009, 10:52

Цитата(tonibis @ 27.9.2009, 11:57) *

так вроде

Я Паскаль не знаю, так что процедуры мне частично знакомы, частично нет. Так вроде по логике вещей похоже на правду. Программка запускается, нужное выдает? Придут специалисты ,подскажут точнее.

Вот вопрос: проверку для k
Цитата
while (k<=m) do

надо делать до цикла или в самом цикле? rolleyes.gif

Автор: kaa 27.9.2009, 12:15

для начала это не циклическая программа..почитайте про циклы сначало
http://school87.kubannet.ru/pascal/5.html

t:=1;
while (k<=m) do


вообще не понятно к чему обе строчки, притом нигде не фиксируется чему равна переменная М, а Т не может равняться 1


Автор: tig81 27.9.2009, 13:16

Цитата(kaa @ 27.9.2009, 15:15) *

притом нигде не фиксируется чему равна переменная М

вроде вводится с клавиатуры?
Цитата
, а Т не может равняться 1

почему?

Автор: tonibis 27.9.2009, 15:12

Цитата(tig81 @ 27.9.2009, 17:16) *

вроде вводится с клавиатуры?

делаю так
program;
var t,x:real; k,m:integer;
begin writeln('x,m'); readln(x,m);
k:=1; t:=1;
for k:=1 to m do begin
t:=t*{...}
k:=k+1;
end;
writeln('t=',t:10:4);
readln;
end. rolleyes.gif
насчет T думаю надобно задавать значение, для начала цикла

как быть с Т подскажите пожалуйста?

Автор: tonibis 27.9.2009, 15:39

program;
var t,x:real; k,m:integer;
begin writeln('x,m'); readln(x,m);
k:=1; t:=1;
repeat t:=t*{...}
k:=k+1
until k>m;
writeln('t=',t:10:4);
readln;
end. rolleyes.gif
так може

Автор: kaa 27.9.2009, 16:43

может так лучше?

program 123;
uses crt;
var j:real;
begin
clrscr;
k:=1;
while j<=10 do
begin
writeln('T=',-2.4*sqr(j)+5*j-3:5:1);
k:=k+0.5;
end;
readkey;
end.

Автор: tonibis 27.9.2009, 18:21

не получается что-то по вашему dry.gif

Автор: kaa 28.9.2009, 12:51

а так???
program 123;
uses crt;
var k, x:real;
begin
clrscr;
k:=1;
x:=30;
while k<=10 do
begin
writeln('T=',-2.4*sqr(k)+5*k-3:5:1);
k:=k+0.5;
end;
readkey;
end.

если что-то не получается делайте скриншот ошибки и выставляйте сюда)так легче решить проблему)

Автор: tonibis 28.9.2009, 17:30

http://lampert.ya.ru/replies.xml?item_no=3 smile.gif
а можно приближенно к моему примеру
1
program;
var t,x:real; k,m:integer;
begin writeln('x,m'); readln(x,m);
k:=1; t:=1;
for k:=1 to m do begin
t:=t*((sin(x)/cos(x)+k)/(2*k*x));
k:=k+1;
end;
writeln('t=',t:10:4);
readln;
end.
2
program 123;
uses crt;
var k, x:real; begin clrscr;
k:=1; x:=30;
while k<=10 do begin
writeln('T=',-2.4*sqr(k)+5*k-3:5:1);
k:=k+0.5;
end;
readkey;
end.
почему не вводите значение 'M'?
зачем задавать фиксированное значение k, когда оно должно вводиться с клавиатуры?
и что это еще за условие "while k<=10 do begin"?
еще вроде нужно задавать в начале цикла значение Т, ведь это нужно для отсчета цикла,
поэтому произвольно задаю 1.
подробней отвечайте пожалуйста. smile.gif

зачем задавать фиксированное значение 'X', когда оно должно вводиться с клавиатуры?

Автор: kaa 28.9.2009, 19:02

1

Код
program cycle1;
var
  t,x:real;
  k,m:integer;
begin
  writeln('x, m');
  readln(x, m);
  {k:=1; эта строчка не нужна, переменная паскалевского for'а инициализируется в самой конструкции цикла}
  t:=1;
  
  for k:=1 to m do
  begin
    t:=t*((sin(x)/cos(x)+k)/(2*k*x));
    {k:=k+1; а эта строчка не должна компилироваться, записывать в переменную цикла нельзя, инкремент компилятор
    подразумевает в конструкции цикла}
  end;

  writeln('t=',t:10:4);
  readln;
end.



2
Код

program prg123; {не помню, подчиняется ли имя программы правилам именования идентификаторов, но лучше не начинать имена с цифр}
uses crt;
var
  k, x: real;
begin
  clrscr;
  k:=1;
{  x:=30; эта переменная нигде не используется}
  while k<=10 do
  begin
{тут на первый взгляд ошибки не видно. Если все-таки не работает,
единственное в чем у меня сомнение - это в форматировании строки вывода, попробуйте переписать так:
  x := -2.4*sqr(k)+5*k-3;
  writeln('T=', x:5:1);}
    writeln('T=',-2.4*sqr(k)+5*k-3:5:1);
    k:=k+0.5;
  end;
  readln;
end.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)