1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
1

Упорядочить список целых чисел

25.05.2014, 14:01. Показов 7070. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Нужно создать список целых чисел. Упорядочить его элементы и вывести на печать. Списки можно создавать вводом из файла или с клавиатуры.

Не могу понять, как именно создавать и упорядочивать? Можно ли пузырьком?


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
#include <iostream>
using namespace std;
 
int main()
{
    int size;
    cin >> size;
 
    int *a = new int[size];
 
    for (int i = 0; i < size; i++)
    {
        cin >> a[i];
    }
    for (int i = 0; i < size; i++)
    {
        for (int j = size - 1; j > i; j--)
        {
            if (a[j] < a[j - 1])
            {
                swap (a[j], a[j - 1]);
            }
        }
    }
    for (int i = 0; i < size; i++)
    {
        cout << a[i] << ' ';
    }
 
    return 0;
}
Вот сортировка, но как применить ее к списку? И как его задать правильно?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.05.2014, 14:01
Ответы с готовыми решениями:

Сформировать список целых чисел и упорядочить их по неубыванию
Не могу разобраться с лабораторной работой. Прошу помочь. Сформировать список целых чисел и...

Сформировать список из вещественных чисел. Упорядочить список по возрастанию.
решить через односвязные списки..=( Сформировать список из вещественных чисел. Упорядочить...

Упорядочить последовательность целых чисел
Дано натуральное число n, целые числа a1, ... , an. Оставить без изменения последовательность a1,...

В матрице целых чисел X(n × n) упорядочить строки по убыванию
Пока такие наработки, но выдает ошибку. помогите пожалуйста #include &lt;iostream&gt; #include...

10
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
25.05.2014, 14:04 2
Привет юзай stl и не парь себе мозг)
контейнер list
0
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
25.05.2014, 14:15  [ТС] 3
Вот, я покопался:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
   int arr[] = { 1, 6, 0, 100};
   list<double> l (arr, arr + sizeof(arr) / sizeof(int));
   l.sort();
   copy(l.begin(), l.end(), ostream_iterator<double>(cout, " "));
   cout << endl;
   return 0;
}
Как можно сделать, чтобы эти цифры можно было вводить с клавиатуры или читать из файла?
0
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
25.05.2014, 14:21 4
Ввод с клавы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
   list<int> l;
   copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(l));
   l.sort();
   copy(l.begin(), l.end(), ostream_iterator<int>(cout, " "));
   cout << endl;
   return 0;
}
0
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
25.05.2014, 14:33  [ТС] 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
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{  setlocale (LC_ALL, "RUS");
unsigned int size = 0;
cout << "ВВедите размер массива: ";
cin >> size;
cin.sync(); //очищение буфера стандартного ввода
int arr = new int[size];
cout << "Ввод массива...";
for (int i =0; i< size; i++)
{
    cout << "Введите " << i << " элемент массива: ";
    cin >> arr[i];
    cin.sync();
}
 //  int arr[] = { 1, 6, 0, 100};
   list<double> l (arr, arr + sizeof(arr) / sizeof(int));
   l.sort();
   copy(l.begin(), l.end(), ostream_iterator<double>(cout, " "));
   cout << endl;
   return 0;
}
Но этот способ тоже почему-то отказывается работать...
0
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
25.05.2014, 14:40 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
   list<int> l;
   copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(l));
   l.sort();
   copy(l.begin(), l.end(), ostream_iterator<int>(cout, " "));
   cout << endl;
   return 0;
}
Тут будет читать числа до первой ошибки. То есть например вводиш 1 2 3 4 5 q. В итоге получиш лист 1 2 3 4 5.

Добавлено через 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
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
  setlocale (LC_ALL, "RUS");
  unsigned int size = 0;
  cout << "ВВедите размер массива: ";
  cin >> size;
  cin.sync(); //очищение буфера стандартного ввода
  int* arr = new int[size];
  cout << "Ввод массива...";
  for (int i =0; i< size; i++) {
    cout << "Введите " << i << " элемент массива: ";
    cin >> arr[i];
    cin.sync();
  }
  list<int> l (arr, arr + size);
  l.sort();
  copy(l.begin(), l.end(), ostream_iterator<int>(cout, " "));
  cout << endl;
  return 0;
}
0
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
25.05.2014, 14:48  [ТС] 7
О, спасибо. Я в этих функциях еще не работал ни разу, вы мне очень помогли. А как можно, допустим, если ввели два одинаковых числа, чтобы в упорядоченный список он вводил только одно, т.е. если 1 3 2 1 5, было 1 2 3 5?
0
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
25.05.2014, 14:51 8
Можна после того как создал лист применить алгоритм
l.unique();

Добавлено через 21 секунду
это как вариант
0
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
25.05.2014, 22:36  [ТС] 9
Спасибо)

Добавлено через 7 часов 44 минуты
Я попытался реализовать эту же задачу не используя функцию sort(), так, как мы делали на уроке, но здесь у меня опять возникла проблема вывода на экран. Пожалуйста, помогите сделать ввод с клавиатуры.

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <iostream>
 
using namespace std;
 
struct Node       //Структура являющаяся звеном списка
 {
     int x;     //Значение x будет передаваться в список
     Node *Next,*Prev; //Указатели на адреса следующего и предыдущего элементов списка
 };
 
 class List   //Создаем тип данных Список
 {
     Node *Head,*Tail; //Указатели на адреса начала списка и его конца
 
 public:
     List():Head(NULL),Tail(NULL){}; //Инициализируем адреса как пустые
     ~List(); //Деструктор
     void Show(); //Функция отображения списка на экране
     void Add(int x); //Функция добавления элементов в список
     void Sort();
 };
 
List::~List() //Деструктор
 {
     while (Head) //Пока по адресу на начало списка что-то есть
     {
         Tail=Head->Next; //Резервная копия адреса следующего звена списка
         delete Head; //Очистка памяти от первого звена
         Head=Tail; //Смена адреса начала на адрес следующего элемента
     }
 }
 
 void List::Add(int x)
 {
   Node *temp=new Node; //Выделение памяти под новый элемент структуры
   temp->Next=NULL;  //Указываем, что изначально по следующему адресу пусто
   temp->x=x;//Записываем значение в структуру
 
   if (Head!=NULL) //Если список не пуст
   {
       temp->Prev=Tail; //Указываем адрес на предыдущий элемент в соотв. поле
       Tail->Next=temp; //Указываем адрес следующего за хвостом элемента
       Tail=temp; //Меняем адрес хвоста
   }
   else //Если список пустой
   {
       temp->Prev=NULL; //Предыдущий элемент указывает в пустоту
       Head=Tail=temp; //Голова=Хвост=тот элемент, что сейчас добавили
   }
 }
 
 void List::Show()
 {
//ВЫВОДИМ СПИСОК С КОНЦА
     Node *temp=Tail;
      //Временный указатель на адрес последнего элемента
     while (temp!=NULL) //Пока не встретится пустое значение
     {
     cout<<temp->x<<" "; //Выводить значение на экран
     temp=temp->Prev; //Указываем, что нужен адрес предыдущего элемента
     }
     cout<<"\n";
/*
 //ВЫВОДИМ СПИСОК С НАЧАЛА
     temp=Head; //Временно указываем на адрес первого элемента
      while (temp!=NULL) //Пока не встретим пустое значение
     {
     cout<<temp->x<<" "; //Выводим каждое считанное значение на экран
     temp=temp->Next; //Смена адреса на адрес следующего элемента
     }
     */
     cout<<"\n";
 }
 
 void List::Sort()
 {
 
    Node * list = Head; // связанный список
    Node * node, * node2;
 
      for( node = list; node; node = node->Next )
        for( node2 = list; node2; node2 = node2->Next )
            if( node->x > node2->x ){ // если число из node меньше числа из node2 то переставляем их
                int i = node->x;
                node->x = node2->x;
                node2->x = i;
            }
 
     std::cout<<"\n";
 
 }
 
int main ()
{
// system("CLS");
 List lst; //Объявляем переменную, тип которой есть список
 lst.Add(1); //Добавляем в список элементы
 lst.Add(2);
 lst.Add(3);
 lst.Add(4);
 lst.Add(5);
 
 
 
 lst.Show(); //Отображаем список на экране
 lst.Sort();
  lst.Show();
 cout<<"\n";
 
 
//  system("PAUSE");
}
1
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
26.05.2014, 14:51 10
Опишы проблему с выводом. У меня на Code blocks все прекрасно работает.
0
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
26.05.2014, 19:05  [ТС] 11
В это программе числа задаются прямо с коде. А нужно, чтобы их можно было вводить с клавиатуры.

Добавлено через 2 часа 59 минут
А, все, разобрался)
0
26.05.2014, 19:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2014, 19:05
Помогаю со студенческими работами здесь

Упорядочить по убыванию массив целых чисел заданного размера
Упорядочить по убыванию массив состоящий из 10 целых чисел. Помогите пожалуйста, очень нужно!!!

Упорядочить несколько предложений по возрастанию целых и уменьшению действительных чисел
Cделать как отдельную функцию с файловым потоком Для ввода задано несколько предложений....

Массивы. Упорядочить элементы заданного массива целых чисел по убыванию количества единиц...
Задание 1 Упорядочить элементы заданного массива целых чисел по убыванию количества единиц,...

Дана матрица целых чисел N*M. Упорядочить каждую строку матрицы по убыванию элементов
Дана матрица целых чисел N*M. Упорядочить каждую строку матрицы по убыванию элементов


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru