• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Проблема с программой на Pascal

  • Автор темы Автор темы FPS
  • Дата начала Дата начала

FPS

Новые
Регистрация
11 Ноя 2010
Сообщения
17
Реакции
0
Баллы
0
Проблема с программой на Pascal

Всем доброго времени суток.
Вот задание: Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от Xнач до Xкон с шагом dx с точностью E. Таблицу снабдить заголовком и шапкой. Каждая строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда.

Вот что имеем
program v6;
var
X :double;
dividend :double;
factor :double;
Xmin :double;
Xmax :double;
dx :double;
N :cardinal;
R :double;
tmp :double;
E :double;
begin
Xmin:=1;
Xmax:=10;
dx:=0.5;
E:=0.00001;
writeln;
writeln('Xmin = ':8, Xmin:10:6);
writeln('Xmax = ':8, Xmax:10:6);
writeln('dx = ':8, dx:10:6);
writeln('E = ':8, E:10:6);
writeln;
writeln('+--------------------------+--------------------------+--------------------------+');
writeln('l Znachenie argumenta X l Summa ryda R l Chislo Chlenov Summi l');
writeln('+--------------------------+--------------------------+--------------------------+');
X:= Xmin;
while (x<= Xmax) do begin
N:= 0;
factor:= 1;
dividend:= 1;
R:= 0;
repeat
tmp:= dividend/factor;
if tmp < E then break;
R:= R+tmp;
N:= N+1;
factor:= factor*N;
dividend:= dividend*X;
until false;
writeln('l ', X:24,' l ', R:24,' l ', N:24, ' l ');
X:= X+dx;
end;
writeln('+--------------------------+--------------------------+--------------------------+');
end.

В паскале пишет, что Cardinal - Unknown Identifier. А если Cardinal заменить например на Integer, то компилируется, но не запускается, подскажите плз как правильно сделать...
 
ни разу не встречал типа cardinal. И попробуйте после Ctrl+F9 нажать Alt+F5, что бы просмотреть результат. Вероятно, программа запускается, выполняет свою работу и закрывается
 
ни разу не встречал типа cardinal.
Есть такой. Это целый тип, который относится к LongInt так же, как Word к Integer, т.е. сохраняя размер, "сдвигается" в сторону исключительно неотрицательных значений. Короче говоря, интервал Cardinal есть
0..4294967295.
Понимается не всеми трансляторами. Мой любимый DOS Free Pascal, например, глотает его и не давится, но в других действительно могут быть проблемы.
Только вот напрочь непонятно, на кой он в этой программе сдался: тут вполне и типа Word хватит.
В паскале пишет, что Cardinal - Unknown Identifier. А если Cardinal заменить например на Integer, то компилируется, но не запускается, подскажите плз как правильно сделать...
Код:
program v6;
var
 X :double;
 dividend :double;
 factor :double;
 Xmin :double;
 Xmax :double;
 dx :double;
 N :word;
 R :double;
 tmp :double;
 E :double;
begin
 Xmin:=1;
 Xmax:=10;
 dx:=0.5;
 E:=0.00001;
 writeln;
 writeln('Xmin = ':8, Xmin:10:6);
 writeln('Xmax = ':8, Xmax:10:6);
 writeln('dx = ':8, dx:10:6);
 writeln('E = ':8, E:10:6);
 writeln;
 writeln('+-----------------------+--------------+----------------------+');
 writeln('l Znachenie argumenta X l Summa ryda R l Chislo Chlenov Summi l');
 writeln('+-----------------------+--------------+----------------------+');
 X:= Xmin;
 while (x<= Xmax) do
  begin
   N:= 0;
   factor:= 1;
   dividend:= 1;
   R:= 0;
   repeat
    tmp:= dividend/factor;
    if tmp < E then break;
    R:= R+tmp;
    N:= N+1;
    factor:= factor*N;
    dividend:= dividend*X;
   until false;
   writeln('l ', X:12:1,'          l ', R:12:2,' l ', N:10, '           l ');
   X:= X+dx;
  end;
 writeln('+-----------------------+--------------+----------------------+');
 ReadLn;
end.
Я не проверял самО решение задачи, а лишь подчистил форматы вывода и добавил останов в конце. Попробуйте.
 
Vladimir_S, большое спасибо, теперь всё работает:tehnari_ru_288:
 
Назад
Сверху