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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2008, 11:25   #11
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Цитата:
Сообщение от vikka Посмотреть сообщение
оооо,все просто ужасно!=((( напишите ПОЖАЛУЙСТА полностью код программы, я окончательно запуталась!!пожалуйста....
Код я писать не буду, но помощь могу оказать. А если нужен просто код, то вам прямяков во Фриланс форум.
como вне форума Ответить с цитированием
Старый 21.12.2008, 11:34   #12
vikka
Пользователь
 
Регистрация: 18.12.2008
Сообщений: 19
По умолчанию

помогите пож. =((у меня есть код когда отрезки неперсекаются, я не могу собрать все эти случаи в кучу и совместить, чтоб все нормально получилось!!!
vikka вне форума Ответить с цитированием
Старый 21.12.2008, 12:07   #13
vikka
Пользователь
 
Регистрация: 18.12.2008
Сообщений: 19
По умолчанию

ну или хотя бы ссылку на этот форум дайте пож.....=((
vikka вне форума Ответить с цитированием
Старый 21.12.2008, 12:26   #14
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Цитата:
Сообщение от vikka Посмотреть сообщение
помогите пож. =((у меня есть код когда отрезки неперсекаются, я не могу собрать все эти случаи в кучу и совместить, чтоб все нормально получилось!!!
Тебе нужно из неупорядоченного множества отрезков с пересечениями получить упорядоченное множество отрезков без пересечений. Алгоритм можно кратко описать вот так:
1. неупорядоченное множество - A, упорядоченное - B. Вначале A содержит все отрезки, а B - пусто.
2. пока A непусто, берешь отрезок из A - a1, исключаешь его из множества A
3. находишь в В ближайший к нему отрезок слева по левой границе - b1
4. если такого отрезка нет, переходишь к шагу 7
5. если a1 лежит в b1 - выбрасываешь a1, переходишь к шагу 2
6. если a1 пересекается с b1 - изменяешь b1 таким образом, что он становится объединением a1 и b1, теперь этот измененный b1 становится новым a1 - переходишь к следующему шагу 7
7. берешь следующий за b1 отрезок в B - b2
8. если такого отрезка нет, переходишь к шагу 10
9. если a1 пересекается с b2 - изменяешь b2 таким образом, что он становится объединением a1 и b2, переходишь к шагу 2
10. иначе вставляешь a1 в B между b1 и b2, переходишь к шагу 2

Таким образом все отрезки перетекут из A в B. И ты сможешь применить свой тривиальный код для отрезков без пересечений.

Последний раз редактировалось como; 21.12.2008 в 12:38.
como вне форума Ответить с цитированием
Старый 21.12.2008, 13:12   #15
lenant
Пользователь
 
Регистрация: 09.04.2008
Сообщений: 10
По умолчанию

Попробуй вот это. Я повводил всякие числа, ошибок не заметил.
Код:
program n1;
uses crt;
var L,R:array[1..1000] of real;
i,j,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]);
 readln;
 end;
  For i:=1 to n do
  for j:=i+1 to n do
  If L[j]<R[i] then
   if L[j]<L[i] then
   begin
    If R[j]>L[i] then 
     if R[j]<R[i] then R[j]:=L[i]
     else R[i]:=L[i];
   end
   else
   begin
    L[j]:=R[i];
    if R[i]>R[j] then R[j]:=R[i];
   end;
 For i:=1 to n do sum:=sum+R[i]-L[i];
 writeln('summa ravna ',Sum:7:4);
 readln;
end.

Последний раз редактировалось lenant; 21.12.2008 в 15:50. Причина: ошибка в коде
lenant вне форума Ответить с цитированием
Старый 21.12.2008, 13:52   #16
vikka
Пользователь
 
Регистрация: 18.12.2008
Сообщений: 19
По умолчанию

спасибо большое, попоробую
vikka вне форума Ответить с цитированием
Старый 21.12.2008, 13:55   #17
bag
Пользователь
 
Регистрация: 20.06.2008
Сообщений: 95
По умолчанию

Вот мой вариант решения (причем халявный ):
Код:
uses crt;
var
  n,len1,i,j:integer;
  l:array[1..100] of real;
  r:array[1..100] of real;
  len:array[1..100] of real;

begin
  clrscr;
  writeln('N=');
  readln(n);
  len[1]:=0;
  for i:=1 to n do
  begin
    write('L[',i,']=');
    readln(l[i]);
    write('R[',i,']=');
    readln(r[i]);
    for j:=1 to i-1 do
    begin
      if len[j]=0 then continue;
      if (l[j]>=l[i])and(l[j]<=r[i])and(r[j]>r[i]) then
      begin
        r[i]:=r[j];
        len[j]:=0;
        continue;
      end;
      if (l[i]>=l[j])and(l[i]<=r[j])and(r[i]>r[j]) then
      begin
        l[i]:=l[j];
        len[j]:=0;
        continue;
      end;
      if (l[i]>=l[j])and(r[i]<=r[j]) then
      begin
        l[i]:=l[j];
        r[i]:=r[j];
        len[j]:=0;
        continue;
      end;
      if (l[j]>=l[i])and(r[j]<=r[i]) then
      begin
        len[j]:=0;
      end;
    end;
    len[i]:=r[i]-l[i];
  end;
  len1:=0;
  for i:=1 to n do
  begin
    len1:=len1+len[i];
  end;
  writeln('Summ dlina=',len1);
  readkey;
end.
Не забывайте оставлять отзывы (кнопочка в левом нижнем углу сообщения)

Последний раз редактировалось bag; 21.12.2008 в 14:20.
bag вне форума Ответить с цитированием
Старый 21.12.2008, 14:18   #18
bag
Пользователь
 
Регистрация: 20.06.2008
Сообщений: 95
По умолчанию

Упс... не успел
Не забывайте оставлять отзывы (кнопочка в левом нижнем углу сообщения)
bag вне форума Ответить с цитированием
Старый 21.12.2008, 14:22   #19
vikka
Пользователь
 
Регистрация: 18.12.2008
Сообщений: 19
По умолчанию

спасибо огромное!!! а что значит "упс... не успел" ??
vikka вне форума Ответить с цитированием
Старый 21.12.2008, 14:29   #20
bag
Пользователь
 
Регистрация: 20.06.2008
Сообщений: 95
По умолчанию

Цитата:
Сообщение от vikka Посмотреть сообщение
спасибо огромное!!! а что значит "упс... не успел" ??
Решение уже привели до меня Кстати, если в программу lenant ввести 2 отрезка, в такой последовательности: 1) 4; 6; 2) 0; 2, то его программа покажет НЕВЕРНЫЙ результат!
Не забывайте оставлять отзывы (кнопочка в левом нижнем углу сообщения)

Последний раз редактировалось bag; 21.12.2008 в 14:56.
bag вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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