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

Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Darck Lord
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 5
20.05.2012, 09:09     Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька #1
всем привет. народ помогите с прогой, конкретно с функцией sort (65 строка), она должна двухмерный массив перевести построчно в одномерный отсортировать методом пузырька, а затем так же построчно вернуть обратно в двух мерный. она почему то у меня не работает.....заранее благодарен.
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
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
void CreateArray(int m,int rand,int** mas);
int n;
int **arr;
float *arr1;
float min;
int kn;
int k;
float rn;
int i,j;
void str(int n,int **arr,TStringGrid *sg);
 
int find_minus(int n,float *a)
{
  int i;
  for(i=0;i<n;i++)
  {
    if(a[i]<0) return i;
  }
  return -1;
}
 
int summa_after_first_minus(int t,int n,float *a)
{
  int i;
  float s=0;
  for(i=t+1;i<n;i++)
    s+=a[i];
  return s;
}
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  n=5;
  Edit1->Text=IntToStr(n);
  sg1->ColCount=n;
  sg1->RowCount=n;
}
//---------------------------------------------------------------------------
void puzirik(int *mass,int n)
 {
   for(i=0;i<n;i++)
   {
    for (j=0;j<n;j++)
      {
        if (mass[i]<mass[j])
        {
          int tmp=mass[i];
          mass[i]=mass[j];
          mass[j]=tmp;
         }
        }
      }
     }
//---------------------------------------------------------------------------
void sort(int n,int **a)
{
  int *mas;
  int k=n*n;
  mas=new int [k];
  do
 
  for(i=0;i<n;i++)
   for(j=0;j<n;j++)
      {mas[i*n+j]=a[i][j];}
 
      while((i*n+j)<k);
 
      puzirik(mas,n);
 
 
      do
 
  for(i=0;i<n;i++)
   for(j=0;j<n;j++)
      {a[i][j]=mas[i*n+j];}
 
      while(k<(i*n+j));
 
    delete []mas;
 
}
//---------------------------------------------------------------------------
 
//---------------------------------------------------------------------------
void element(int key,int **a, int n)
{
 int k;
 for (j=0;j<n;j++)
{
  k=0;
 for (i=0;i<n;i++)
{
  if (a[i][j]!=key) k++;
  if (k==n) Form1->Label7->Caption=Form1->Label7->Caption+IntToStr(j+1)+" ";
}
}
}
 
//---------------------------------------------------------------------------
   int sum_d(int n, int **A)
{
int i, j,summ,gumm,s;
summ=0;
gumm=0;
for (i=0;i<n;i++){
 for (j=0;j<n;j++){
  if((i+1)==j) summ = summ + A[i][j];
  if(i==(j+1)) gumm = gumm + A[i][j];
  }}
    if (gumm>summ){s=summ;}
    if (gumm<summ){s=gumm;}
    if (gumm==summ){s=summ;}
    return s;
}
 
//---------------------------------------------------------------------------
void minn(int n, float *arr1)
{
   min=arr1[0];
   kn;
  for (i=n; i>0; i--)
 {
    if (arr1[i]<min)
  {
    min=arr1[i];
    kn=i;
  }
  }
}
//---------------------------------------------------------------------------
float * create1(int n)
  {
  float *b;
   b=new float [n];
  return b;
  }
//---------------------------------------------------------------------------
void str1(int n,float *arr1,TStringGrid *sg)
   {
     for(i=0;i<n;i++)
 
       sg->Cells[i][0]=FloatToStr(arr1[i]);
 
   }
//----------------------------------------------------------------------------
 void str(int n,int **arr,TStringGrid *sg)
   {
   for(i=0;i<n;i++)
  {
    for(j=0;j<n;j++)
    {
      sg->Cells[j][i]=IntToStr(arr[i][j]);
    }
   }
  }
//---------------------------------------------------------------------------
 int ** create(int n)
  {
  int **a;
   a=new int *[n];
  for(i=0;i<n;i++)
  {
    a[i]=new int [n];
  }
  return a;
  }
  //---------------------------------------------------------------------------
   void CreateArray1(int m,float rand,float *mas)
{
  for(i=0;i<m;i++)
 
  mas[i]=random(rand)-(rand/2);
 
}
//----------------------------------------------------------------------------
  void CreateArray(int m,int rand,int **mas)
{
  int i,j;
  for(i=0;i<m;i++)
  {
    for(j=0;j<m;j++)
    {
      mas[i][j]=random(rand)-(rand/2);
    }
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  n=StrToInt(Edit1->Text);
  sg1->ColCount=n;
  sg1->RowCount=n;
  rn=StrToFloat(Edit2->Text);
  arr=create(n);
  CreateArray(n,rn,arr);
  str(n,arr,sg1);
  arr1=create1(n);
  CreateArray1(n,rn,arr1);
  str1(n,arr1,sg2);
  minn(n,arr1);
  Label3->Caption="ГЊГЁГ*ГЁГ*ëüГ*ûé ýëåìåГ*ГІ= "+FloatToStr(min);
  Label4->Caption="Íîìåð ГЊГЁГ*ГЁГ*ëüГ*îãî ýëåìåГ*ГІГ*= "+IntToStr(kn);
  float sm=0;
  int nm=find_minus(n,arr1);
  if(nm>=0)
  {
    sm=summa_after_first_minus(nm,n,arr1);
    Label5->Caption="ÑóììГ* ïîñëå ïåðâîãî îòðèöГ*òåëüГ*îãî = "+FloatToStr(sm);
  }
  int s=sum_d(n,arr);
    Label6->Caption="ГЊГЁГ*ГЁГ¬Г*ëüãГ*Гї ñóììГ* äèГ*ГЈГ®Г*Г*ëåé = "+IntToStr(s);
   Label7->Caption="Г*îìåðГ* ñòîëáöîâ: ";
 int elem=Edit3->Text.ToIntDef(0);
   element(elem,arr,n);
 }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  Application->Terminate();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
  sort(n,arr);
  str(n,arr,sg1);
 
 // puzirik(arr,n);
 
}
//---------------------------------------------------------------------------
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2012, 09:09     Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька
Посмотрите здесь:

Отсортировать массив чисел методом пузырька C++
C++ Отсортировать одномерный массив действительных чисел методом пузырька (по убыванию)
Сформировать из элементов матрицы меньше нуля одномерный массив, отсортировать его по убыванию методом выбора C++
C++ Как отсортировать двумерный массив по возрастанию методом пузырька?
Получить из исходного массив положительных чисел и отсортировать его по возрастанию методом пузырька C++
C++ Дан массив из N целых чисел. Отсортировать его по убыванию элементов методом пузырька
Дан одномерный массив А, состоящий из N элементов. Отсортировать все его элементы улучшенным методом пузырька C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
20.05.2012, 09:26     Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька #2
Ну для начала исправьте сортировку пузырьком:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void puzirik(int *mass,int n)
 {
   int tmp;
 
   for(i=0;i<n;i++)
   {
    for (j=1;j<n;j++)
      {
        if (mass [ j ]<mass[ j - 1 ])
        {
          tmp=mass[ j ];
          mass[ j ]=mass[ j - 1 ];
          mass[ j - 1 ]=tmp;
         }
        }
      }
     }
Darck Lord
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 5
20.05.2012, 09:30  [ТС]     Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька #3
ага понял......а что тогда во вторых??
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
20.05.2012, 09:38     Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька #4
C++
1
2
3
4
5
6
7
8
9
for ( int i = 0, h = 0; i < n; i++ )
   for ( int j = 0; j < n; j++, h++ )
      mas[ h ] = a[ i ][ j ];
 
puzirik( mas, k );
 
for ( int i = 0, h = 0; i < n; i++ )
   for ( int j = 0; j < n; j++, h++ )
      a[ i ][ j ] = mas[ h ];
Вот и вся сортировка.
Darck Lord
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 5
20.05.2012, 09:46  [ТС]     Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька #5
спасибо......только одно но у меня в двух мерный массив должно вернуть так чтоб самый первый элемент был минимальный всего массива, а последний элемент максимальный. в общем функция должна отсортировать одномерный массив а потом по n элементам вернуть в строчки двухмерного массива.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
20.05.2012, 09:47     Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька #6
Так и получится с кодом выше.
Darck Lord
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 5
20.05.2012, 09:49  [ТС]     Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька #7
ну у меня получается совсем по другому.....
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
20.05.2012, 10:16     Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька #8
Значит где то что еще нужно смотреть, вот вывод моего кода.

Добавлено через 10 минут
Вот так должна выглядеть Ваша функция.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void sort(int n,int **a)
{
  int *mas;
  int k=n*n;
  mas=new int [k];
  
  for(i=0, h = 0;i<n;i++)
   for(j=0;j<n;j++, h++)
      mas[h]=a[i][j];
 
  puzirik(mas,k);
 
  for(i=0, h = 0;i<n;i++)
   for(j=0;j<n;j++, h++)
      a[i][j]=mas[h];
 
    delete []mas;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2012, 11:34     Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька
Еще ссылки по теме:

C++ Отсортировать массив методом минимального элемента и методом пузырька
C++ Отсортировать массив по убыванию методом пузырька
Отсортировать одномерный динамичный массив методом пузырька C++
C++ Ввести двумерный массив и отсортировать его методом вставки
C++ Заполнить случайныйми числами одномерный динамический массив; отсортировать его методом пузырьковой сортировки

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

Или воспользуйтесь поиском по форуму:
Darck Lord
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 5
20.05.2012, 11:34  [ТС]     Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька #9
Спасибо большое за помощь всё заработало.
Yandex
Объявления
20.05.2012, 11:34     Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька
Ответ Создать тему
Опции темы

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