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

Разбить main.cpp на файлы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ почему виртуальный деструктор вызывается дважды? http://www.cyberforum.ru/cpp-beginners/thread708007.html
Непонятно: #include <iostream> #include <conio.h> #include<string> using namespace std; class base { public:
C++ Builder Как выполняет действие программа c++? Есть программа, которая находит среднее арифметическое каждого столбца матрицы и выводит рез. в едит. матрица 5x2 мне помогли составить её, она работает все правильно, только я не могу понять как она работает и что означают переменные. Это мое задание по лабораторной, чтобы его защитить, то нужно преподу рассказать по какому принципу работает прога и значение каждой переменной. (Например i это... http://www.cyberforum.ru/cpp-beginners/thread707992.html
Как вернуть индексы массива в функции? C++
Подскажите пожалуйста, как вернуть mi, mj ?(надо вернуть индексы массива) #include <stdio.h> #include <string.h> #include <math.h> int index(int A); int main() {
Написать код программы.Вычислить значение выражения C++
Помогите написать код программы. Вычислить:
C++ Вычислить сумму знакопеременного ряда http://www.cyberforum.ru/cpp-beginners/thread707978.html
Помогите найти ошибку в коде:#include <iostream> using namespace std; int main(){ {float a=1,l=4,x,s,q; int n=9; cout<<"vvedite x:"; cin>>x; s=0; for (int i=1;i<=5;i++) {a*=-x;
C++ Вычислить сумму ряда Помогите найти ошибку в коде: #include <iostream> using namespace std; int main(){ {float a=1,l=4,x,s,q; int n=9; cout<<"vvedite x:"; cin>>x; q=(l*l*x*x)/n; for (int i=1; i<=4;i++) подробнее

Показать сообщение отдельно
margarin
 Аватар для margarin
35 / 35 / 0
Регистрация: 02.06.2012
Сообщений: 332
26.11.2012, 12:57  [ТС]     Разбить main.cpp на файлы
go, что то я не пойму, а на векторный массив "int *xarray_int" не прокатит?
как правильно указатель на вектор поставить?

Кликните здесь для просмотра всего текста
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <stdint.h>
#include <limits.h>
#include <vector>
#include <iomanip>
#include <math.h>
#include <time.h>
 
using namespace std;
 
int met_0(int *);
int met_1(int *);
int met_2(int *);
int met_3(int *);
void heir_met_3(int *, int, int); // доп. функция для "Быстрой сортировки"
 
 
int enter_array(int *);
void print_array(int *);
 
int main(){
    int swit;
    bool exit = false;
    
    vector<int> xarray_int; // мутим супер, пупер векторный массив
    char separator;
    enter_array(xarray_int);
    cout << "Введите символ-разделитель: ";
    cin >> separator;
    do{
        cout << "Выберите один из трёх методов сортировки:" << endl;
        cout << "1. Метод пузырьковой сортировки (лучший, для небольшого набора чисел)" << endl;
        cout << "2. Метод Дональда Шелла (для больших массивов чисел)" << endl;
        cout << "3. Метод Хоара (он же метод \"Быстрой сортировки\")" << endl;
        cin >> swit;
        cout << "До:" << endl;
        print_array(xarray_int, separator);
        switch(swit){
            case 0:
                met_0(xarray_int); // временная мера
                break;
 
            case 1: 
                met_1(xarray_int); // метод пузырька
                break;
 
            case 2: 
                met_2(xarray_int); // метод Шелла
                break;
 
            case 3: 
                met_3(xarray_int); // метод Хоара
                break;
 
            default :
                cout << "Зря Вы так..." << endl;
                exit = true;
                break;
        }
        cout << "После:" << endl;
        print_array(xarray_int, separator);
    }while(exit == false);
    return 0;
}
 
int enter_array(int *xarray_int){
    int number=1, amount=0, temp;
    
    cout << "Сколько чисел Вы хотите отсортировать?" << endl;
    cin >> amount;
    
    if(amount > 0){
        do{
            amount--;
            // ввод строки, по одному числу
            cout << "Пожалуйста, введите " << number << " число строки: ";
            cin >> temp;
            xarray_int.push_back(temp);
            number++;
        }while(amount != 0);
    }
    number--;
    cout << "Переменная number: " << number << endl;
    cout << "Переменная amount: " << amount << endl;
    cout << xarray_int.size() << endl;
    
    return xarray_int;
}
 
// вывод массива
void print_array(int *xarray_int, char separator){
    for(int i=0; i<xarray_int.size(); i++){
        cout << xarray_int[i];
        (i != xarray_int.size()-1) ? cout << separator : cout << endl; // если это не последний элемент - ставим после него separator
    }
}
 
// не реализовано
int met_0(int *xarray_int){
    
    return 0;
}
 
// Метод пузырьковой сортировки
int met_1(int *xarray_int){
    //print_array();
    //cout << "результат:\n" << endl;
    
    for (int i = xarray_int.size() - 1; i > 0; --i){
        for (int j = 0; j < i; ++j){
          if (xarray_int[j] > xarray_int[j + 1]){
        //xarray_int[j] = xarray_int[j + 1];
        xarray_int[j] ^= xarray_int[j+1] ^= xarray_int[j] ^= xarray_int[j+1];
          }
        }
    }
    
    //print_array();
    return 0;
}
 
// Метод Дональда Шелла
int met_2(int *xarray_int){
    int j,p;
    double min;
    for(int m=xarray_int.size()/2; m; m=m/2){//постоянно уменьшаем шаг от count/2 до 1(разбиваем массив на группы)
        for(int k=0; k<m; k++)//двигаемся внутри группы
        for(int i=m+k; i<xarray_int.size(); i+=m){//сортировка вставками с учётом шага
            min=xarray_int[i];
            for(j=k;j<i;j+=m)
            if(xarray_int[j]>min) break;
            for(p=i-m; p>=j; p-=m)
            xarray_int[p+m] = xarray_int[p];
            xarray_int[j] = min;
        }
    }
    //cout << "...:" << endl;
    //print_array();
    return 0;
}
 
// Метод Хоара
int met_3(int *xarray_int){
    heir_met_3(xarray_int, 0, xarray_int.size()-1);
    return 0;
}
 
void heir_met_3(int *xarray_int, int left, int right){
    int i = left, j = right, temp;
    int pivot = xarray_int[(left + right) / 2];
 
    // разделение
    while (i <= j) {
        while (xarray_int[i] < pivot)
        i++;
        while (xarray_int[j] > pivot)
        j--;
        if (i <= j) {
            temp = xarray_int[i];
            xarray_int[i] = xarray_int[j];
            xarray_int[j] = temp;
            i++;
            j--;
        }
    };
 
    // рекурсия
    if (left < j)
    heir_met_3(xarray_int, left, j);
    if (i < right)
    heir_met_3(xarray_int, i, right);
}

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