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

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

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

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

Помогите с одной задачкой на Паскале

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

zhenia60

Ученик
Регистрация
8 Янв 2011
Сообщения
4
Реакции
0
Баллы
0
Помогите с одной задачкой на Паскале

Вычислить сумму 1/3-5/7+7/9-9/11+... Число слагаемых задаётся с клавиатуры.:tehnari_ru_837:
 
или вы пропустили один член ряда или я чего-то не пойму... по идее должно быть
1/3-3/5+5/7-7/9+9/11+...+(-1)^2n*(2n-1)/(2n+1)
 
так и есть... я пропустил члены ряда! грешен!
 
Формулу в общем виде вам почти дали, используя её и цикл "пока" - пишите программу, там ничего особо сложного нет.
 
Последнее редактирование:
Формулу в общем виде вам дали, используя её и цикл "пока" - пишите программу, там ничего особо сложного нет.
Ну, положим, формулу дали не то, чтобы правильную, ибо (-1)^2n никакой знакопеременности не обеспечит, поскольку (-1), будучи в четную степень возведенной, завсегда единицею будет. Я бы предложил вариант [(-1)^(n-1)]*(2n-1)/(2n+1).
 
это мелочи по сравнению с мировой революцией :)

Как я уже писал - предлагайте свой вариант, а тут вас поправят, за вас вашу работу никто делать не будет, халява тут не очень приветствуется.
 
Program Vika;
var N, i, S: real;
begin
write('Введите число слагаемых N=');
readln(N);
S:=0;
i:=1;
while i<=N do
begin
S:=S+exp(n-1*ln(-1))*(2*n-1)/(2*n+1);
end;
write('Сумма S=', S);
end.

простите, но я лошара в программировании. Уж исправьте, что неправильно! грешна! так или не так? Но программа не работает...
 
Скажите, как представить Ln(-1)? И, вообще, он существует ли?
 
Скажите, как представить Ln(-1)? И, вообще, он существует ли?
Нет, не существует. Функция логарифм (не зависимо от основания) определена в диапазоне 0<x<=∞, а потому такой способ изменения знака не годится. Кроме того, у Вас абсолютно неправильно построен цикл: вместо того, чтобы в каждое слагаемое подставлять свое значение переменной цикла i, Вы все их считаете с постоянной величиной n. И уж если Вы используете цикл while - do, то не забывайте в его теле принудительно увеличивать значение переменной цикла i, т.е. нужно написать что-то вроде i:=i+1.
Всех этих неприятностей и проблем можно избежать, если:
1. Ввести пользовательскую функцию Sign (знак), возвращающую +1 для нечетных слагаемых и -1 для четных.
2. Задать формат переменных N и i целочисленным, а не вещественным - тогда можно обойтись обычным циклом for i:=1 to N do.
Итого:
Код:
Program Vika;
 var
  N,i:Integer;
  S: real;

Function Sign(m:Integer):Integer;
 begin
  if (m mod 2)=0 then Sign:=-1 else Sign:=1;
 end;

begin
 write('Введите число слагаемых N= ');
 readln(N);
 S:=0;
 for i:=1 to N do
  S:=S+(2*i-1)/(2*i+1)*Sign(i);
 writeln('Сумма S= ', S);
 readln;
end.

Ну или другой вариант - без функции. Например, так:
Код:
Program Vika;
 var
  N,i:Integer;
  a,S: real;

begin
 write('Введите число слагаемых N= ');
 readln(N);
 S:=0;
 for i:=1 to N do
  begin
   a:=(2*i-1)/(2*i+1);
   if (i mod 2)=0 then a:=-a;
   S:=S+a;
  end;
 writeln('Сумма S= ', S);
 readln;
end.
 
Назад
Сверху