Форум программистов, компьютерный форум CyberForum.ru

Найти сумму длинн всех окрашенных частей прямой. - C++

Восстановить пароль Регистрация
 
tymrfik
 Аватар для tymrfik
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
27.12.2010, 21:01     Найти сумму длинн всех окрашенных частей прямой. #1
Считываем данные из файла. Нужное решение :Будем моделировать закрашивание этих N отрезков.

Достаточно отсортировать отрезки в порядке неубывания координат левых концов. После этого осуществляется простой просмотр упорядоченных отрезков с анализом следующих возможных ситуаций:

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

2. Если текущий отрезок не пересекается с закрашиваемым отрезком, то закраска предыдущего отрезка закончена, его длина суммируется с длиной уже закрашенной части, а закрашиваемым отрезком становится текущий отрезок.

Процесс продолжается до тех пор, пока не будут просмотрены все отрезки. После этого длина последнего закрашенного отрезка суммируется с длиной ранее закрашенной части.
Не могу справиться именно с подсчетом суммы. (Возможн оневерный перебор). Прошу вашей помощи. (я жуткий навичок в этом деле. Все усложнил - через двухмерные массивы сотворил, но очень, очень бы хотелось дописать именно мой код.)
Вот мой недоработанный код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <conio.h>
using namespace std;
 
/*void sort(float mas,int N);
int i,k;*/
 
int main()
{
int N,i; 
fstream f;
double **mas;
double m;
 
f.open("test.txt",ios::in);//ios::in Указывает открыть файл для ввода .
f>>N;  // читаем количество строк
 
// выделяем память под массив размером в N строк и 2 столбца
mas = new double*[N];
for(i=0; i<N; i++)
 mas[i] = new double[2];
 
for(i=0; i<N; i++)  // читаем данные из файла
 f>>mas[i][0]>>mas[i][1];
 
// выводим
for(i=0; i<N; i++) 
 {
  cout.width(3);
  cout<<mas[i][0]<<"  ";
  cout.precision(3);
  cout<<mas[i][1]<<endl;
 } 
  
f.close(); // закрываем файл
//sort(mas[i][j],N);
int j=0;// по этому столбцу будет сортировка
 
 for (int k=0; k<N-1; k++)
    {
        for (i=0; i<N-1-k; i++)
        {
            if (mas[i][j] > mas[i+1][j])
            {
                double *p = mas[i];
                mas[i] = mas[i+1];
                mas[i+1] = p;
            }
        }
    }
  for (i=0; i<N; i++)
    {
        for (j=0; j<2; j++) 
         cout<<mas[i][j]<<"  ";     
    }
 float s=0;
  //float n[0][0];
 float l=mas[0][0];
 float r=mas[0][1];
 for(i=1; i<N; i++)
 // for(j=1; j<2; j++)
  {
   if (l<mas[i][0])
     { 
       if(r<mas[i][1]) 
        {
          r=mas[i][1];
          }
        //   n=m[l][r];// текущий
        else{
          s=s+r-l;}
          
      }
   }
 cout<<endl;
 cout<<s;
 
// освобождаем память
 
for(i=0; i<N; i++) delete[] mas[i];
delete[] mas;  
getch();
    system("PAUSE");
    return EXIT_SUCCESS;
}
Добавлено через 1 час 5 минут
Пожалуйста помогите!!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2010, 21:01     Найти сумму длинн всех окрашенных частей прямой.
Посмотрите здесь:

C++ В одномерном массиве найти сумму целых частей елементов, расположенных после последнего отрицательного элемента
C++ Найти элементы (и их сумму), которые состоят из двух равных частей и имеют в своем составе цифру 3
C++ 5. Написать программу, которая предлагает пользователю ввести два дробных числа и выводит в консоль сумму их целых частей и сумму дробных.
Вычислить приближенно площадь фигуры, ограниченной функцией y=x^2 и прямой y=5 x/2, разбивая изменения x на 100 частей C++
C++ Найти сумму всех положительных элементов массива и среднее арифметическое всех элементов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
27.12.2010, 21:07     Найти сумму длинн всех окрашенных частей прямой. #2
Цитата Сообщение от tymrfik Посмотреть сообщение
Прошу вашей помощи. (я жуткий навичок в этом деле. Все усложнил - через двухмерные массивы сотворил, но очень, очень бы хотелось дописать именно мой код.)
А само задание слабо написать?
tymrfik
 Аватар для tymrfik
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
27.12.2010, 21:11  [ТС]     Найти сумму длинн всех окрашенных частей прямой. #3
не учел.))) В спешке))) Вот оно!)
На прямой окрасили N отрезков.Известны координата L[I] левого конца отрезка и координата R[I] правого конца I-го отрезка для I=1, ..., N. Найти сумму длин всех окрашенных частей прямой.
Примечание. Число N столь велико, что на выполнение N*N даже простейших операций не хватит времени.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
27.12.2010, 21:15     Найти сумму длинн всех окрашенных частей прямой. #4
Цитата Сообщение от tymrfik Посмотреть сообщение
Число N столь велико, что на выполнение N*N даже простейших операций не хватит времени
А все-таки есть ограничения на N и значений координат отрезков?
tymrfik
 Аватар для tymrfik
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
27.12.2010, 21:18  [ТС]     Найти сумму длинн всех окрашенных частей прямой. #5
Можно просто самому задавать, что я и делаю через текстовый документ. Первая строка - идет число, которое и является кол-вом. А дальше уже у меня по столбцам идут сами координаты. Ситывает, сортирует всё правильно. А вот с суммой накладка выходит. Там вроде как надо по строке делать перебор, но чего-то уже как угодно много я голову ломал и совсем запутался.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
27.12.2010, 21:40     Найти сумму длинн всех окрашенных частей прямой. #6
вот так попробуйте ( именно подсчет суммы):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
float s=0;
  //float n[0][0];
 float l=mas[0][0];
 float r=mas[0][1];
 for(i=1; i<N; i++)
 // for(j=1; j<2; j++)
 {
   if (r<mas[i][0])
     { 
       s+=r-l;
       l=mas[i][0];
       r=mas[i][1];
      }
   else
   {
       if(r<mas[i][1])
           r=mas[i][1];
   }
 }
 s+=r-l;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2010, 08:25     Найти сумму длинн всех окрашенных частей прямой.
Еще ссылки по теме:

Найти сумму всех чисел в файле, найти данный символ, добавить текст C++
Найти сумму всех отрицательных, и произведение всех положительных элементов матрицы C++
C++ Найти сумму всех элементов главной диагонали матрицы, и сумму всех отрицательных элементов побочной диагонали

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
tymrfik
 Аватар для tymrfik
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
28.12.2010, 08:25  [ТС]     Найти сумму длинн всех окрашенных частей прямой. #7
Огромное спасибо за помощь!!!!)))))) SUPER!!! РАБОТАЕТ!!! Вы- гЕНий!!!))))СПС.
Yandex
Объявления
28.12.2010, 08:25     Найти сумму длинн всех окрашенных частей прямой.
Ответ Создать тему
Опции темы

Текущее время: 08:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru