0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 53
1

Отсортируйте каждую строку массива по убыванию. Исправить код

24.02.2014, 23:43. Показов 1382. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер)
Помогите пожалуйста разобраться
вроде все норм должно быть, а выводит муть, уже крыша поехала((
Объявите двумерный вещественный массив, в котором n  m элементов. Заполните его числами, полученными по закономерности: (в проге есть) . Отсортируйте каждую строку массива по убыванию. Распечатайте его в виде таблицы с точностью до 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
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
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
 
int i,j;
void outArr(float **arr, int MAXM, int MAXN)
{
   for (i=0;i<MAXN;i++){
   for (j=0;j<MAXM;j++){
    printf("%4.0f",arr[i][j]," ");
   }
   printf("\n");
  }
}
//*************************************************
// generater
void generateArr(float **arr, int MAXM, int MAXN)
{
  float sum=0;
 
  for (i=0;i<MAXN;i++){
   for (j=0;j<MAXM;j++)
   {
    if (j==0) sum=0;
    arr[i][j]=(float)sum+(i+1)*(j+5)/(i+j+1);
    sum=(float)sum+arr[i][j];
 
    }
   }
   outArr(arr, MAXM,MAXN);
 
 
    }
 
 
 
//*******************************************8
//sortirovka
 
void bubbleSort(float **arr, int MAXM, int MAXN){
  float t;
  for (int k=0;k<MAXN;k++)
  {
  for (i=0;i<MAXM;i++)
  {
    for (j=MAXM-1; j>i;j--)
    {
     if (arr[k][j]<arr[k][j+1])
       {t=arr[k][j];
    arr[k][j]=arr[k][j+1];
    arr[k][j+1]=t;
       }
      }
    }
  }
 
  outArr(arr,MAXM,MAXN);
}
 
void main()
{
   int MAXM, MAXN;
   float **a;
   int b=1;
   clrscr();
// proverka na vvod
//********************************************************
printf ("vvedite rasryadnost' matricy\n");
do
{
b=1;
printf ("M\n");
cin >> MAXM;
if (MAXM <0) b=0;
}
while (b==0);
 
do
{
b=1;
printf ("N\n");
cin >> MAXN;
if (MAXN <0) b=0;
}
while (b==0);
//****************************************************
// proga
   cout<<"Generated array\n";
 
   generateArr(a,MAXM, MAXN);
    cout<<"After sorting\n";
   bubbleSort(a,MAXM,MAXN);
   getch ();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.02.2014, 23:43
Ответы с готовыми решениями:

Отсортируйте первую половину массива по возрастанию, а вторую по убыванию
Создайте целочисленный массив А, содержащий 10 различных чисел. Отсортируйте первую половину...

Отсортируйте первую половину массива по возрастанию, а вторую – по убыванию
Помогите решить задачу пожалуйста. Долго сижу и не могу сделать. Буду благодарен от всего сердца ;(...

Отсортируйте первую половину массива по возрастанию, а вторую по убыванию
Решите задачи данной группы, оформив решение в виде процедур генерации, вывода и обработки...

Отсортируйте первую половину массива по возрастанию, а вторую по убыванию
Дан массив с четным количеством элементов. Отсортируйте первую половину массива по возрастанию, а...

4
100 / 100 / 47
Регистрация: 19.11.2012
Сообщений: 195
24.02.2014, 23:56 2
у меня ваш код на нормальном компиляторе вообще не работает
C++
1
float **a;
вы тут объявляете переменную типа указатель на массив указателей, но памяти не выделяете и обращаетесь по индексам которые в никуда указывают и пишете туда какие-то данные, от того и проблемы, отчасти.
0
0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 53
25.02.2014, 00:21  [ТС] 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
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
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
 
int i,j;
void outArr(float **arr, int MAXM, int MAXN)
{
   for (j=0;j<MAXN;j++){
   for (i=0;i<MAXM;i++){
    printf("%4.0f",arr[j][i]," ");
   }
   printf("\n");
  }
}
//*************************************************
// generater
void generateArr(float **arr, int MAXM, int MAXN)
{
  float sum=0;
 
  for (i=0;i<MAXN;i++){
   for (j=0;j<MAXM;j++)
   {
    if (j==0) sum=0;
    arr[i][j]=(float)sum+(i+1)*(j+5)/(i+j+1);
    sum=(float)sum+arr[i][j];
 
    }
   }
   outArr(arr, MAXM,MAXN);
 
 
    }
 
 
 
//*******************************************8
//sortirovka
 
void bubbleSort(float **arr, int MAXM, int MAXN){
 // float t;
  for (int k=0;k<MAXN;k++)
  {
  for (i=0;i<MAXM;i++)
  {
    for (j=MAXM-1; j>=i;j--)
    {
     if (arr[k][j]<arr[k][j+1])
       {float t=arr[k][j];
    arr[k][j]=arr[k][j+1];
    arr[k][j+1]=t;
       }
    }
     //  printf("%4.0f",arr[k][i]);
   }
 //  printf("\n");
    }
 
 
  outArr(arr,MAXM,MAXN);
}
 
void main()
{
   int MAXM, MAXN;
   float **a;
   int b=1;
   clrscr();
// proverka na vvod
//********************************************************
printf ("vvedite rasryadnost' matricy\n");
do
{
b=1;
printf ("M\n");
cin >> MAXM;
if (MAXM <0) b=0;
}
while (b==0);
 
do
{
b=1;
printf ("N\n");
cin >> MAXN;
if (MAXN <0) b=0;
}
while (b==0);
//****************************************************
// proga
   cout<<"Generated array\n";
 
   generateArr(a,MAXM, MAXN);
    cout<<"After sorting\n";
   bubbleSort(a,MAXM,MAXN);
   getch ();
}
Добавлено через 1 минуту
а как по другому??
я пишу на нетбуке 32x
на ноуте тоже не открывает(
0
100 / 100 / 47
Регистрация: 19.11.2012
Сообщений: 195
25.02.2014, 00:35 4
если windows, то советую программировать в Visual Studio Express(2008 даже регистрировать ненужно, для начала сойдет) Бесплатные среды (IDE) для программирования на С/С++

а так вот подправил слегка код, с памятью и выводом теперь все в порядке, генератор не менял:

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
#include <iostream>
using  namespace std;
 
void outArr(float **arr, int MAXM, int MAXN) {
    for (int i=0;i<MAXN;i++) {
        for (int j=0;j<MAXM;j++)
            printf("%4.3f ",arr[i][j]);
        printf("\n");
    }
}
void generateArr(float **arr, int MAXM, int MAXN) {
    float sum=0;
    for (int i=0;i<MAXN;i++) {
        for (int j=0;j<MAXM;j++) {
            if (j==0)
                sum=0;
            arr[i][j]=(float)sum+(i+1)*(j+5)/(i+j+1);
            sum=(float)sum+arr[i][j];
        }
    }
}
void bubbleSort(float **arr, int MAXM, int MAXN){
    float t;
    for (int k=0;k<MAXN;k++) {
        for (int i=0;i<MAXM;i++) {
            for (int j=MAXM-1; j>=i;j--) {
                if (arr[k][j]<arr[k][j+1]) {
                    t=arr[k][j];
                    arr[k][j]=arr[k][j+1];
                    arr[k][j+1]=t;
                }
            }
        }
    }
}
 
int main() {
   int MAXM, MAXN;
   float **a;
   int b=1;
// proverka na vvod
//********************************************************
    printf ("vvedite rasryadnost' matricy\n");
    do {
        b=1;
        printf ("M\n");
        cin >> MAXM;
        if (MAXM <1)
            b=0;
    } while (b==0);
 
    do {
        b=1;
        printf ("N\n");
        cin >> MAXN;
        if (MAXN <1)
            b=0;
    } while (b==0);
    // выделение памяти
    a=new float* [MAXN];
    for(int i=0; i<MAXN; i++)
        a[i]=new float[MAXM];
//****************************************************
// proga
    cout<<"Generated array\n"; 
    generateArr(a,MAXM, MAXN);
    outArr(a, MAXM,MAXN);
 
    cout<<"After sorting\n";
    bubbleSort(a,MAXM,MAXN);
    outArr(a, MAXM,MAXN);
 
    // освобождение памяти
    for(int i=0; i<MAXN; i++)
        delete [] a[i];
    delete [] a;
    getchar();
    getchar();
}
проверял для 5*5
1
0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 53
04.03.2014, 22:44  [ТС] 5
TrueBit, спасибо )
только теперь например если ввести матрицу 20*20 то он плохо выводит(
а cout не работает почему -то(
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
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
 
int i,j;
void outArr(float **arr, int MAXM, int MAXN) //pechat massiva
{
   for (j=0;j<MAXM;j++){
   for (i=0;i<MAXN;i++){
    printf("%7.3f",arr[j][i]," ");
   }
   printf("\n");
  }
}
//*************************************************
// generater
void generateArr(float **arr, int MAXM, int MAXN)
{
  float sum=0;
 
  for (i=0;i<MAXM;i++){
   for (j=0;j<MAXN;j++)
   {
    if (j==0) sum=0;
    arr[i][j]=(float)sum+(i+1)*(j+5)/(i+j+1);
    sum=(float)sum+arr[i][j];
 
    }
   }
   outArr(arr, MAXM,MAXN);
 
 
    }
 
 
 
//*******************************************8
//sortirovka
 
void bubbleSort(float **arr, int MAXM, int MAXN){
 // float t;
  for (int k=0;k<MAXM;k++)
  {
  for (i=0;i<MAXN;i++)
  {
    for (j=MAXN-2; j>=i;j--)
    {
     if (arr[k][j]<arr[k][j+1])
       {float t=arr[k][j];
    arr[k][j]=arr[k][j+1];
    arr[k][j+1]=t;
       }
    }
       }
     }
 
 
  outArr(arr,MAXM,MAXN);
}
 
void main()
{
   int MAXM, MAXN;
   float **a;
   int b=1;
   clrscr();
// proverka na vvod
//********************************************************
printf ("vvedite rasryadnost' matricy\n");
 
printf ("M ne bolee 20\n");
while ((!(cin>>MAXM)) || (MAXM<=0)|| (MAXM>20))
{
cin.clear();
while (cin.get()!='\n');
printf ("Oshibka vvoda!\n");
printf ("Povtorite vvod\n");
}
 
printf("N ne bolee 20\n");
while ((!(cin>>MAXN)) || (MAXN<=0)|| (MAXN>20))
{
cin.clear();
while (cin.get()!='\n');
printf ("Oshibka vvoda!\n");
printf ("Povtorite vvod\n");
}
 
 
//****************************************************
// proga
   cout<<"Generated array\n";
 
   generateArr(a,MAXM, MAXN);
    cout<<"After sorting\n";
   bubbleSort(a,MAXM,MAXN);
   getch ();
}
0
04.03.2014, 22:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2014, 22:44
Помогаю со студенческими работами здесь

Отсортируйте первую половину массива по убыванию, а вторую по возрастанию
Дан массив А состоящий из 15 целых чисел. Отсортируйте первую половину массива по убыванию, а...

Из промежутка [a;b) отсортируйте каждый столбец массива по убыванию методом Шелла
Объявите двумерный вещественный массив, в котором n x m элементов. Выполните генерацию массива...

Массив: Отсортируйте первую половину массива по возрастанию, а вторую по убыванию...
Создайте массив,содержащий 20 различных целых чисел.Отсортируйте первую половину массива по...

Отсортируйте отрицательные элементы двумерного массива по строкам, по убыванию, методом пузырька
Есть решенная задача, проверьте пожалуйста. ( сортироваться должны только отрицательные,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru