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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2008, 22:42   #1
vikka
Пользователь
 
Регистрация: 18.12.2008
Сообщений: 19
По умолчанию найти сумму длин всех окрашенных частей прямой.

Люди! оч прошу вас мне помочь! мне на зачет по инфе нужно решить задачу! помогите пожалуйста это сделать! вот задача: на прямой окрасили N отрезков,известны координаты L [ i ] левого конца отрезка и координаты R [ i ] парвого конца i-ого отрезка для I = 1...n.
найти сумму длин всех окрашенных частей прямой.

нужно написать программу в паскале. ( для решения нужно рассмотреть 2 случая, если отрезки пересекаются и если отрезки не пересекаются)
vikka вне форума Ответить с цитированием
Старый 20.12.2008, 08:52   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1. берем новый отрезок L(i), P(i)
2. проверяем пресекался ли он с использоваными ранее
3. если да то выделяем из него ненепересекающуюся часть иначе используем весь. L1(i), P1(i)
4. считаем общую длину
5. если остались отрезки, то повторяем п.1.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.12.2008, 18:16   #3
vikka
Пользователь
 
Регистрация: 18.12.2008
Сообщений: 19
По умолчанию

так то я все это понимаю.....у меня не получается правильно написать саму программу!!
vikka вне форума Ответить с цитированием
Старый 20.12.2008, 18:55   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

пример неправильной программы чтобы было что исправлять
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.12.2008, 20:54   #5
vikka
Пользователь
 
Регистрация: 18.12.2008
Сообщений: 19
По умолчанию

program n1;
uses crt;
var L,R:array[1..1000] of real;
i,N:integer;
Sum:real;
begin
clrscr;
Sum:=0;
writeln('input N:');
readln(N);
writeln('vvedite koordinati otrezkov');
for i:=1 to N do
begin
read(L[i],R[i]);
Sum:=Sum+abs(R[i]-L[i]);
readln;
end;
writeln('summa ravna ',Sum:7:4);
readln;
end.
здесь вроде как получается,что рассмотрен случай когда отрезки не пересекаются. что нужно поменять( добавить и тп) чтобы рассмотреть с пересечением отрезков
vikka вне форума Ответить с цитированием
Старый 20.12.2008, 21:46   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

для облегчения рисуем на прямой возможные варианты взаимного положения двух отрезков 1 и 2

L[1]<L[2] and R[1]<L[2] 1 слева от 2 без пересечения новая часть L[2]R[2]
L[1]<L[2] and R[1]>L[2] and R[1]<R[2] 1 слева от 2 с пересечением новая часть R[1]R[2]
L[1]<L[2] and R[1]>L[2] and R[1]>R[2] 1 полностью включает 2 новая часть R[1]R[1] т.е. отсутствует
продолжая таким образом составляем условия и правила для других случаев.

L1[i]:=L[i]; R1[i]:=R[i];
for j:=1 to i-1 do //сравниваем текущий отрезок
begin // со всеми предыдущими (точнее с их непересекающейся частью
if (R[i]<L[j]) then //нет пересечения лежит слева
begin L1[i]:=L[i]; R1[i]:=R[i]; end //выделяем новую непересекающуюся часть(в данном случае она не изменялась)
else if (L[i]<L[j]) and (R[i]>L[j]) and (R[i]<R[j]) then // 1 слева от 2 с
пересечением
begin L1[i]:=R[j]; R1[i]:=R[i]; end //отрезали кусок пересечения слева
else if ...
//перечисляем все случаи сформированные ранее

end;
// здесь L1[i], R1[i] непересекающаяся часть исходного отрезка L[i],R[i]

надеюсь принцип понятен
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.12.2008, 21:53   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

подумал немножко и нашел "неудобный случай" для данного алгоритма,
а именно когда большой новый отрезок полностью включает маленький предыдущий. По алгоритму он должен был бы разбиваться на два отрезка (до и после маленького). Но в алгоритме изменения числа отрезков не предусмотрено, хотя это можно сделать.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.12.2008, 22:57   #8
vikka
Пользователь
 
Регистрация: 18.12.2008
Сообщений: 19
По умолчанию

вот и преподаватель мне сразу этот случай показал, когда один или несколько отрезков лежат в одном большом. это можно сделать?
vikka вне форума Ответить с цитированием
Старый 20.12.2008, 23:51   #9
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Цитата:
Сообщение от vikka Посмотреть сообщение
вот и преподаватель мне сразу этот случай показал, когда один или несколько отрезков лежат в одном большом. это можно сделать?
Можно. Эти отрезки нужно просто отбросить.
como вне форума Ответить с цитированием
Старый 21.12.2008, 11:23   #10
vikka
Пользователь
 
Регистрация: 18.12.2008
Сообщений: 19
По умолчанию

оооо,все просто ужасно!=((( напишите ПОЖАЛУЙСТА полностью код программы, я окончательно запуталась!!пожалуйста....
vikka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти сумму ряда 11111 Помощь студентам 14 01.11.2010 19:55
Для массива определить сумму всех элементов, стоящих после максимального HECTOR.A. Паскаль, Turbo Pascal, PascalABC.NET 4 17.06.2009 22:04
Найти сумму всех чисел из промежутка от А до В, кратных 8 и 16 nickky2 Паскаль, Turbo Pascal, PascalABC.NET 8 05.12.2008 13:27
Я-юрист, есть задача - Найти сумму всех чисел из промежутка от А до В, кратные 13 и 5 Filosofijka Помощь студентам 1 24.11.2008 19:57
Как посчитать сумму строк во всех текстовых файлах? qwestor PHP 8 30.12.2007 16:02