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

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

Войти
Регистрация
Восстановить пароль
 
 
Анатолий171
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 18
#1

Упорядочить строки матрицы лексикографически по неубыванию первых k элементов строки. - C++

30.06.2014, 19:46. Просмотров 915. Ответов 28
Метки нет (Все метки)

Помогите решить задачу, пожалуйста

Упорядочить строки матрицы D ( m, n) лексикографически по неубыванию первых k элементов строки.





Вот этот C++ код

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
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <clocale>
#include <ctime>
#include <algorithm>
 
bool comp(int* v1, int* v2)
{
    return *v1 < *v2;
}
 
int main()
{
    setlocale(LC_ALL,"russian");
    int n, m;
    int **mas = NULL;
    srand(time(NULL));
    printf ("\n Введите размерность таблицы(m,n): ");
    scanf("%d%d", &m, &n);
    mas = new int * [n];
 
    for (int i=0; i < n; i++)
    {
        mas[i] = new int [m];
        for ( int k = 0; k < m; k++)
        {
            mas[i][k] = rand()%100;
            printf ("\t%d ", mas[i][k]);
        }
        printf ("\n");
    }
 
    std::sort(mas, mas + m, &comp);
    printf("\nSort matrix: \n");
    for (int i=0; i < n; i++)
    {
        for ( int k = 0; k < m; k++)
            printf ("\t%d ", mas[i][k]);
        printf ("\n");
    }
 
    system("Pause");
    return EXIT_SUCCESS;



Дело в том, что у меня стоит C++ 3.1
И не читает printf , #include <ctime> без " .H "
Он понимает cout <<
cin >>
#include < .h>


Вы можете подкорректировать код и правильный ли он вообще пожалуйта
помогите мне

Добавлено через 31 минуту
Или код должен быть таким?
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
#include <stdafx.h>
#include <stdlib.h>
#include <conio.h>
 
void main()
{
    int mas[ 50 ][ 50 ]; 
 
    
 
    printf( "Vvedite razmer matrici\n" );
    srand( 1 );
 
    
 
    int i, j, a, b; scanf( "%d  %d", &a, &b ); 
    for( i = 0; i < a; i++ )
    {
        for( j = 0; j < b; j++ )
        {
 
            
 
            mas[ i ][ j ] = ( double )rand() / ( RAND_MAX + 1 ) * 99 + 1; 
 
        
 
            printf( "%3d", mas[ i ][ j ] );
        }
        printf("\n");
    }
    int x,y;
 
 
 
    for( y = 0; y < a; y++ )
    {
        for ( i = 0; i < ( a - 1 ); i++ )
        {
            if( mas[ i ][ 0 ] > mas[ i + 1 ][ 0 ] )
            {
                for( j = 0 ; j < b; j++ )
                {
                    x = mas[ i ][ j ];
                    mas[ i ][ j ] = mas[ i + 1 ][ j ];
                    mas[ i + 1 ][ j ] = x;
                }
            }
        }
    }
    printf("\n");
 
    
 
    for( i = 0; i < a; i++ )
    {
        for( j = 0; j < b; j++ )
        {
            printf( "%3d", mas[ i ][ j ] );
        }
        printf("\n");
    }
    getch();
}
Помогите прошу, просто я к сожалению не понимаю
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2014, 19:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Упорядочить строки матрицы лексикографически по неубыванию первых k элементов строки. (C++):

Упорядочить строки матрицы D (m. n) Лексикографически по неубыванию первых k элементов строки - C++
Помогите решить задачу C++ пожалуйста, пожалуйста Упорядочить строки матрицы D (m. n) Лексикографически по неубыванию первых k...

Упорядочить строки матрицы по неубыванию их первых элементов - C++
Написать программу: Дан двумерный массив. Упорядочить его строки по неубыванию их первых элементов.

Упорядочить строки матрицы по неубыванию суммы их элементов - C++
дана вещественная матрица размером N*M. Упорядочить ее строки по неубыванию суммы их элементов

Упорядочить строки матрицы по неубыванию сумм положительных элементов - C++
Переформировать матрицу таким образом,что бы ее строки располагались в порядке неубывания сумм их положительных элементов.

Упорядочить строки матрицы по неубыванию их наибольших элементов (Delphi->C++) - C++
Дана матрица размером NxM. Упорядочить ее строки по неубыванию их наибольших элементов. program N60094766; {$APPTYPE CONSOLE} ...

Упорядочить строки матрицы по возрастанию их первых элементов - C++
Задана матрица целых чисел. Упорядочить ее строки по возрастанию их первых элементов. Использовать функции.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Alex5
1052 / 715 / 105
Регистрация: 12.04.2010
Сообщений: 1,810
30.06.2014, 21:39 #16
Цитата Сообщение от Анатолий171 Посмотреть сообщение
Последняя просто зависает
Чему равны a, b, когда зависает?
Анатолий171
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 18
30.06.2014, 21:43  [ТС] #17
Ничему они не равны, программа зависет, написана ошибка

Ошибка в приложении
NONAME01 вызвал ошибку при использовании стека в модуле KRNL386.EXE в 0001:2FC4.

и написано, нажмите закрыть
nmcf
5310 / 4630 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
30.06.2014, 21:45 #18
Так может проблема в самой среде, а не в программе?
Анатолий171
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 18
30.06.2014, 22:04  [ТС] #19
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
#include <iostream.h>
main()
{
int i;
float y,x,x1,b1,b2,b3,b;
cout<<"Vvedite x1"<<endl;
cin>>x1;
cout<<"Vvedite b1 b2 b3"<<endl;
cin>>b1>>b2>>b3;
for(i=1;i<=10-1;i++) x=x+0.5;
x=x+x1;
b=b1+b2+b3;
y=x+b;
cout<<"y="<<y<<endl;
return 0;
}
 
 
 
 
#include<iostream.h>
#include <stdio.h>
#include <conio.h>
void main()
{
    int osn, 
        n,   
        cn,  
        r;   
             
    char st[17];
    int i;
 
    cout<<"Vvedite hislo v desatihnoy sisteme"<<endl;
    cin>>n;
    cout<<"Vvedite osnovanie sistemi shisleniya"<<endl;
    cin>>osn;
 
    cn = n;
    st[16] ='\0';
    i = 15;
    do
    {
      r = n  % osn;
      n = n / osn;
      st[i--] = r + 48;
    }
    while ( n > 0);
 
    i++;
    int j = 0;
    while(st[i]) st[j++] = st[i++];
    st[j] = '\0';
 
    st[i--] = ' ';
    cout <<" Desatihnoe hislo "<<cn<<" sootvetstvyet hisly "<<st<<" v "<<osn<<"-noy sisteme shisleniya"<<endl;
    getch();
}
Я так не думаю так как я создавал и мне помогали создавать маленькие програмки и я создавал там же программу шифрования, правда немного кривую, но все же они все работали

А эта нет

Добавлено через 14 минут
Нет, пробую и пробую, пишет ошибку... В стеке
Alex5
1052 / 715 / 105
Регистрация: 12.04.2010
Сообщений: 1,810
30.06.2014, 22:05 #20
Цитата Сообщение от Анатолий171 Посмотреть сообщение
Последняя просто зависает
Программа не "просто зависает". Она зависает в какой-то строке, в результате выполнения какой-то команды. (Может быть, даже, до начала выполнения функции main().)
Такая программа зависает?
C++
1
2
3
4
5
6
int main()
{
    int mas[ 50 ][ 50 ]; 
 
    return 0;
}
Такая зависает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int mas[ 50 ][ 50 ]; 
 
    printf( "Vvedite razmer matrici\n" );
    srand( 624 );
    //srand( 1 );
 
    int i, j, a, b; 
    scanf( "%d  %d", &a, &b ); 
 
    return 0;
}
А такая?
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
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int mas[ 50 ][ 50 ]; 
 
    printf( "Vvedite razmer matrici\n" );
    srand( 624 );
    //srand( 1 );
 
    int i, j, a, b; 
    scanf( "%d  %d", &a, &b ); 
 
    for( i = 0; i < a; i++ )
    {
        for( j = 0; j < b; j++ )
        {
            mas[ i ][ j ] = ( double )rand() / ( RAND_MAX + 1 ) * 99 + 1; 
            printf( "%3d", mas[ i ][ j ] );
        }
        printf("\n");
    }
    return 0;
}
Анатолий171
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 18
30.06.2014, 22:18  [ТС] #21
Треться вызывает ошибку)

Добавлено через 46 секунд
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
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int mas[ 50 ][ 50 ]; 
 
    printf( "Vvedite razmer matrici\n" );
    srand( 624 );
    //srand( 1 );
 
    int i, j, a, b; 
    scanf( "%d  %d", &a, &b ); 
 
    for( i = 0; i < a; i++ )
    {
        for( j = 0; j < b; j++ )
        {
            mas[ i ][ j ] = ( double )rand() / ( RAND_MAX + 1 ) * 99 + 1; 
            printf( "%3d", mas[ i ][ j ] );
        }
        printf("\n");
    }
    return 0;
}
Вот эта вызывает ошибку

Добавлено через 2 минуты
А предыдущие 2 маленькие работают
Alex5
1052 / 715 / 105
Регистрация: 12.04.2010
Сообщений: 1,810
30.06.2014, 22:27 #22
Цитата Сообщение от Анатолий171 Посмотреть сообщение
Вот эта вызывает ошибку
А если убрать строки
C++
1
2
mas[ i ][ j ] = ( double )rand() / ( RAND_MAX + 1 ) * 99 + 1; 
printf( "%3d", mas[ i ][ j ] );
будет ошибка? Какая именно строка вызывает ошибку?

Вот как работает Ваша программа на ideone . (Только там пришлось изменить void main() на int main(), и #include поменять.)
Анатолий171
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 18
30.06.2014, 22:59  [ТС] #23
Если убрать то, что вы сказали, то она просто требует размер матрицы.

Я ввожу 3

потом еще раз любую цифру и она зависает

Добавлено через 14 минут
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
#include <stdio.h>
#include <stdlib.h>
int main()
{
   int mas[ 50 ][ 50 ]; 
   printf( "Vvedite razmer matrici\n" );
   srand( 624 );
   //srand( 1 );
 
   int i, j, a, b; 
    scanf( "%d  %d", &a, &b ); 
    //a = 20; b = 4;
    //a = 7; b = 4;
 
    for( i = 0; i < a; i++ )
    {
        for( j = 0; j < b; j++ )
        {
            mas[ i ][ j ] = ( double )rand() / ( RAND_MAX + 1 ) * 99 + 1; 
            printf( "%3d", mas[ i ][ j ] );
        }
        printf("\n");
    }
    int x,y;
    for( y = 0; y < a; y++ )
    {
        for ( i = 0; i < ( a - 1 ); i++ )
        {
            if( mas[ i ][ 0 ] > mas[ i + 1 ][ 0 ] )
            {
                for( j = 0 ; j < b; j++ )
                {
                    x = mas[ i ][ j ];
                    mas[ i ][ j ] = mas[ i + 1 ][ j ];
                    mas[ i + 1 ][ j ] = x;
                }
            }
        }
    }
    printf("\n");
 
    for( i = 0; i < a; i++ )
    {
        for( j = 0; j < b; j++ )
        {
            printf( "%3d", mas[ i ][ j ] );
        }
        printf("\n");
    }
    system("pause");
    return 0;
}
Я включил это и у меня 2 ошибки

NO module definition file specified usingdefaults


error undefined symbol_system in module и путь к файлу моему

Добавлено через 12 минут
На сайте там , где вы сказали все выходит очень хорошо
А у меня...
Alex5
1052 / 715 / 105
Регистрация: 12.04.2010
Сообщений: 1,810
30.06.2014, 23:07 #24
Цитата Сообщение от Анатолий171 Посмотреть сообщение
Вот эта вызывает ошибку
Цитата Сообщение от Анатолий171 Посмотреть сообщение
Я ввожу 3
потом еще раз любую цифру и она зависает
Так Вы вводите два числа? Может быть, программа просто ожидает ввода?
Что будет выведено на экран?
C++
1
2
    scanf( "%d  %d", &a, &b ); 
    printf( "\n  a == %d   b == %d \n", a, b );
А если убрать ввод с клавиатуры?
C++
1
2
    //scanf( "%d  %d", &a, &b ); 
    a = 20; b = 4;
Анатолий171
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 18
30.06.2014, 23:10  [ТС] #25
Нет, я ввел 2 чила. После ввода второго программа бац и зависает
Alex5
1052 / 715 / 105
Регистрация: 12.04.2010
Сообщений: 1,810
30.06.2014, 23:58 #26
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Анатолий171 Посмотреть сообщение
Вот эта вызывает ошибку
Цитата Сообщение от Анатолий171 Посмотреть сообщение
Нет, я ввел 2 чила. После ввода второго программа бац и зависает
Анатолий171, Вы можете сами найти и исправить ошибку. А можете не искать и не исправлять. Сами можете выбрать подходящий Вам вариант.
Анатолий171
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 18
01.07.2014, 12:11  [ТС] #27
Я буду искать, но я скоро пойду спать, потом на свжую голову может что придет в голову) Спасибо и на этом

Добавлено через 11 часов 37 минут
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
#include <stdio.h>
 
#include <stdlib.h>
 
int main()
 
{
 
   int mas[ 50 ][ 50 ]; 
 
 
 
    
 
 
 
    printf( "Vvedite razmer matrici\n" );
 
    srand( 624 );
 
    //srand( 1 );
 
 
 
    
 
 
 
    int i, j, a, b; 
 
    scanf( "%d  %d", &a, &b ); 
 
    //a = 20; b = 4;
 
    //a = 7; b = 4;
 
 
 
    for( i = 0; i < a; i++ )
 
    {
 
        for( j = 0; j < b; j++ )
 
        {
 
 
 
            
 
 
 
            mas[ i ][ j ] = ( double )rand() / ( RAND_MAX + 1 ) * 99 + 1; 
 
 
 
        
 
 
 
            printf( "%3d", mas[ i ][ j ] );
 
        }
 
        printf("\n");
 
    }
 
    int x,y;
 
 
 
 
 
 
 
    for( y = 0; y < a; y++ )
 
    {
 
        for ( i = 0; i < ( a - 1 ); i++ )
 
        {
 
            if( mas[ i ][ 0 ] > mas[ i + 1 ][ 0 ] )
 
            {
 
                for( j = 0 ; j < b; j++ )
 
                {
 
                    x = mas[ i ][ j ];
 
                    mas[ i ][ j ] = mas[ i + 1 ][ j ];
 
                    mas[ i + 1 ][ j ] = x;
 
                }
 
            }
 
        }
 
    }
 
    printf("\n");
 
 
 
    
 
 
 
    for( i = 0; i < a; i++ )
 
    {
 
        for( j = 0; j < b; j++ )
 
        {
 
            printf( "%3d", mas[ i ][ j ] );
 
        }
 
        printf("\n");
 
    }
 
 
 
 
 
    system("pause");
 
    return 0;
 
}
Почему у вас получилось 2 матрицы , а не одна?
http://ideone.com/sQz43N

Добавлено через 1 минуту
Чтобы матрица была из букв нужно вместо int написать char?

Добавлено через 28 минут
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
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
 
void main()
{
char mas[ 50 ][ 50 ]; 
 
//инициализируем массив
 
cout << "Vvedite razmer matrici\n";
srand( 1 );
 
//получаем от пользователя реальные размеры массива
 
char i, j, a, b; cin >> a >> b; 
for( i = 0; i < a; i++ )
{
for( j = 0; j < b; j++ )
{
 
//заполняем матрицу с помощью генератора псевдослучайных чисел
 
mas[ i ][ j ] = ( char )rand()  * 99 + 20;
 
//выводим исходную матрицу
 
cout<< mas[ i ][ j ] ;
}
cout<<"\n";
}
char x,y;
 
//применяем пузырьковый метод сортировки 
 
for( y = 0; y < a; y++ )
{
for ( i = 0; i < ( a - 1 ); i++ )
{
if( mas[ i ][ 0 ] > mas[ i + 1 ][ 0 ] )
{
for( j = 0 ; j < b; j++ )
{
x = mas[ i ][ j ];
mas[ i ][ j ] = mas[ i + 1 ][ j ];
mas[ i + 1 ][ j ] = x;
}
}
}
}
cout<<"\n";
 
//выводим получившуюся матрицу на экран
 
for( i = 0; i < a; i++ )
{
for( j = 0; j < b; j++ )
{
cout<< mas[ i ][ j ] ;
}
cout<<"\n";
}
getch();
}
Вот так будет верно?

Просто я ввожу размер матрицы
и потом у меня полно разных символов выводится
Alex5
1052 / 715 / 105
Регистрация: 12.04.2010
Сообщений: 1,810
01.07.2014, 20:14 #28
Цитата Сообщение от Анатолий171 Посмотреть сообщение
у меня полно разных символов выводится
Цитата Сообщение от Анатолий171 Посмотреть сообщение
Почему у вас получилось 2 матрицы , а не одна?
Смотрите, где в программе встречается
C++
1
printf( "%3d", mas[ i ][ j ] );
Когда параметр у operator << имеет тип char, выводится символ, код которого равен этому числу.
C++
1
2
3
4
5
6
7
8
9
10
11
12
    for( char c = 70; c < 80; ++c )
        cout << "    " << (int)c << "    " << c << endl;
    //    70    F
    //    71    G
    //    72    H
    //    73    I
    //    74    J
    //    75    K
    //    76    L
    //    77    M
    //    78    N
    //    79    O
Анатолий171
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 18
03.07.2014, 10:17  [ТС] #29
Я разобрался))) Спасибо)) Но у меня ворос, это ведб программа Упорядочивает строки матрицы лексикографически по неубыванию первых k элементов строки ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2014, 10:17
Привет! Вот еще темы с ответами:

Упорядочить строки матрицы по возрастанию их первых элементов - C++
В работе память для массива должна выделяться динамически. На экран выводить исходные данные и результат. Дана матрица размером...

Упорядочить строки матрицы по возрастанию их первых элементов - C++
очень срочно на завтра нужен код этой задачи. &quot; дана матрица размером NxM .Упорядочить ее строки по возрастанию их первых элементов.&quot; ...

Упорядочить строки матрицы в порядке неубывания их первых элементов - C++
Всем привет! Помогите пожалуйста решить задачу, хз как делать :) Дана матpица A. Упорядочить строки матрицы в порядке не убывания их...

Упорядочить строки матрицы в порядке неубывания их первых элементов. - C++
1 курс, 1 семестр. Лекции читают плохо, пытаюсь разобраться сама, все время вылазят ошибки. Задачи вроде бы легкие, стыдно. Но может быть...


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

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

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