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

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

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

Формируем во внешнем файле матрицу 100х100 случайным образом. - C++

29.03.2012, 13:55. Просмотров 570. Ответов 6
Метки нет (Все метки)

Нужно сделать следующую задачу:

Формируем во внешнем файле матрицу 100х100 случайным образом.
Файл закрываем.

Пользователь задает параметр сортировки:
1 - пузырьковая
2 - вставками
3 - быстрая
4 - слиянием (формируем в другом файле матрицу 50х50 случайным образом)

Открываем файл, сортируем, закрываем файл. Считаем время работы алгоритма, выводим время на экран.

Необходим код с небольшими комментариями.

За работу готов отблагодарить. Кто-нибуть может помочь?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2012, 13:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Формируем во внешнем файле матрицу 100х100 случайным образом. (C++):

Написать программу: заполнить матрицу случайным образом - C++
Помогите пожалуйста написать программу ( Дана квадратная матрица целых чисел размером N<=12. Заполнить матрицу случайными числами от 0 до...

Матрицу случайным образом заполнить разными целыми числами - C++
Матрицу A(n,m) случайным образом заполнить разными целыми числами от одного до n*m.

Создать матрицу А(nxn), сгенерировать елементы случайным образом - C++
Создать матрицу А(nxn), сгенерировать елементы случайным образом. Вычеслить индексы елементов матрицы. Вычеслить суму отрицательных...

Заполнить матрицу случайным образом, найти максимальный элемент в заданной области - C++
Помогите пожалуйста написать программу... Дана квадратная матрица целых чисел размером N<=12. Заполнить матрицу случайными числами от 0...

Разработать программу, которая формирует случайным образом вещественную матрицу размером n x m - C++
Помогите пожалуйста!!! С++Builder. Разработать программу, которая формирует случайным образом вещественную матрицу размером n x m (n, m...

Образовать матрицу A(nxn), сгенерировав элементы случайным образом. Определить индексы минимального элемента матрицы. - C++
Образовать матрицу A(nxn), сгенерировав элементы случайным образом. Определить индексы минимального элемента матрицы. Вычислить сумму...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
29.03.2012, 13:57 #2
Цитата Сообщение от Beingmaker Посмотреть сообщение
матрицу 100х100
А по какому принципу сортировать то?
0
Beingmaker
0 / 0 / 0
Регистрация: 29.03.2012
Сообщений: 8
29.03.2012, 14:03  [ТС] #3
Kuzia domovenok, сортировать как линейный массив из 10000 элементров
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
02.04.2012, 18:56 #4
Цитата Сообщение от Beingmaker Посмотреть сообщение
Kuzia domovenok, сортировать как линейный массив из 10000 элементров
То есть так
{pmatrix}
2 4 9
12 17 18
18 25 125
{/pmatrix}
построчно?
0
Beingmaker
0 / 0 / 0
Регистрация: 29.03.2012
Сообщений: 8
02.04.2012, 18:58  [ТС] #5
Kuzia domovenok, да
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
05.04.2012, 16:14 #6
Сделал, но не всё - только пузырёк вставки.
Кусорт тоже, но некорректно работающий, его ещё отладить надо.
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <time.h>
#include <stdlib.h>
#include <fstream>
#include <windows.h>
using namespace std;
const int MAXA=5;
HANDLE ohandle;
COORD cursor;
int arr[MAXA][MAXA];
 
void create_file(){
    ofstream text("input.txt");
    int i,j;
    srand( time( NULL ) );
    
    for(i=0; i<MAXA; i++){
        for (j=0; j<MAXA; j++)
        {
            text<<rand()%100;;
            text<<" ";
        }
        text<<endl;
    }
    text.close();
}
void read_file(){
    ifstream text("input.txt");
    int i, j;
    for(i=0; i<MAXA; i++){
        for (j=0; j<MAXA; j++)
        {
            text>>arr[i][j];
        }
    }
    text.close();
}
void write_file(){
    ofstream text("output.txt");
    int i, j;
    for(i=0; i<MAXA; i++){
        for (j=0; j<MAXA; j++)
        {
            text<<arr[i][j];
            text<<" ";
        }
        text<<endl;
    }
    text.close();
}
void print_arr(){
    int i, j;
    cursor.X=1; cursor.Y=13;
    SetConsoleCursorPosition(ohandle, cursor);
    for(i=0; i<MAXA; i++){
        for (j=0; j<MAXA; j++)
        {
            cout<<arr[i][j]<<" ";
        }
        cout<<endl;
    }
 
}
void getnext(int* i, int* j){
    if ((*j)==MAXA-1){
        (*i)=(*i)+1;
        (*j)=0;
    }
    else 
        (*j)=(*j)+1;
}
void getpre(int* i, int* j){
    if ((*j)==0){
        (*i)=(*i)-1;
        (*j)=MAXA-1;
    }
    else 
        (*j)=(*j)-1;
}
void bubble_sort(){
    bool sorted=false;
    int Ilimit=MAXA-1; 
    int Jlimit=MAXA-1;
    int i, j;
    int inext, jnext;
    int tmp;
     print_arr();
    while(!sorted){
        sorted=true;
        i=0; j=0;
        while((i!=Ilimit)||(j!=Jlimit)){
                inext=i;
                jnext=j;
                getnext(&inext, &jnext);
 
                if (arr[i][j]>arr[inext][jnext]){
                    tmp=arr[i][j];
                    arr[i][j]=arr[inext][jnext];
                    arr[inext][jnext]=tmp;
                     print_arr();
                    sorted=false;
                }
                i=inext;
                j=jnext;
            }
        getpre(&Ilimit, &Jlimit);
    }
}
void quick_sort(int lefti, int leftj, int righti, int rightj){
    int elem, tmp;
    int lip, rip, ljp, rjp;
    if ((lefti!=righti)||(leftj!=rightj)){
        elem=arr[lefti][leftj];
        lip=lefti; rip=righti; ljp=leftj; rjp=rightj; 
        while ((lip!=rip)||(ljp!=rjp)){
            while (arr[lip][ljp]<=elem) getnext(&lip, &ljp);
            while (arr[rip][rjp]<=elem) 
                getpre (&rip, &rjp);
            if ((lip<rip)||((lip==rip)&&(ljp<rjp))){
                tmp=arr[lip][ljp];
                arr[lip][ljp]=arr[rip][rjp];
                arr[rip][rjp]=tmp;
            }
            else break;
        }
        quick_sort(lefti, leftj, lip, ljp);
        quick_sort(rip, rjp, righti, rightj);
    }
}
void insert_sort(){
    int ins_mark_i=0, ins_mark_j=1;
    int i, j;
    int ipre, jpre;
    int elem;
    //print_arr();
    while ((ins_mark_i<MAXA)&&(ins_mark_j<MAXA)){
        elem=arr[ins_mark_i][ins_mark_j];
        i=ins_mark_i;      j=ins_mark_j;
        ipre=i;            jpre=j;
        getpre(&ipre,      &jpre);
        
        while (  ((i+j)>0) && (elem<arr[ipre][jpre])  ){
            arr[i][j]=arr[ipre][jpre];
            i=ipre;        j=jpre;
            getpre(&ipre,      &jpre);
            //print_arr();
        } 
        arr[i][j]=elem;
        
        
        ///increment loop cnt
        getnext(&ins_mark_i, &ins_mark_j);
    }//main loop
}
 
int menu(){
    int result=0;
    cursor.X=5; cursor.Y=3;
    SetConsoleCursorPosition(ohandle, cursor);
    cout <<"    MENU. SELECT (1..5)"<<endl;
    cout <<"1. New File"<<endl;
    cout <<"2. Not sorted"<<endl;
    cout <<"3. Bubble sort"<<endl; 
    cout <<"4. Insertion sort"<<endl;
    cout <<"5. Quick sort"<<endl;
    cout <<"6. Merge sort"<<endl;
    cout <<"7. Exit"<<endl;
    cursor.X=0; cursor.Y=11;
    while ((result<1)||(result>7)){
        SetConsoleCursorPosition(ohandle, cursor);
        cin>>result;
    }
    return result;
}
void clear_window(){
    int i, j;
    cursor.X=0; cursor.Y=12;
    SetConsoleCursorPosition(ohandle, cursor);
            
    for(i=0; i<MAXA+1; i++){
        for (j=0; j<MAXA; j++)
        {
            cout<<"   ";
        }
        cout<<endl;
    }
    cursor.X=0; cursor.Y=12;
    SetConsoleCursorPosition(ohandle, cursor);  
}
int main()
{
    char c;
    bool run=true;
    int item;
    ohandle=GetStdHandle(STD_OUTPUT_HANDLE);
    
    //create_file();
    //read_file();
    //print_arr();
    while (run){
        item=menu();
        clear_window();
        switch (item){
            case 1: cout<<"New file selected      \n"; create_file(); break;
            case 2: cout<<"No sort selected       \n"; read_file(); print_arr(); break;
            case 3: cout<<"bubble sort selected   \n"; read_file(); bubble_sort(); print_arr();  break;
            case 4: cout<<"insertion sort selected\n"; read_file(); insert_sort(); print_arr(); break;
            case 5: cout<<"qsort selected         \n"; read_file(); quick_sort(0,0,MAXA-1, MAXA-1);  print_arr();break;
            case 6: cout<<"merge sort selected    \n"; break;
            case 7: run=false; break;
        }
 
    }
    
    return 0;
}
1
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
06.04.2012, 21:13 #7
Исправил работу quick 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
void quick_sort(int lefti, int leftj, int righti, int rightj){
    int elem, tmp;
    int lip, rip, ljp, rjp;
    
    if ((lefti!=righti)||(leftj!=rightj)){
        //print_arr();
        elem=arr[lefti][leftj];
        lip=lefti; rip=righti; ljp=leftj; rjp=rightj; 
        while ((lip!=rip)||(ljp!=rjp)){
            while (/**/(arr[lip][ljp]<=elem)/**/ && ((lip!=rip)||(ljp!=rjp))       )
                getnext(&lip, &ljp);
            while ((arr[rip][rjp]>elem) && ((lip!=rip)||(ljp!=rjp))     )
                getpre (&rip, &rjp);
            if ((lip<rip)||((lip==rip)&&(ljp<rjp))){
                tmp=arr[lip][ljp];
                arr[lip][ljp]=arr[rip][rjp];
                arr[rip][rjp]=tmp;
            }
            else 
                break;
        }
        if (arr[lip][ljp]>elem) getpre (&lip, &ljp);
        arr[lefti][leftj]=arr[lip][ljp];
        arr[lip][ljp]=elem;
        
        //print_arr();
        quick_sort(rip, rjp, righti, rightj);
        
        quick_sort(lefti, leftj, lip, ljp);
    }
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2012, 21:13
Привет! Вот еще темы с ответами:

Сгенерировать матрицу 100х100 - C++
пожалуйста помогите.Как сделать матрицу к примеру:100*100 ,чтоб ее не нужно было вводить с клавиатуры, рандом с случайными числами не...

делим массив на n равных частей и из них формируем матрицу - C++
Всем привет, как разделить массив на несколько равных частей, и потом из них составить матрицу? тут деление с остатком нужно использовать?

Образовать матрицу A(nxn), сгенерировав элементы случайным образом. Определить индексы минимального элемента матрицы. Определить индексы максимального - C++
Образовать матрицу A(nxn), сгенерировав элементы случайным образом. Определить индексы минимального элемента матрицы. Определить индексы...

Дата случайным образом - C++
Добрый вечер! Помогите пожалуйста написать программу, которая генерирует дату случайным образом в формате &quot;дд.мм.гггг&quot; Я буду очень...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.04.2012, 21:13
Ответ Создать тему
Опции темы

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