В связи с участившимися случаями спама, у вновь зарегистрированных пользователей отключена возможность создания сообщений на форуме. Возможность писать сообщения будет включаться администратором вручную — через некоторое время после регистрации пользователя. Для включения этой функции быстрее, пишите личное сообщение администратору сайта (в сообщении напишите кратко о себе и с какой целью регистрировались на сайте).
Обратите внимание: пользователям, нарушающим п.2.1 возможность писать сообщения включаться не будет!
Просим отнестись с пониманием: это вынужденная мера.
Добрый день всем. Первый раз обращаюсь за помощью) Значит очень нужна помощь. Была бы легкая задача, не обратилась.
Задание: Протабулировать функцию
y={e^x, 0<=x<=1;
{sqrt(x*b), 1<=x<=2
с шагом dx=0,2, где b-сумма всех элементов массива {A1,...,A10} вещественного типа. Сумму вычислите с помощью функции.
Благодарю, если кто-то ответит)
1. Табулирование функции - это вычисление значений функции при изменении аргумента от некоторого начального значения до некоторого конечного значения с определенным шагом.
2. на Pascal
3. Про массив не сказано ничего в задании. Как легче, чем лучше
var
A: array [1..10] of extended;
x,y: real;
b: extended;
i: integer;
begin
writeln ('Введите 10 чисел массива А');
for i:=1 to 10 do
begin
writeln ('Введите', i,'-й элемент');
readln (A[i]);
end;
b:= sum(A);
for i:=0 to 5 do
begin
x:=dx*i;
y:=exp(x);
writeln(y);
end;
for i:=6 to 10 do
begin
x:=dx*i;
y:=sqrt(x*b);
writeln(y);
end;
end.
Ну там красоту уже сами как-нить наведете.
Проверяйте.
да, это просто Паскаль.
Что-то не так?
Меня только смущают условия
goon4a писал(а):
0<=x<=1;
1<=x<=2
с шагом dx=0,2
получается, что при х=1 функция должна вычисляться 2 раза - по каждому из условий.
Итого - при 11 шагах х нужно получить 12 результатов y.
я, к сожалению, не могу на своей винде запустить Паскаль, поэтому предложу тут варианты, ок?
Код:
begin
clrscr;
b:=0;
writeln ('Введите 10 чисел массива А');
for i:=1 to 10 do
begin
writeln ('Введите', i,'-й элемент');
readln (A[i]);
b:=b+A[i];
end;
x:=0;
while 0<= x <= 2 do
begin
if (0<=x<=1) then
begin
y:=exp(x);
writeln('x=',x,' ','y=',y);
end;
if (1<=x<=2) then
begin
y:=sqrt(x*b);
writeln('x=',x,' ','y=',y);
end;
x:=x+dx;
end;
end.
_________________ когда-то было "Veni, Vidi, Modero"
Последний раз редактировалось: Krom (Ср Фев 17, 2010 20:37), всего редактировалось 1 раз
Это написано в просто Pascal, компилятор FreePascal 2.4.0. Тут такие моменты, модуль math во FreePascal есть, за остальные не скажу. В задании не сказано но вероятно подразумевалось функцию суммы писать в программе, а не использовать готовую, можно согласиться, можно отбрехаться пусть в следующий раз яснее задание пишут.
И да по поводу условий, в приведенном тексте условия малость переврал:
0<=x<=1;
1<x<=2.
Если что-то не устраивает пишите.
Допиши свои объявы переменных, подставил под свои ругается на тип переменной х, хотя мне что-то кажется пробема в двойном условии, они поддерживаются?
Код:
program Project1;
uses crt, math;
const dx=0.2;
var
A: array [1..10] of extended;
x,y: real;
b: extended;
i: integer;
begin
clrscr;
b:=0;
writeln ('Введите 10 чисел массива А');
for i:=1 to 10 do
begin
writeln ('Введите', i,'-й элемент');
readln (A[i]);
b:=b+A[i];
end;
x:=0;
while 0<= x <= 2 do
begin
if (0<=x<=1) then
begin
y:=exp(x);
writeln('x=',x,' ','y=',y);
end;
if (1<=x<=2) then
begin
y:=sqrt(x*b);
writeln('x=',x,' ','y=',y);
end;
x:=x+dx;
end;
end.
var
A: array [1..10] of extended;
x,y: real;
b: extended;
i: integer;
begin
clrscr;
b:=0;
writeln ('Введите 10 чисел массива А');
for i:=1 to 10 do
begin
writeln ('Введите', i,'-й элемент');
readln (A[i]);
b:=b+A[i];
end;
x:=0;
while (0<= x) and (x<= 2) do
begin
if (0<=x) and (x<=1) then
begin
y:=exp(x);
writeln('x=',x,' ','y=',y);
end;
if (1<=x) and (x<=2) then
begin
y:=sqrt(x*b);
writeln('x=',x,' ','y=',y);
end;
x:=x+dx;
end;
end.
Так вроде работает, арифметику мне лень проверять. Тут конечно вариантов можно уйму накрутить.
Да и в этом случае в строке:
Код:
if (1<=x) and (x<=2) then
Проверка на х=1 проходить не будет, этот вариант будет перехвачен предыдущим условием, так что тут что х<1, что х<=1 будет обрабатываться одинаково и получится 11 результатов.
Так вроде работает, арифметику мне лень проверять. Тут конечно вариантов можно уйму накрутить.
внешне - и я согласен - должно работать как надо.
Делать проверку на ввод числа - сюда слишком жирно будет. Не тот уровень задачки. _________________ когда-то было "Veni, Vidi, Modero"
А какая проверка? х ведь не вводится, эта переменная просто перебирается, и все ее значения известны заранее. В общем в вашем варианте, все таки произвести рассчет при х=1 два раза(по обоим формулам) сложнее чем в моем.
У меня достаточно в последнем цикле написать:
В общем в вашем варианте, все таки произвести рассчет при х=1 два раза(по обоим формулам) сложнее чем в моем.
У меня достаточно в последнем цикле написать:
Код:
for i:=5 to 10 do
не вижу проблем в вычислении по таким условиям. Честно. Не понимаю трудностей такого цикла.
Ты ведь видишь, что dx - условие для задачи, и он теоретически может быть переменным. И посчитать - сколько раз укладывается х в диапазон от 0 до 1 при таком dx, чтобы поставить условие цикла - это не совсем правильно)
Говоря о проверке, я имел в виду следующее -
readln (A[i]);
где гарантия, что пользователь не введет сюда буквы? или символы...
программа тут же вылетит. Правильно ж? _________________ когда-то было "Veni, Vidi, Modero"
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах