Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Heidel
115 / 115 / 39
Регистрация: 11.10.2011
Сообщений: 649

Ошибка в программе с сортировкой массива

14.10.2011, 09:51. Показов 1022. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание.
1. Получить матрицу А(m x n), образованную по закону А (ij) = (i+j)*tan(j).
2. Получить матрицу В из матрицы А, упорядочив элементы в строках матрицы А по убыванию.

Программа
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
#include <iostream.h>
#include <math.h>
 
int main ( )
{
    double A [6][6];
    int i, j;
 
    cout <<"Matriza A\n\n" ;
 
    for (i=0; i<6; i++)
    {
        for (j=0; j<6; j++)
        {
            A [i][j] = (i+j)*tan (j);
            cout << A [i][j] << "  ";
        }
        cout <<"\n" ;
    }
 
cout <<"\n" ;
 
 
double B [6][6];
 
cout <<"Matriza B\n\n" ;
 
    for (i=0; i<6; i++)
    {
        for (j=0; j<6; j++)
        {
            B [i][j] = A [i][j];
            cout << B [i][j] << "  ";
        }
    cout <<"\n" ;
    }
 
 
double temp;
 
    for (i=0; i<6; i++)
    {
        for (j=0; j<6; j++)
        {
            if (B [i][j] < B [i+1][j+1])
            {
                temp = B [i][j];
                B [i][j] = B [i+1][j+1];
                B [i+1][j+1] = temp;
                cout << B [i][j] << "  ";
 
            }
        }
        cout <<"\n" ;
    }
 
 
return 0;
}
Программа при выполнении выдает ошибку. Что не так?
Миниатюры
Ошибка в программе с сортировкой массива   Ошибка в программе с сортировкой массива  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.10.2011, 09:51
Ответы с готовыми решениями:

Ошибка в синтаксисе массива при работе с "сортировкой пузыриком
#include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; void sort(int numbers); ...

Ошибка в программе (ввод массива через ф-ию)
input.h #include &lt;stdio.h&gt; void in (int **x, int nx, int mx) { int i, j; for (i = 0; i &lt; nx; i++) for (j = 0; j &lt; mx;...

Отсортировать одномерный массив, заполненный случайными числами, сортировкой Шелла и сортировкой выбором
Отсортировать одномерный массив, заполненный случайными числами, сортировкой Шелла и сортировкой выбором.

16
 Аватар для Mиxaил
542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
14.10.2011, 10:04
Проверь, B [i+1][j+1], за границы не выходит?! Статически ты выделил под 6 элементов, а обращаешься и записываешь в 7.
0
 Аватар для Heidel
115 / 115 / 39
Регистрация: 11.10.2011
Сообщений: 649
14.10.2011, 10:07  [ТС]
Сортировка по строкам и в таком виде не работает

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
#include <iostream.h>
#include <math.h>
 
int main ( )
{
    double A [6][6];
    int i, j;
 
    cout <<"Matriza A\n\n" ;
 
    for (i=0; i<6; i++)
    {
        for (j=0; j<6; j++)
        {
            A [i][j] = (i+j)*tan (j);
            cout << A [i][j] << "  ";
        }
        cout <<"\n" ;
    }
    cout <<"\n" ;
 
 
double B [6][6];
 
cout <<"Matriza B\n\n" ;
 
    for (i=0; i<6; i++)
    {
        for (j=0; j<6; j++)
        {
            B [i][j] = A [i][j];
            cout << B [i][j] << "  ";
        }
    cout <<"\n" ;
    }
    cout <<"\n" ;
 
 
double temp;
 
    for (i=0; i<6; i++)
    {
        for (j=0; j<5; j++)
        {
            if (B [i][j] < B [i][j+1])
            {
                temp = B [i][j];
                B [i][j] = B [i][j+1];
                B [i][j+1] = temp;
                cout << B [i][j] << "  ";
 
            }
        }
        cout <<"\n" ;
    }
 
 
return 0;
}
0
 Аватар для Vorox
26 / 25 / 10
Регистрация: 26.11.2010
Сообщений: 57
14.10.2011, 10:10
У тебя массив имеет 6 элементов нумерация идет от 0 до 5, ты же в последнем вложенном цикле при i=5 или j=5 вылазиешь за пределы
0
 Аватар для Mиxaил
542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
14.10.2011, 10:10
Ну, как бы, у Вас это вообще не сортировка... Если Вы хотели сделать "пузырька", то он совсем другой.
C++
1
2
3
4
5
6
7
for ( int i = 0; i < N; i++ )
{
    for ( int j = 0; j < M - 1; j++ )
        for ( int k = j + 1; k < M; j++ )
            if ( Matrix [ i ][ j ] < Matrix [ i ][ k ] )
                swap ( Matrix [ i ][ j ], Matrix [ i ][ k ] );
}
0
 Аватар для Heidel
115 / 115 / 39
Регистрация: 11.10.2011
Сообщений: 649
14.10.2011, 11:01  [ТС]
Я пока еще не знаю пузырьковую сортировку и swap тоже, поэтому не хотела бы использовать в программе то, чего я не понимаю.

Объясните, пожалуйста, что не так в этом куске программы?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
double temp;
 
    for (i=0; i<6; i++)
    {
        for (j=0; j<5; j++)
        {
            if (B [i][j] < B [i][j+1])
            {
                temp = B [i][j];
                B [i][j] = B [i][j+1];
                B [i][j+1] = temp;
                cout << B [i][j] << "  ";
 
            }
        }
        cout <<"\n" ;
    }
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
14.10.2011, 11:16
Цитата Сообщение от Heidel Посмотреть сообщение
Я пока еще не знаю пузырьковую сортировку
А как ты собираешься делать сортировку, не знаю простейшего метода сортировки или какого-то другого?

В твоем куске кода ты можешь только максимальный элемент переместить на последнее место в строке, порядок же всех остальных элементов не изменится
Делай, как предложил Михаил. Вместо swap вставляй код обмена 2-х элементов матрицы местами (он у тебя есть)
C++
1
2
3
temp = B [i][j];
B [i][j] = B [i][k];
B [i][k] = temp;
0
 Аватар для Heidel
115 / 115 / 39
Регистрация: 11.10.2011
Сообщений: 649
14.10.2011, 11:42  [ТС]
Переписала кусок кода таким образом, но при выполнении программы вылезает ошибка и отработка прекращается.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
double temp;
int k;
 
    for (i=0; i<6; i++)
    {
        for (j=0; j<5; j++)
        {
            for (k=j+1; k<6; j++)
            {
                if (B [i][j] < B [i][k])
                {
                temp = B [i][j];
                B [i][j] = B [i][k];
                B [i][k] = temp;
                }
            }
            cout << B [i][j] << "  ";
        }
        cout <<"\n" ;
    }
    cout <<"\n" ;
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
14.10.2011, 11:52
вот это
C++
1
for (k=j+1; k<6; j++)
надо написать так
C++
1
for (k=j+1; k<6; k++)
Опечатка просто
1
1 / 1 / 0
Регистрация: 14.10.2011
Сообщений: 18
14.10.2011, 13:13
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
        double temp;
        cout <<"\n" ;
        cout <<"Matriza X\n\n" ;
 
 
        int k;
 
                for (i=0; i<6; i++)
                {
                        for (j=0; j<6; j++)
                        {
                                for (k=j+1; k<6; k++)
                                {
                                        if (B [i][j] < B [i][k])
                                        {
                                        temp = B [i][j];
                                        B [i][j] = B [i][k];
                                        B [i][k] = temp;
                                        }
                                }
                                cout << B [i][j] << "  ";
                        }
                        cout <<"\n" ;
                }
Добавлено через 1 час 9 минут
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
#include <iostream.h>
#include <math.h>
 
int main ( )
{
        double A [6][6];
        int i, j;
 
        cout <<"Matriza A\n\n" ;
 
        for (i=0; i<6; i++)
        {
                for (j=0; j<6; j++)
                {
                        A [i][j] = (i+j)*tan (j);
                        cout << A [i][j] << "  ";
                }
                cout <<"\n" ;
        }
 
cout <<"\n" ;
 
 
double B [6][6];
 
cout <<"Matriza B\n\n" ;
 
        for (i=0; i<6; i++)
        {
                for (j=0; j<6; j++)
                {
                        B [i][j] = A [i][j];
                        cout << B [i][j] << "  ";
                }
        cout <<"\n" ;
        }
 
 
        double temp;
        cout <<"\n" ;
        cout <<"Matriza X\n\n" ;
 
 
        int k;
 
                for (i=0; i<6; i++)
                {
                        for (j=0; j<6; j++)
                        {
                                for (k=j+1; k<6; k++)
                                {
                                        if (B [i][j] < B [i][k])
                                        {
                                        temp = B [i][j];
                                        B [i][j] = B [i][k];
                                        B [i][k] = temp;
                                        }
                                }
                                cout << B [i][j] << "  ";
                        }
                        cout <<"\n" ;
                }
                cout <<"\n" ;
 
 
return 0;
}
0 1.55741 -4.37008 -0.42764 4.63129 -16.9026
0 3.11482 -6.55512 -0.570186 5.78911 -20.2831
0 4.67222 -8.74016 -0.712733 6.94693 -23.6636
0 6.22963 -10.9252 -0.855279 8.10475 -27.0441
0 7.78704 -13.1102 -0.997826 9.26257 -30.4246
0 9.34445 -15.2953 -1.14037 10.4204 -33.8052

Matriza B

0 1.55741 -4.37008 -0.42764 4.63129 -16.9026
0 3.11482 -6.55512 -0.570186 5.78911 -20.2831
0 4.67222 -8.74016 -0.712733 6.94693 -23.6636
0 6.22963 -10.9252 -0.855279 8.10475 -27.0441
0 7.78704 -13.1102 -0.997826 9.26257 -30.4246
0 9.34445 -15.2953 -1.14037 10.4204 -33.8052

Matriza X

4.63129 1.55741 0 -0.42764 -4.37008 -16.9026
5.78911 3.11482 0 -0.570186 -6.55512 -20.2831
6.94693 4.67222 0 -0.712733 -8.74016 -23.6636
8.10475 6.22963 0 -0.855279 -10.9252 -27.0441
9.26257 7.78704 0 -0.997826 -13.1102 -30.4246
10.4204 9.34445 0 -1.14037 -15.2953 -33.8052
0
 Аватар для Heidel
115 / 115 / 39
Регистрация: 11.10.2011
Сообщений: 649
14.10.2011, 13:38  [ТС]
Спасибо, что помогли разобраться.
0
1 / 1 / 0
Регистрация: 14.10.2011
Сообщений: 18
14.10.2011, 13:39
Цитата Сообщение от Heidel Посмотреть сообщение
Спасибо, что помогли разобраться.

заходите к нам еще
0
 Аватар для Heidel
115 / 115 / 39
Регистрация: 11.10.2011
Сообщений: 649
14.10.2011, 13:52  [ТС]
Ууу, да еще не раз и даже не один десяток раз сюда зайду)))

И еще, подскажите, пожалуйста, swap это библиотечная функция?
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
14.10.2011, 14:00
да, из библиотеки algorithm.
0
 Аватар для Heidel
115 / 115 / 39
Регистрация: 11.10.2011
Сообщений: 649
14.10.2011, 14:25  [ТС]
Подключается
C++
1
2
#include <algorithm> 
using namespace std;
?
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
14.10.2011, 14:39
можно так. Если используете уже какие-то библиотеки, где объявлено std, (например, <iostream>), то можно <algorithm> не подключать, т.е. будет работать и вот так:

C++
1
2
3
4
5
6
#include <iostream>
int main()
{
...
std::swap(a,b);
}
0
 Аватар для Heidel
115 / 115 / 39
Регистрация: 11.10.2011
Сообщений: 649
14.10.2011, 15:09  [ТС]
Ясно, спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.10.2011, 15:09
Помогаю со студенческими работами здесь

Ошибка в коде с сортировкой
Ребят, помогите с сортировкой. Выкидывает ошибку: #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;fstream&gt; #include...

Сортировкой С++ или Ошибка.
написал программу по заданию( необходимо через указатели ) но после проверки сортировки нету. Код Записан на С++ #include...

с сортировкой выбором! в чем ошибка?
я создал базу данных с консоли и проблема в том что он сортирует только года а остальное он оставляет как есть не меняя его позицию до ...

Сортировкой двумерного массива
Дан файл, типа: Катя 1992 55 Аня 1993 61 Оля 1994 50 Нужно что бы отсортировало и вывело на экран, так: Аня 1993 61 Катя 1992...

Неполадки с сортировкой массива
Здравствуйте Есть у меня такой код #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;locale.h&gt; #include &lt;stdlib.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru