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

Удалить из массива "лишние" (кроме первого) элементы - C++

Восстановить пароль Регистрация
 
snadow
 Аватар для snadow
0 / 0 / 0
Регистрация: 03.07.2011
Сообщений: 41
29.03.2012, 09:38     Удалить из массива "лишние" (кроме первого) элементы #1
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
#include "stdafx.h"
#include<conio.h>
#include<stdio.h>
#include<iostream>
#include<iomanip>
 
using namespace std;
 
/* Отсев. Задан массив из n элементов. Удалить из массива
"лишние" (кроме первого) элементы так что бы оствшиеся образовали
возрастающую последовательность */
 
int main()
{
    int n,i,*p;
    cout<<"Enter number of array: ";
    cin>>n;
    p=new int[n];
    cout<<"Enter elements of array"<<endl;
 
    for(i=0; i<n ; i++)
        cin>>p[i];
 
        system("cls");
    cout<<"Your Array"<<endl;
 
    for(i=0; i<n ; i++)
        cout<<p[i]<<setw(3);
 
    cout<<endl;
    cout<<endl<<"Your Cleaned Array"<<endl;
 
    for(i=0; i<n ; i++)                   //Начало цикла "отсеивания"
    {
        if(p[i]<p[i+1])
                cout<<p[i]<<setw(3);
        else p[i+1]=p[i];
 
    }
system("pause");
}
Не понимаю почему работать не хочет, принцип задания - 1 2 5 3 4 6 7 и из этого выводится 1 2 5 6 7
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2012, 09:38     Удалить из массива "лишние" (кроме первого) элементы
Посмотрите здесь:

C++ Заменить все элементы массива большие чем "a" значением максимального элемента этого массива
Удалить из массива «лишние» элементы C++
Строка: Имеются четыре буквы, необходимо удалить из массива все символы, кроме этих четырех и "склеить" оставшееся в непрерывный символьный массив. C++
C++ Расположить элементы массива, лежащие до первого символа "к", в порядке, обратном алфавитному, и вывести на печать отсортирванный массив данных
C++ Определить длину каждого слова. Удалить все буквы "а" и "о" с фамилии
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Inscriptor
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 7
29.03.2012, 10:03     Удалить из массива "лишние" (кроме первого) элементы #2
Цитата Сообщение от snadow Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
    for(i=0; i<n ; i++)                   //Начало цикла "отсеивания"
    {
        if(p[i]<p[i+1])
                cout<<p[i]<<setw(3);
        else p[i+1]=p[i];
 
    }
system("pause");
}
А как Вы, пардон, предполагаете сравнение p[i]<p[i+1] при i=n-1? Это уже, кажется, выход за пределы выделенной памяти, которая у Вас, кстати, "утекает", потому что выделять Вы ее выделяете, а освобождать и не думаете.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
29.03.2012, 10:21     Удалить из массива "лишние" (кроме первого) элементы #3
Цитата Сообщение от snadow Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
    for(i=0; i<n ; i++)                   //Начало цикла "отсеивания"
    {
        if(p[i]<p[i+1])
                cout<<p[i]<<setw(3);
        else p[i+1]=p[i];
 
    }
system("pause");
}
Не понимаю почему работать не хочет, принцип задания - 1 2 5 3 4 6 7 и из этого выводится 1 2 5 6 7
Еще тут else.. не надо вставлять
snadow
 Аватар для snadow
0 / 0 / 0
Регистрация: 03.07.2011
Сообщений: 41
29.03.2012, 10:52  [ТС]     Удалить из массива "лишние" (кроме первого) элементы #4
подсказали бы как правильно, просто 3 месяц изучаю язык
eji
116 / 116 / 6
Регистрация: 17.09.2010
Сообщений: 288
29.03.2012, 10:56     Удалить из массива "лишние" (кроме первого) элементы #5
snadow, код:
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
#include <iostream>
#include <windows.h>
 
using namespace std;
 
char *rus;
char *printrus(char *text, char *rus)
{
    try
    {
        rus = new char[255];
    }
    catch(bad_alloc xa)
    {
        exit(1);
    }
    CharToOem(text, rus);
    return rus;
}
 
int main()
{
    cout << printrus("Массивы", rus)
         << endl;
    int a[10] = {1, 2, 5, 3, 8, 6, 7, 9, 4, 10};
    for(int i = 0; i < 10; i++)
    {
        cout << a[i]
             << "\t";
    }
    cout << "\n---------------------------------------------------------\n";
    for(int i = 0; i < 10; i++)
    {
        if(i == 0)
        {
            cout << a[i]
                 << "\t";
            continue;
        }
        if(a[i - 1] < a[i])
        {
            cout << a[i]
                 << "\t";
        }
        else
        {
            a[i] = a[i - 1];
        }
    }
    cout << endl;
    delete [] rus;
    system("pause");
    return 0;
}
Физического удаления элементов не происходит - это Ваш код, только исправленный.
Inscriptor
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 7
29.03.2012, 11:01     Удалить из массива "лишние" (кроме первого) элементы #6
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
#include "stdafx.h"
#include<conio.h>
#include<stdio.h>
#include<iostream>
#include<iomanip>
 
using namespace std;
 
 
int main()
{
    int n,i,*p;
    cout<<"Enter number of array: ";
    cin>>n;
    p=new int[n];
 
    cout<<"Enter elements of array"<<endl;
 
    for(i=0; i<n ; i++)
     cin>>p[i];
 
        system("cls");
    cout<<"Your Array"<<endl;
 
    for(i=0; i<n ; i++)
     cout<<p[i]<<setw(3);
 
    cout<<endl;
    cout<<endl<<"Your Cleaned Array"<<endl;
 
    cout << p[0] << setw(3);
    for(i=1; i<n ; i++)                   //Начало цикла "отсеивания"
    {
        if(p[i] > p[i-1])
         cout<<p[i]<<setw(3);
        else p[i]=p[i - 1];
 
    }
 
    delete[] p;
    system("pause");
 
    return 0;
}
Ну, так например.
snadow
 Аватар для snadow
0 / 0 / 0
Регистрация: 03.07.2011
Сообщений: 41
29.03.2012, 11:40  [ТС]     Удалить из массива "лишние" (кроме первого) элементы #7
спасибо большое
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2012, 11:53     Удалить из массива "лишние" (кроме первого) элементы
Еще ссылки по теме:

Удалить из файла все строки кроме тех что начинаются на словосочетание "Данные для" C++
Удалить из двусвязного списка все элементы до первого "*" и после последнего "*" C++
C++ Переписать элементы массива "X" в массив "Y" и подсчитать их количество

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

Или воспользуйтесь поиском по форуму:
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
29.03.2012, 11:53     Удалить из массива "лишние" (кроме первого) элементы #8
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
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
 
struct remove_predic: std::unary_function< int, bool > {
    int *last_;
    remove_predic( int *last ): last_(last) {}
    bool operator () ( int next ) {
        if( next <= *last_ ) return true;
        *last_ = next;
        return false;
    }
};
 
void show_vector( const std::vector<int> &v ) {
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << "\n";
}
 
int main()
{
    std::vector< int > v;
    v.push_back(1); v.push_back(2);
    v.push_back(5); v.push_back(3);
    v.push_back(4); v.push_back(6);
    v.push_back(7);
 
    show_vector(v);
    int first = *v.begin();
 
    v.erase(std::remove_if( v.begin() + 1, v.end(),
                            remove_predic(&first) ), v.end());
    show_vector(v);
 
 
    return 0;
}
Код
1 2 5 3 4 6 7 
1 2 5 6 7
Yandex
Объявления
29.03.2012, 11:53     Удалить из массива "лишние" (кроме первого) элементы
Ответ Создать тему
Опции темы

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