Помощь - Поиск - Пользователи - Календарь
Полная версия: Циклическая программа на Паскаль > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
tonibis
помогите пожалуйста нужен алгоритм и программа!
http://lampert.ya.ru/replies.xml?item_no=3
граф Монте-Кристо
В чём проблема-то?Где собственные наработки?
tonibis
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
Цитата(tonibis @ 26.9.2009, 14:01) *

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

Могу ошибаться, но это вы случайно не сумму пытаетесь сделать? У вас вроде произведение?!
Попробуйте вручную для k=1, k=2...
tonibis
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
помогите пожалуйста я же девушка
граф Монте-Кристо
Цитата(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
Цитата(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
щас попробую cool.gif
tonibis
проверьте пожалуйста
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
Цитата(tonibis @ 26.9.2009, 15:40) *

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

это что?
tonibis
как же записать k:=k+1
пока k не будет равно m
или как быть с ручным вводом k:=1,k:=2...
что верно то... unsure.gif
информатика только в школе была
граф Монте-Кристо
Ну так и запишите, k:=k+1.
А что это за число m,где оно у Вас вообще определено?
tonibis
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
так вроде?
граф Монте-Кристо
Если я правильно понял условие, нужно найти произведение первых m множителей, так? Тогда, во-первых, число m нужно либо вводить с клавиатуры,либо оно должно быть задано в самОм коде программы. Во-вторых, у Вас неправильно записано условие, Вам же нужно,чтобы у Вас номер k-того множителя не превышал m, а в коде Вы сравниваете почему-то (k+1)-й множитель с m.
tig81
Цитата(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
цикл должен повторяться m раз вроде
и поэтому такое условие until модуль>=m
?
tig81
Цитата(tonibis @ 26.9.2009, 18:04) *

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

Могу ошибатся, но из условия я вижу, что k должно изменяться от одного до m, а при чем здесь модуль выражения не понятно.
tonibis
условием выхода из цикла является достижение заданной точности вычисления модуля постановленной задачи.
и как же условие тогда поставить?
tonibis
может быть until abs(...) unsure.gif
дальше пока не знаю
граф Монте-Кристо
По-моему,проще сделать while'ом, примерно так:
k:=1;
t:=1;
while (k<=m) do
begin
t:=t*{...}
k:=k+1;
end;
tig81
smile.gif тоже так думала rolleyes.gif
tonibis
с while'ом
k:=1;
t:=1;
while (k<=m) do
begin
t:=t*{...}
k:=k+1;
end;
в ответе постоянно получается 1.
что это значит?
tig81
Цитата(tonibis @ 27.9.2009, 11:01) *

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

как так?
Вместо {...} вы заданное выражение подставляли? m задавали?
tonibis
да верно. m не задавала.
как же задавать, тоже 1? rolleyes.gif
tig81
Цитата(tonibis @ 27.9.2009, 11:41) *

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

тогда в вашем произведение будет всего один сомножитель. Тоже вариант.
А так задайте 1, 2, 3, ....посмотрите, что будет. Сделайте так, чтобы оно (m) вводилось интерактивно, любой пользователь сел и задал его самостоятельно.
tonibis
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
Цитата(tonibis @ 27.9.2009, 11:57) *

так вроде

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

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

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

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


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

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

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

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

почему?
tonibis
Цитата(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
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
может так лучше?

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
не получается что-то по вашему dry.gif
kaa
а так???
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
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
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 © 2001-2024 Invision Power Services, Inc.