Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 19.12.2018
Сообщений: 17
1

Удалить повторяющиеся элементы

16.02.2019, 16:53. Показов 2503. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Мне нужно удалить все повторяющиеся элементы, то есть при вводе 1 2 3 3 4 5 , он должен вывести 1 2 4 5
Но почему-то программа не работает,ПОМОГИТЕ,ПОЖАААААЛУЙСТА
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
#include<stdio.h>
#include<conio.h>
#include<locale.h>
 
struct list
{
    float elem;
    list *next, *prev;
};
 
void Enter(list *k) //ввод списка
{
    FILE *ent;
    !fopen_s(&ent, "enter.txt", "r");
    {
        while (!feof(ent))
        {
            k->next = new list;
            k->next->prev = k;
            k = k->next;
            fscanf_s(ent, "%f ", &k->elem);
        }
        fclose(ent);
        k->next = NULL;
    }
}
 
list Processing (list *t) //обработка списка 
{ char del_elem = t->elem; 
list *k; 
while (t->next) 
{ 
if (t->next->elem == del_elem) 
{ 
k = t->next; 
t->next = k->next; 
delete k; 
} 
else t = t->next; 
} 
return(k); 
}
 
 
void Output(list *k) //вывод списка
{
    FILE *out;
    fopen_s(&out, "output.txt", "w");
    fprintf_s(out, "Последовательность: ");
    while (k->next)
    {
        k = k->next;
        fprintf_s(out, "%f ", k->elem);
    }
    fclose(out);
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    list *h = new list, *k;
    h->next = NULL;
    h->prev = NULL;
    k = h;
    Enter(k);
    int count = 0;
    while (k->next)
    {
        k = k->next;
        count++;
    }
    if (count <= 2)
    {
        printf("В последовательности не достаточно элементов.");
        _getch();
    }
    else
    {
        k = Processing(k);
        Output(k);
    }
    _getch();
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.02.2019, 16:53
Ответы с готовыми решениями:

Удалить из массива повторяющиеся элементы
Удалить из массива повторяющиеся элементы.жду вашим решений

Удалить повторяющиеся элементы вектора
Как удалить элемент? найти - нашёл (вроде как), а вот удалить... vector &lt;myString&gt; ve(10);...

Удалить повторяющиеся элементы списка
Есть список в виде класса. Нужно удалить повторяющиеся элементы, вернее, чтобы каждого было по...

Удалить повторяющиеся элементы из двух векторов
Доброго времени суток! Есть два вектора, нужно найти повторяющиеся элементы и удалить их из...

6
39 / 31 / 7
Регистрация: 31.01.2019
Сообщений: 81
16.02.2019, 17:37 2
код выделяйте
вверху слева кнопочка С++ ( или С или другой какой язык)
читать и копировать другим легче потом
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,884
Записей в блоге: 1
16.02.2019, 17:48 3
k0l0p0k, папаша как оно?
0
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
16.02.2019, 18:48 4
C++
1
2
3
4
5
6
7
8
vector<int> data; 
for (size_t i = 0; i<n;++i)
{
    int val;
    std::cin>>val;
    if(find(data.begin(), data.end(), val)==data.end())
         data.push_back(val);
}
Добавлено через 51 секунду
Если данных много, имеет смысл использовать какой-нибудь unordered_set для проверки.
0
Just Do It!
 Аватар для XLAT
4068 / 2463 / 640
Регистрация: 23.09.2014
Сообщений: 7,998
Записей в блоге: 2
16.02.2019, 20:32 5
как вариант:
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
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <vector>
#include <set>
 
#include <fstream>
 
#include <iterator>
#include <random>
#include <algorithm>
 
class rnd
{
public:
    rnd(){srand((unsigned int)time(NULL));}
    int operator()(int range_min = 0, int range_max = 2)
    {   return rand() % (range_max - range_min + 1) + range_min;
    }
};
 
template<class T>
void showt(T& v)
{   std::cout << "|----------------------------------------------->\n";
    copy( v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
}
 
//-----------------------------------------------------------------------------|
int main()
{   setlocale(LC_CTYPE, ".1251");
    // Инициализация рандома:
    srand(static_cast<unsigned int>(time(NULL)));
    int SIZE = 10;
    std::vector<int> vec;
 
    std::cout << "\n// Заполняем значениями ";
 
    {   std::fstream file("enter.txt");
        int n;
        if(!file.is_open())
        {   std::cout << "рандомно:\n"
                      << "(файл \"enter.txt\" нельзя открыть...)\n";
            vec.resize(SIZE);
            generate(vec.begin(), vec.end(), rnd());
        }
        else
        {   std::cout << "из файла:\n";
            while (!file.eof())
            {   file >> n;
                //vec.push_back([]{input >> n, return n});
                vec.push_back(n);
            }
            file.close();
        }
    }
    showt(vec); // |-------------------------------------->"777 1 2 3 3 4 5 3 3"
 
    std::cout << "\n\n// Удаляем соседние повторы без сортировки:\n";
    vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
    showt(vec); // |-------------------------------------->"777 1 2 3 4 5 3"
 
    std::cout << "\n\n// Только уникальные элементы с сортировкой:\n";
    std::set<int> sst(vec.begin(), vec.end());
    showt(sst); // |-------------------------------------->"1 2 3 4 5 777"
 
    getchar();
    return 0;
}
0
39 / 31 / 7
Регистрация: 31.01.2019
Сообщений: 81
16.02.2019, 20:50 6
Цитата Сообщение от _stanislav Посмотреть сообщение
k0l0p0k, папаша как оно?
ну как, как у начинающего папаши
0
39 / 31 / 7
Регистрация: 31.01.2019
Сообщений: 81
17.02.2019, 18:47 7
Лучший ответ Сообщение было отмечено tzhva как решение

Решение

Кое что подправил, но задачка не решена еще,
в текущем варианте ищет совпадение с первым элементом списка только.
да, ввод-вывод float elem начинаются с первого элемента списка, а не с "нулевого".

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
#include <iostream>
#include<cstdio>
//include<conio.h>  
//include<locale.h>
 
struct list
{
float elem;
list *next, *prev;
};
 
void Enter(list *kl) {//ввод списка
FILE *ent;
float elemtemp;
int eoff = 0;
if(!fopen_s(&ent, "enter.txt", "r")) {  
    //while (!feof(ent)) {
    while (eoff!=EOF) { 
     eoff = fscanf(ent, "%f ", &elemtemp);  
     if (eoff>0) {
        kl->next = new list;
        kl->next->prev = kl;
        kl = kl->next;
        kl->elem = elemtemp;        
     }
    }
fclose(ent);
kl->next = NULL;
}
else {
    printf("error open enter.txt\n");
}
}
 
void Processing (list *t) {//обработка списка, было list* Processing () , возвращать указатель имхо незачем
float del_elem = t->next->elem; // было char
list *k;
t = t->next; 
while (t->next) { // пока не закончился список
if (t->next->elem == del_elem) { // нашли совпадение
//if ((t->next->elem - del_elem) < 0.000001 ) { //?? надо abs()<0.00...01
k = t->next; 
t->next = k->next; // "перепрыгиваем"
delete k; // 
} 
else t = t->next; 
} 
//return t; // k
}
 
void Output(list *k) //вывод списка
{
FILE *out;
fopen_s(&out, "output.txt", "w");
fprintf(out, "Последовательность: \n");
while (k->next) {
k = k->next;
fprintf(out, "%f ", k->elem);
}
fclose(out);
}
 
int main() {
setlocale(LC_ALL, "Russian");
list *h = new list, *k;
h->next = NULL;
h->prev = NULL;
k = h;
Enter(k);
int count = 0;
while (h->next) {//в оригинале было k,
// после окончания цикла k приравнивался последнему элементу списка (k = k->next)
// в результате Processing() (и Output()  работать не с чем   
    h = h->next;    
    count++;
}
if (count <= 2) {
printf("В последовательности не достаточно элементов.\n");
getc(stdin);
}
else {
Processing(k);//k = Processing(k);
Output(k);
}
getc(stdin);
}
1
17.02.2019, 18:47
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.02.2019, 18:47
Помогаю со студенческими работами здесь

Удалить все повторяющиеся элементы массива
Удалить все повторяющиеся элементы массива. Как сделать, чтобы элементы удалялись, а не...

Удалить соседние повторяющиеся элементы вектора
Здравствуйте, необходимо удалить соседние повторяющиеся элементы вектора. Мой код некорректно...

Удалить все повторяющиеся элементы в векторе
доброго времени суток. Столкнулся с проблемой удаления лишних повторов чисел в векторе. Задача...

Удалить повторяющиеся элементы в отсортированнном массиве
пример такого массива I={0,1,3,3,3,5,6,8,10,10} Т.е. я так понимаю, нужно сдигать все элементы при...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Объекты и их имена
hw_wired 28.01.2025
Введение: Основы объектного подхода и их роль в информатике В современном мире информационных технологий объектный подход стал фундаментальным принципом организации и обработки информации. Этот. . .
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru