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

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

Восстановить пароль Регистрация
 
Violetta
0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 53
24.02.2014, 23:43     Отсортируйте каждую строку массива по убыванию. Исправить код #1
Добрый вечер)
Помогите пожалуйста разобраться
вроде все норм должно быть, а выводит муть, уже крыша поехала((
Объявите двумерный вещественный массив, в котором 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 ();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2014, 23:43     Отсортируйте каждую строку массива по убыванию. Исправить код
Посмотрите здесь:

C++ Отсортировать каждую строку матрицы по убыванию элементов методом пузырька
Отсортируйте массив по убыванию и выведите на экран C++
C++ Матрица (упорядочить каждую строку по убыванию элементов)
C++ Из промежутка [a;b) отсортируйте каждый столбец массива по убыванию методом Шелла
Прокомментировать каждую строку кода (или хотя бы каждую функцию) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
24.02.2014, 23:56     Отсортируйте каждую строку массива по убыванию. Исправить код #2
у меня ваш код на нормальном компиляторе вообще не работает
C++
1
float **a;
вы тут объявляете переменную типа указатель на массив указателей, но памяти не выделяете и обращаетесь по индексам которые в никуда указывают и пишете туда какие-то данные, от того и проблемы, отчасти.
Violetta
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
на ноуте тоже не открывает(
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 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
Violetta
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 ();
}
Yandex
Объявления
04.03.2014, 22:44     Отсортируйте каждую строку массива по убыванию. Исправить код
Ответ Создать тему
Опции темы

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