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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Darck Lord
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 5
#1

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

20.05.2012, 09:09. Просмотров 1141. Ответов 8
Метки нет (Все метки)

всем привет. народ помогите с прогой, конкретно с функцией 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++):

Дан одномерный массив А, состоящий из N элементов. Отсортировать все его элементы улучшенным методом пузырька - C++
Дан одномерный массив А, состоящий из N элементов. Отсортировать все его элементы улучшенным методом пузырька

Отсортировать одномерный динамичный массив методом пузырька - C++
Используя команды из данного кода(или просто помогите исправить код) #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt;...

Как отсортировать двумерный массив по возрастанию методом пузырька? - C++
Напишите пожалуйста код. Нигде не могу найти(

Отсортировать одномерный массив действительных чисел методом пузырька (по убыванию) - C++
Отсортировать одномерный массив действительных чисел методом пузырька (по убыванию)

Получить из исходного массив положительных чисел и отсортировать его по возрастанию методом пузырька - C++
2. Дан массив N целых чисел. Получить из него массив положительных чисел и отсортировать его по возрастанию методом пузырька

Дан массив из N целых чисел. Отсортировать его по убыванию элементов методом пузырька - C++
Дан массив из N целых чисел. Отсортировать его по убыванию элементов методом пузырька

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
20.05.2012, 09:47 #6
Так и получится с кодом выше.
Darck Lord
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 5
20.05.2012, 09:49  [ТС] #7
ну у меня получается совсем по другому.....
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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;
}
Darck Lord
0 / 0 / 0
Регистрация: 20.05.2012
Сообщений: 5
20.05.2012, 11:34  [ТС] #9
Спасибо большое за помощь всё заработало.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2012, 11:34
Привет! Вот еще темы с ответами:

Ввести двумерный массив и отсортировать его методом вставки - C++
Суть программы в том чтобы ввести двумерный массив и отсортировать его методом вставки. Но вот что выдает отладчик при вызове функции...

Заполнить случайныйми числами одномерный динамический массив; отсортировать его методом пузырьковой сортировки - C++
В плюсах полный ноль...помогите пожалуйста создать одномерный массив через new и delete его сортировку пузырьком и вывод. Заранее спасибо.

Сформировать из элементов матрицы меньше нуля одномерный массив, отсортировать его по убыванию методом выбора - C++
Дан двумерный массив N X M. Сформировать из элементов меньше нуля одномерный массив отсортировать его по убыванию методом выбора

Отсортировать массив методом минимального элемента и методом пузырька - C++
Друзья помогите! Очень мало времени на поиски подобного на сайте... А (100) -Случайные числа. Отсортировать массив методом минимального...


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

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

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