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

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

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

C++ Вывести на экран элементы массива целых чисел в порядке возрастания их числа делителей
сгенерировать квадратную матрицу n*n и сортировать ее в порядке возрастания C++
C++ Все числа от 1 до К включительно отсортируйте в порядке возрастания суммы делителей числа (сортировка пузырьком)
C++ Выведите все числа от A до B включительно, в порядке возрастания, если A < B, или в порядке убывания в противном случае.
Нужно ввести любые три числа и чтобы они расположились в порядке возрастания C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
    }
}
igorrr37
 Аватар для igorrr37
1594 / 1222 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 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;
}
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;
}
alexander71
0 / 0 / 0
Регистрация: 07.09.2014
Сообщений: 19
08.09.2014, 11:59  [ТС]     С помощью алгоритма вставки, нужно сортировать парные числа массива в порядке возрастания #5
Спасибо всем.
Цитата Сообщение от wrone Посмотреть сообщение
Я вижу что тут уже два готовых когда есть, но своим я тоже хочу поделиться, сделал задание чтобы потренироваться.
У меня еще вопрос, по поводу входного и конечного txt файла.
Как переделать код, если в файле должно быть первое число - количество элементов массива, а потом уже идут сами элементы входного массива. Но при этом в отредактированном конечном файле не должно быть размерности массива (первого числа, как во входном файле).
Yandex
Объявления
08.09.2014, 11:59     С помощью алгоритма вставки, нужно сортировать парные числа массива в порядке возрастания
Ответ Создать тему
Опции темы

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