Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2011, 20:56   #1
Игорь Кулакевич
Пользователь
 
Регистрация: 26.09.2011
Сообщений: 17
По умолчанию Алгоритм деления отрезка на части

добрый день. нужна помощь вот в чем:
нужно разделить отрезок длинной L на X частей, так чтоб каждая последующая часть была короче предыдущей на i. DELPHI
прикладываю наглядное объяснение

на входе должно задаваться L(общая длинна), X кол-во частей, i - шаг уменьшения.
спасибо.
Игорь Кулакевич вне форума Ответить с цитированием
Старый 29.09.2011, 21:44   #2
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
Сообщение Решение.

У вас здесь получается арифметическая прогрессия с разностью i, состоящая из X членов и сумма которой равна L.
Есть формула для суммы арифметической прогрессии:


Из неё находим первый член прогрессии


Теперь, в цикле от 1 до X получаем все члены прогрессии, прибавляя i к предыдущему члену. Это и будут длины искомых отрезков.

Программа:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  L, X, i, a1, j: Integer;
begin
  Write('L = ');
  ReadLn(L);
  Write('X = ');
  ReadLn(X);
  Write('i = ');
  ReadLn(i);
  a1 := L div X - (i * (X - 1)) div 2;
  for j := 1 to X do begin
    Write(a1, ' ');
    a1 := a1 + i;
  end;
  ReadLn;
end.
Kingdom_Reborn вне форума Ответить с цитированием
Старый 29.09.2011, 22:03   #3
Игорь Кулакевич
Пользователь
 
Регистрация: 26.09.2011
Сообщений: 17
По умолчанию

нереальное вам спасибо.
кстати, сам прогрессию не увидел. стыдно.
еще раз спасибо
Игорь Кулакевич вне форума Ответить с цитированием
Старый 29.09.2011, 22:14   #4
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Ах вот уже ответили...

a(1) = L / x - (x - 1) * i / 2 + (x - 1) * i — первый отрезок.
a(x) = L / x - (x - 1) * i / 2 — последний (x-овый) отрезок.

Пока делал демо доступными средствами (в Word), уже и не надо☺

Последний раз редактировалось Sasha_Smirnov; 30.09.2011 в 14:31. Причина: сначала идёт бóльший!
Sasha_Smirnov вне форума Ответить с цитированием
Старый 30.09.2011, 12:31   #5
Игорь Кулакевич
Пользователь
 
Регистрация: 26.09.2011
Сообщений: 17
По умолчанию

а такой еще вопрос:
а если мое L тип Double, следовательно и A1: double.
как быть?
нужно на выходе иметь числа double(нужно для дальнейших действий)
и в массив их, но это я уже сам.

Код:
var
   X, i, j: Integer;
  l,a1: double;

begin
  Write('L = ');
  ReadLn(L);
  Write('X = ');
  ReadLn(X);
  Write('i = ');
  ReadLn(i);
  a1 := L div X - (i * (X - 1)) div 2;
  for j := 1 to X do begin
    Write(a1, ' ');
    a1 := a1 + i;
  end;
  ReadLn;
end.
сделал так - ругается:
[DCC Error] Project1.dpr(19): E2015 Operator not applicable to this operand type
я так пологая нельза применять div с числами Double;

Последний раз редактировалось Игорь Кулакевич; 30.09.2011 в 13:11.
Игорь Кулакевич вне форума Ответить с цитированием
Старый 30.09.2011, 15:19   #6
Игорь Кулакевич
Пользователь
 
Регистрация: 26.09.2011
Сообщений: 17
По умолчанию

все тему можно закрывать.
всем большое спасибо. выручили

Последний раз редактировалось Игорь Кулакевич; 30.09.2011 в 15:39. Причина: разобрался
Игорь Кулакевич вне форума Ответить с цитированием
Старый 30.09.2011, 19:18   #7
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
По умолчанию

div для целочисленных типов, для вещественных обычная дробная черта "/".
Kingdom_Reborn вне форума Ответить с цитированием
Старый 30.09.2011, 23:50   #8
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Привет от ветки Word

Ага, целыми тут не всегда обойдёшься.

Всё ж выложу своё демо; запуск по F7 или через Alt-F8. Переваривает тоже далеко не всё. Длину, шаг и масштаб задал константами (чтоб не делать обработку ввода).
Изображения
Тип файла: png arythm_regr.png (26.9 Кб, 71 просмотров)
Вложения
Тип файла: doc Segs.doc (33.5 Кб, 13 просмотров)
Sasha_Smirnov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод деления отрезка пополам Витяака Помощь студентам 2 23.12.2010 11:42
Найти корни заданного уравнения методом Золотого сечения, Фибоначи и деления отрезка пополам. Сравнить эф Nik0919 Помощь студентам 2 16.02.2010 19:14
Метод деления отрезка пополам Delphi lordve Помощь студентам 0 06.12.2009 23:57
Решение уравнения методом деления отрезка пополам. Методом секущей. Panda196 Паскаль, Turbo Pascal, PascalABC.NET 3 25.11.2008 09:06
Вычисление корня уравнения методом деления отрезка пополам Absent Помощь студентам 12 25.11.2007 17:54