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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
alexander71
0 / 0 / 0
Регистрация: 07.09.2014
Сообщений: 19
#1

С помощью алгоритма вставки, нужно сортировать парные числа массива в порядке возрастания - C++

07.09.2014, 19:44. Просмотров 1119. Ответов 4
Метки нет (Все метки)

Приветствую!
Нужно написать программу которая из текстового файла будет считывать в массив числа (например, 2 6 4 13 15 29).
После этого, с помощью алгоритма вставки, нужно сортировать парные числа в порядке возрастания, а непарные в порядке убывания. В результате создается новый текстовый файл, в котором находятся уже отсортированные числа по заданному алгоритму. (Было - 2 6 4 13 15 29. Стало - 2 4 6 29 15 13).
Я знаю как работает алгоритм вставки и как отсортировать числа в порядке возрастания, но с парными - непарными проблема. Так же есть проблема со считыванием чисел из файла в массив.
Буду благодарен за советы и подсказки!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2014, 19:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос С помощью алгоритма вставки, нужно сортировать парные числа массива в порядке возрастания (C++):

Расположить чётные числа массива в порядке возрастания, а нечётные в порядке убывания - C++
Требуется расположить чётные числа в порядке возрастания, а не чётные в порядке убывания. Относительного расположения чисел не менять. С...

сгенерировать квадратную матрицу n*n и сортировать ее в порядке возрастания - C++
подскажите кто знает.я уже запарился.язык С надо сгенерировать квадратную матрицу n*n и сортировать ее в порядке возрастания. у меня...

Нужно ввести любые три числа и чтобы они расположились в порядке возрастания - C++
Помогите решить задачу! Нужно ввести любые три числа и чтобы они расположились в порядке возрастания.

Вывести все четные числа массива в порядке возрастания их индексов, а затем все нечетные в порядке убывания - C++
Дан целочисленный массив размера N.Вывести в начале все содержащиеся в данном массиве четные числа в порядке возрастания их индексов, а...

Записать в массив в порядке возрастания все различные числа исходного массива - C++
Дан массив целых чисел X(n) . Сформировать массив Y(m) , поместив в него в порядке возрастания все различные числа, входящие в массив X(n)...

Вывести на экран элементы массива целых чисел в порядке возрастания их числа делителей - C++
1 Получить все числа, которые входят в массив по одному разу 2 Вывести на экран элементы массива целых чисел в порядке возрастания их...

4
m5willmax
1 / 1 / 0
Регистрация: 23.08.2014
Сообщений: 8
07.09.2014, 21:40 #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
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
 
void writeTxt(string file, string message){
    ofstream out(file); //(file,ios::app) - для дозаписи
    if (out) {
        out << message << endl;
        out.close();
    }
}
 
vector<string> readTxt(string file, int mode){
    vector<string> lines;
    string line;
    ifstream in(file);
    if (in) {
        while (!in.eof()){
            if (mode == 0){
                getline(in,line); //читает с пробелами
            } else {
                in>>line; //пробел = новая строка
            }
            if (line!=""){
                lines.push_back(line); //не читать пустые строки
            }
        }
        return lines;
    }
}
1
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
07.09.2014, 22:23 #3
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
#include <iostream>
#include <fstream>
 
// сортировка вставками
void ISort(int arr[], int arrsiz)
{
    int i, j, tmp, dta;
    for(i = 0; i < arrsiz; ++i)
    {
        tmp = arr[i];
        dta = 1;
        for(j = i - 1; j >= 0 && (((tmp&1) == (arr[j]&1)) ? (tmp&1 ? arr[j] < tmp : arr[j] > tmp) : (++dta, true)); --j)
        {
            if((tmp&1) == (arr[j]&1))
            {
                arr[j+dta] = arr[j];
                dta = 1;
            }
        }
        arr[j+dta] = tmp;
    }
}
 
int main()
{
    std::fstream fs("in.txt", std::ios::in);
    if(fs.is_open())
    {
        int arr[100], arrsiz = -1;
        while(fs >> arr[++arrsiz])
            ;
        fs.clear();
        fs.close();
        fs.open("out.txt", std::ios::out);
        if(fs.is_open())
        {
            ISort(arr, arrsiz);
            for(int i = 0; i < arrsiz; fs << arr[i] << "  ", ++i)
                ;
            fs.close();
        }
        else
            std::cerr << "Unable to open output file\n";
    }
    else
        std::cerr << "Unable to open input file\n";
    return 0;
}
1
wrone
8 / 8 / 2
Регистрация: 19.12.2013
Сообщений: 87
07.09.2014, 22:40 #4
Я вижу что тут уже два готовых когда есть, но своим я тоже хочу поделиться, сделал задание чтобы потренироваться. Я еще нуб в программирование, так что жесткая критика приветствуется.

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
#include <iostream>
#include <vector>
#include <fstream>
 
using namespace std;
 
int main(){
 
 
    vector<int> arr;
    int number;
    ifstream infile("numbers.txt");
 
        int n = 0;
        cout << endl << "Before: " << endl;
        while(!infile.eof())
        {
               infile >> number;
               arr.push_back(number);
               cout << arr[n] << " ";
               n++;
        }
               infile.close();
 
              for(int i = 0; i < arr.size(); i++)
              {
                  for(int j = i + 1; j < arr.size(); j++)
                  {
                      if(arr[i] % 2 == 0 && arr[i] > arr[j])
                      {
                         swap(arr[j],arr[i]);
                      }
                      if(arr[i] % 2 != 0 && arr[i] < arr[j])
                      {
                         swap(arr[j],arr[i]);
                      }
                  }
              }
 
          cout << endl << endl;
          cout << "After: " << endl;
 
          ofstream outfile("new.txt");
          for(int i = 0; i < arr.size(); i++)
          {
              cout << arr[i] << " ";
              outfile << arr[i] << " ";
          }
 
return 0;
}
1
alexander71
0 / 0 / 0
Регистрация: 07.09.2014
Сообщений: 19
08.09.2014, 11:59  [ТС] #5
Спасибо всем.
Цитата Сообщение от wrone Посмотреть сообщение
Я вижу что тут уже два готовых когда есть, но своим я тоже хочу поделиться, сделал задание чтобы потренироваться.
У меня еще вопрос, по поводу входного и конечного txt файла.
Как переделать код, если в файле должно быть первое число - количество элементов массива, а потом уже идут сами элементы входного массива. Но при этом в отредактированном конечном файле не должно быть размерности массива (первого числа, как во входном файле).
0
08.09.2014, 11:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2014, 11:59
Привет! Вот еще темы с ответами:

Выведите все числа от A до B включительно, в порядке возрастания, если A < B, или в порядке убывания в противном случае. - C++
пробовала сделать ,но выдаёт ошибки я не понимаю,что он требует ТЕКСТ ЗАДАЧИ. Даны два целых числа A и В (каждое в отдельной...

Сортировка массива в порядке возрастания и вывод элементов в обратном порядке - C++
нашла на форуме пару примеров, но они не полные и не запускаются, выбрала из них более менее подходящий, дальше было много вариантов но не...

Первые десять элементов массива М(30) отсортировать в порядке возрастания, а остальные в порядке убывания - C++
Привет. Первые десять элементов массива М(30) отсортировать в порядке возрастания, а остальные в порядке убывания. Вот тут я сделал массив...

Расположить элементы первой половины одномерного массива в порядке возрастания, а второй - в порядке убывания - C++
Нужно расположить элементы первой половины одномерного массива в порядке возрастания, а второй половины массива в порядке убывания. Данная...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru