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

Проредить исходную последовательность отсчетов - C++

Восстановить пароль Регистрация
 
Parovozov
Сообщений: n/a
06.02.2013, 22:40     Проредить исходную последовательность отсчетов #1
рожаю и родить уже не могу - мозг поплыл.

под плюсиком:

Кликните здесь для просмотра всего текста
Дана последовательность отсчетов, представляющих собой пары (double Х : double Y). Отсчеты упорядочены по значениям Х.
В этой последовательности могут встречаться подпоследовательности, состоящие из идентичных отсчетов. Идентичные отсчеты имеют одинаковые значения Y.

Проредить исходную последовательность следующим образом:
В каждой подпоследовательности идентичных отсчетов оставить только первый и последний отсчеты, а так же каждый n-ный отсчет (n > 2).
Вывести на экран исходную последовательность и результат.
Пример:
Исходная:
(1.0, 10.0) (2.0, 11.0), (3.0, 11.0), (4.0, 11.0), (5.0, 11.0) (6.0, 10.0)
Результат при n = 3:
(1.0, 10.0) (2.0, 11.0), (4.0, 11.0), (5.0, 11.0) (6.0, 10.0)
Результат при n = 4:
(1.0, 10.0) (2.0, 11.0), (5.0, 11.0) (6.0, 10.0)


Вопщем мои действия:
создал 2мерный массив 6х2.
Путем сравнения определил подпоследовательности, а вот вывести на консоль 1й, последний и n-й ни как. посоветуйте как можно сделать.

Спасибо.

Добавлено через 2 часа 50 минут
Это код который имеет место быть.
собственно после того как определяются подпоследовательности, я впадаю в ступор-пытаюсь полученную выборку воткнуть в другой двумерный массив, чтобы в дальнейшем работать именно с теми данными, которые нужны, не получается.
Я до не уверен в правильном выборе пути решения задачи, может кто что подскажет?

И STL я пока не готов пользоваться, только начал постигать дзен.

Камрады, помогите советом.

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
#include <iostream>
#include <iomanip>
using namespace std;
 
// прототипы функций
//--------------------------------------------------------------------------
// функция вывода исходных последовательностей
void show(const double arr[][2], int x);
//--------------------------------------------------------------------------
 
// глобальные переменные
 
const int X=6,  Y=2;        // количество последовательностей
const int s = 4;            // Ширина вывода
 
int main()
{
    int n=3;                // условие при выводе последовательностей
    double arraypairs [X][Y]=       // массив пар последовательностей
    {               
        {1.0, 10.0}, 
        {2.0, 11.0}, 
        {3.0, 11.0}, 
        {4.0, 11.0}, 
        {5.0, 11.0}, 
        {6.0, 10.0} 
    };
 
// вывод исходной последовательности
    show(arraypairs,X);
    cout<<endl;
 
// поиск подпоследовательностей путем сравнения верхней последовательности с нижней 
    for (int i=0; i<X; i++)
    {
        for (int j=0; j<Y; j++)
        {   
                if (arraypairs[i][1] == arraypairs[i+1][1] || arraypairs[i][1] == arraypairs[i-1][1]) // нашли все подпоследовательности
                    cout<<setw(s)<<arraypairs[i][j];// проверка правильности нахождения
 
                    
        }
    }
 
return 0;
}
 
void show(const double arr[][2], int x)
{
    for (int sequence=0; sequence<X; sequence++)
    {
        cout<<endl;
        for(int pair=0; pair<Y; pair++)
            cout<<setw(s)<<arr[sequence][pair];
    }
    cout<<endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2013, 22:40     Проредить исходную последовательность отсчетов
Посмотрите здесь:

C++ Определить последовательность ходов, которая позволит обойти все поля и вернуться на исходную.
C++ Объясните пожалуйста (Матрица задана в виде одномерного массива. Восстановить исходную)
переделать программу Pascal -> C++ (Восстановить исходную матрицу и напечатать ее по строкам) C++
Разделить исходную строку на несколько строк длины K C++
C++ нужно разбить исходную строку на две подстроки , причём первая длинной k
C++ Разбить исходную строку на две подстроки
C++ Разбить исходную строку на две подстроки, причем первая длиной k символов
Написать процедуру для суммирования матриц. Сложить исходную матрицу и транспонированную (т. е C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Comrad()
1 / 1 / 0
Регистрация: 27.08.2012
Сообщений: 11
19.05.2014, 11:46     Проредить исходную последовательность отсчетов #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
#include <iostream>
#define MULTI_ARRAY_LENGTH 20
#define N 3
 
using namespace std;
 
int main(){
    int mArray[MULTI_ARRAY_LENGTH][2] = {
        { 1, 22 },
        { 2, 33 },
        { 3, 33 },
        { 4, 33 },
        { 5, 33 },
        { 6, 22 },
        { 7, 22 },
        { 8, 22 },
        { 9, 22 },
        { 10, 22 },
        { 11, 33 },
        { 12, 33 },
        { 13, 33 },
        { 14, 33 },
        { 15, 33 },
        { 16, 33 }
 
    };
 
    for (int i = 0; i < MULTI_ARRAY_LENGTH; i++){
        if (mArray[i][0] != 0){
            cout << mArray[i][0] << " " << mArray[i][1] << endl;
        }
    }
    cout << "\n";
 
    int counter = 0;
    int j = 0;
    for (int i = 0; i < MULTI_ARRAY_LENGTH; i++){                       //находим две одинаковые по Y пары
        if (mArray[i][1] == mArray[i + 1][1] && mArray[i][0] != 0){     //если нашли начинаем считать до N
            counter++;                                                  //досчитали до N и соседнии пары все равно равны? это и есть наша пара которую надо убрать
            if (counter%N == 0){                                        //превращаем ее X в 0, чтобы потом вычистить
                mArray[i][0] = 0;
                counter = 0;
                j++;
            }
        }
        else { counter = 0; };
    }
 
    for (int i = 0; i < MULTI_ARRAY_LENGTH; i++){                               //вычищаем нулевые X и смещаем весь массив, чтобы было красиво
        if (mArray[i][0] == 0){
            for (int j = i; j < MULTI_ARRAY_LENGTH && mArray[j][1] != 0; j++){
                mArray[j][0] = mArray[j + 1][0];
                mArray[j][1] = mArray[j + 1][1];
            }
        }
    }
 
    for (int i = 0; i < MULTI_ARRAY_LENGTH; i++){
        if (mArray[i][0] != 0){
            cout << mArray[i][0] << " " << mArray[i][1] << "\n";
        }
    }
 
    system("pause");
    return 0;
}
Yandex
Объявления
19.05.2014, 11:46     Проредить исходную последовательность отсчетов
Ответ Создать тему
Опции темы

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