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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Даны целые числа с1 с2 http://www.cyberforum.ru/cpp-beginners/thread221387.html
Люди помогите решите задачи пожалуйста!
C++ вывод слова на экран с типом char. Помогите пожалуйста не могу решить программу... Дано слово. Вывести это слово на экран с 4 знаками <<+>> в начале слова и с 5 знаками <<*>> в конце.Программу нужно обязательно написать через тип char. Выводить слово нужно обязательно через через одну переменную... при выводе добавлять знаки нельзя. http://www.cyberforum.ru/cpp-beginners/thread221379.html
C++ Массив с использованием функций
Нужно написать программу в которой нужно посчитать кол-во нулевых элементов массива(двумерного), с использованием функций, ввод, вывод, вычисление - в отдельных функциях. Желательно как можно проще... чтоб я понял.)))
Сортировка строк C++
Решите пожалуйсиа ету задачу есть матрица. нужно отсортировать ее по сторокам. Т.е. строки должны идти в порядке возрастания. Сравниваем строки по первому элементу. если первые элементы равны, значит вторые и т.д.
C++ Даны натуральное число n и целые числа а1,а2.,.,аn http://www.cyberforum.ru/cpp-beginners/thread221360.html
1)Даны натуральное число n и целые числа а1,а2.,.,аn. Выяснить, верно ли, что сумма тех а., которые не больше т, превышает q. 2)Даны натуральное число и целые числа d1,d2...,d. Выяаснить, верно ли, что сумма тех d, которые не превышают т, кратна целому числу р. 3)Случайным образом формируются координаты Х и Y 80 точек. Диапозон значений координат от -100 до +100. Вывести на экран...
C++ Дана целостная матрица Дана целостная матрица i,j=1,...,n. Получить b1,...,bn, где bi - это n Σ a^2*i*j j=1 подробнее

Показать сообщение отдельно
tymrfik
 Аватар для tymrfik
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
27.12.2010, 21:01     Найти сумму длинн всех окрашенных частей прямой.
Считываем данные из файла. Нужное решение :Будем моделировать закрашивание этих 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 минут
Пожалуйста помогите!!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru