Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
1

Программа компилируется но не работает

27.08.2012, 20:11. Показов 1639. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
#include <conio.h>
#include<windows.h>
#include<iostream>
#include<time.h>
using namespace std;
int main()
{
  setlocale(0, "");
    srand(unsigned(time(NULL)));
    int N, SIZE=2,temp;
    cout<<"Введите размер матрицы: ";
    cin >> N;
    int ** matrix = new int * [N];
    for (int i = 0; i < N; i++)
        matrix [i] = new int [SIZE];
 
    for (int i = 0; i < N; i++)
        for (int j = 0; j <SIZE; j++)
            matrix[i][j] = ((rand() % 10));
                        
        
 cout << "Вот Ваша матрица:" << endl << endl;
 for (int i = 0; i < N; i++)
 {
     for(int j = 0; j < SIZE; j++)
         cout << matrix[i][j] << " ";
     cout << endl;
 }
 
 cout << endl;
 
for(int i = 0; i < SIZE; i++)
{
for(int j = 0; j < SIZE - 1; j++)
{
if(matrix[i][j + 1] < matrix[i][j])
{
temp = matrix[i][j + 1];
matrix[i][j + 1] = matrix[i][j];
matrix[i][j] = temp;
}
}
if(matrix[i + 1][0] < matrix[i][SIZE - 1])
{
temp = matrix[i + 1][0];
matrix[i + 1][0] = matrix[i][SIZE - 1];
matrix[i][SIZE - 1] = temp;
}
}
cout << "Вот Ваша матрица:" << endl << endl;
 for (int i = 0; i < SIZE; i++)
 {
     for(int j = 0; j < SIZE; j++)
         cout << matrix[i][j] << " ";
     cout << endl;
 }
  for (int i = 0; i < SIZE; i++)
            delete [] matrix[i];
        delete [] matrix;
}
Создается двумерный динамический массив, показывается и должен сортироваться пузырьком и снова показываться. но вместо этого вылетает ошибка "необработанное исключение"
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2012, 20:11
Ответы с готовыми решениями:

Программа компилируется но не работает
После ввода программа не выдает нечего и закрывается:cry: #include &lt;iostream&gt; #include...

Почему программа компилируется но не работает?
Заявки (телевизоры) поступают на проверку к 3 пунктам контроля . Если все контроллеры заняты ,...

Почему Visual Studio показывает ошибку, но программа компилируется и работает?
template &lt;typename T&gt; struct MyType { friend std::ostream &amp;operator&lt;&lt;(std::ostream &amp;out, const...

Программа компилируется в Borland 6.0 но не компилируется в Visual Studio 2008
Ета програма компилируетса в борланде 6.0 но не компилируетса в Visualstudio 2008 и в борланде 10-м...

23
8 / 9 / 1
Регистрация: 30.06.2011
Сообщений: 250
27.08.2012, 20:23 2
добавь задержку system("pause") из библиотеки iostream.h
или
getch() из conio.h
0
113 / 113 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
27.08.2012, 20:25 3
что у вас тут происходит ?
вылетает именно тут, перепроверьте сортировку

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(int i = 0; i < SIZE; i++) {
    for(int j = 0; j < SIZE - 1; j++)   {
        if(matrix[i][j + 1] < matrix[i][j]) {
            temp = matrix[i][j + 1];
            matrix[i][j + 1] = matrix[i][j];
            matrix[i][j] = temp;
        }
    }
    if(matrix[i + 1][0] < matrix[i][SIZE - 1]){
        temp = matrix[i + 1][0];
        matrix[i + 1][0] = matrix[i][SIZE - 1];
        matrix[i][SIZE - 1] = temp;
    }
}
0
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
27.08.2012, 20:29  [ТС] 4
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
добавь задержку system("pause") из библиотеки iostream.h
или
getch() из conio.h
и как это может помочь? через ctrl+F5 тоже нормально задерживается впринципе
0
8 / 9 / 1
Регистрация: 30.06.2011
Сообщений: 250
27.08.2012, 20:31 5
извиняюсь, не до конца прочитал ваше сообщение
0
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
27.08.2012, 20:40  [ТС] 6
Цитата Сообщение от DaskOFF Посмотреть сообщение
что у вас тут происходит ?
вылетает именно тут, перепроверьте сортировку
Ну это я и сам вижу,проверял, с статическим массивом работает нормально, с динамикой нет
0
113 / 113 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
27.08.2012, 20:43 7
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
#include <conio.h>
#include<windows.h>
#include<iostream>
#include<time.h>
using namespace std;
 
int main()
{
  setlocale(0, "");
    srand(unsigned(time(NULL)));
    int N, SIZE=2,temp;
    cout<<"Введите размер матрицы: ";
    cin >> N;
    int ** matrix = new int * [N];
    for (int i = 0; i < N; i++)
        matrix [i] = new int [SIZE];
 
    for (int i = 0; i < N; i++)
        for (int j = 0; j <SIZE; j++)
            matrix[i][j] = ((rand() % 10));
                        
        
 cout << "Вот Ваша матрица:" << endl << endl;
 for (int i = 0; i < N; i++)
 {
     for(int j = 0; j < SIZE; j++)
         cout << matrix[i][j] << " ";
     cout << endl;
 }
 
 cout << endl;
 
for(int i = 0; i < SIZE; i++) {
    for(int j = 0; j < SIZE - 1; j++)   {
        if(matrix[i][j + 1] < matrix[i][j]) {
            temp = matrix[i][j + 1];
            matrix[i][j + 1] = matrix[i][j];
            matrix[i][j] = temp;
        }
    }
    if(matrix[i + 1][0] < matrix[i][SIZE - 1]){
        temp = matrix[i + 1][0];
        matrix[i + 1][0] = matrix[i][SIZE - 1];
        matrix[i][SIZE - 1] = temp;
    }
}
cout << "Вот Ваша матрица:" << endl << endl;
for (int i = 0; i < N; i++){
    for(int j = 0; j < SIZE; j++)
        cout << matrix[i][j] << " ";
    cout << endl;
}
for (int i = 0; i < N; i++)
    delete [] matrix[i];
delete [] matrix;
return 0;
}
Программа компилируется но не работает
1
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
27.08.2012, 20:45  [ТС] 8
Цитата Сообщение от DaskOFF Посмотреть сообщение
почему у вас тут SIZE ?
C++
1
for(int i = 0; i < SIZE; i++)
а если массив будет 5 х 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
#include <conio.h>
#include<windows.h>
#include<iostream>
#include<time.h>
using namespace std;
int main()
{
  setlocale(0, "");
    srand(unsigned(time(NULL)));
    int SIZE,temp;
    cout<<"Введите размер матрицы: ";
    cin >> SIZE;
    int ** matrix = new int * [SIZE];
    for (int i = 0; i < SIZE; i++)
        matrix [i] = new int [SIZE];
 
    for (int i = 0; i < SIZE; i++)
        for (int j = 0; j <SIZE; j++)
            matrix[i][j] = ((rand() % 10));
                        
        
 cout << "Вот Ваша матрица:" << endl << endl;
 for (int i = 0; i < SIZE; i++)
 {
     for(int j = 0; j < SIZE; j++)
         cout << matrix[i][j] << " ";
     cout << endl;
 }
 
for(int i = 0; i < SIZE; i++)
{
for(int j = 0; j < SIZE - 1; j++)
{
if(matrix[i][j + 1] < matrix[i][j])
{
temp = matrix[i][j + 1];
matrix[i][j + 1] = matrix[i][j];
matrix[i][j] = temp;
}
}
if(matrix[i + 1][0] < matrix[i][SIZE - 1])
{
temp = matrix[i + 1][0];
matrix[i + 1][0] = matrix[i][SIZE - 1];
matrix[i][SIZE - 1] = temp;
}
}
cout << "Вот Ваша матрица:" << endl << endl;
 for (int i = 0; i < SIZE; i++)
 {
     for(int j = 0; j < SIZE; j++)
         cout << matrix[i][j] << " ";
     cout << endl;
 }
  for (int i = 0; i < SIZE; i++)
            delete [] matrix[i];
        delete [] matrix;
}
ошибка та же
0
113 / 113 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
27.08.2012, 20:50 9
пост выше обновил, все работает без ошибок с любым размером
ток он как-то странно сортирует
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,519
27.08.2012, 20:54 10
во первых поменяй SIZE в некоторых компиляторах она зарезервирована
во вторых
Цитата Сообщение от Alt_Shift Посмотреть сообщение
SIZE=2,
Цитата Сообщение от Alt_Shift Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for(int i = 0; i < SIZE; i++)
{
for(int j = 0; j < SIZE - 1; j++)
{
if(matrix[i][j + 1] < matrix[i][j])
{
temp = matrix[i][j + 1];
matrix[i][j + 1] = matrix[i][j];
matrix[i][j] = temp;
}
}
if(matrix[i + 1][0] < matrix[i][SIZE - 1])
{
temp = matrix[i + 1][0];
matrix[i + 1][0] = matrix[i][SIZE - 1];
matrix[i][SIZE - 1] = temp;
}
}
ты массив 2х2 обрабатывешь??? куда N потерял??
в третих вот она ошибка
Цитата Сообщение от Alt_Shift Посмотреть сообщение
matrix[i + 1][0]
на последней итерации i=SIZE ( а может нет все N зависит при 1 2 точно будет)
Цитата Сообщение от Alt_Shift Посмотреть сообщение
показывается и должен сортироваться пузырьком и снова показываться. но вместо этого вылетает ошибка "необработанное исключение"
пройди по шагам и посмотри при каких значениях i j вылетает

Добавлено через 2 минуты
Цитата Сообщение от DaskOFF Посмотреть сообщение
ток он как-то странно сортирует
а как ты хотел
Цитата Сообщение от DaskOFF Посмотреть сообщение
C++
1
2
for(int i = 0; i < SIZE; i++) {
 for(int j = 0; j < SIZE - 1; j++) {
при сортировке
0
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
27.08.2012, 20:54 11
Могу предположить что должно было быть так
код
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
#include <conio.h>
#include<windows.h>
#include<iostream>
#include<time.h>
using namespace std;
int main()
{
    setlocale(0, "");
    srand(unsigned(time(NULL)));
    int N, SIZE=5,temp;
    cout<<"Введите размер матрицы: ";
    cin >> N;
    int ** matrix = new int * [N];
    for (int i = 0; i < N; i++)
        matrix [i] = new int [SIZE];
 
    for (int i = 0; i < N; i++)
        for (int j = 0; j <SIZE; j++)
            matrix[i][j] = ((rand() % 10));
 
 
    cout << "Вот Ваша матрица:" << endl << endl;
    for (int i = 0; i < N; i++)
    {
        for(int j = 0; j < SIZE; j++)
            cout << matrix[i][j] << " ";
        cout << endl;
    }
 
    cout << endl;
 
    for (int k = 0; k<N; k++)
    {
        for(int i = 0; i < SIZE - 1; ++i) // i - номер прохода
        {            
            for(int j = 0; j < SIZE - 1; ++j) // внутренний цикл прохода
            {     
                if (matrix[k][j + 1] < matrix[k][j]) 
                {
                    temp = matrix[k][j + 1]; 
                    matrix[k][j + 1] = matrix[k][j]; 
                    matrix[k][j] = temp;
                }
            }
        }
    }
    
    cout << "Вот Ваша матрица:" << endl << endl;
    for (int i = 0; i < N; i++)
    {
        for(int j = 0; j < SIZE; j++)
            cout << matrix[i][j] << " "; 
        cout << endl;
    }
    for (int i = 0; i < N; i++)
        delete [] matrix[i];
    delete [] matrix;
    system("pause");
    return 0;
}
1
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
27.08.2012, 22:05  [ТС] 12
Цитата Сообщение от yuron_477 Посмотреть сообщение
Могу предположить что должно было быть так
ну как бы да. но нужно что бы SIZE был равен 2 и сортировка происходила по второму столбцу

Добавлено через 55 минут
такой вариант

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
#include <conio.h>
#include<windows.h>
#include<iostream>
#include<time.h>
using namespace std;
int main()
{
    setlocale(0, "");
    srand(unsigned(time(NULL)));
    int N, SIZE=2,temp;
    cout<<"Введите размер матрицы: ";
    cin >> N;
    int ** matrix = new int * [N];
    for (int i = 0; i < N; i++)
        matrix [i] = new int [SIZE];
 
    for (int i = 0; i < N; i++)
        for (int j = 0; j <SIZE; j++)
            matrix[i][j] = ((rand() % 10));
 
 
    cout << "Вот Ваша матрица:" << endl << endl;
    for (int i = 0; i < N; i++)
    {
        for(int j = 0; j < SIZE; j++)
            cout << matrix[i][j] << " ";
        cout << endl;
    }
 
    cout << endl;
 
    for (int k = 0; k<N; k++)
    {
        for(int j = 0;j < SIZE - 1; ++j) // i - номер прохода
        {            
            for(int i = 0; i < SIZE - 1; ++i) // внутренний цикл прохода
            {     
                if (matrix[k][2] < matrix[k+1][2]) 
                {
                    temp = matrix[k][2]; 
                    matrix[k][2] = matrix[k+1][2]; 
                    matrix[k+1][2] = temp;
                }
            }
        }
    }
    
    cout << "Вот Ваша матрица:" << endl << endl;
    for (int i = 0; i < N; i++)
    {
        for(int j = 0; j < SIZE; j++)
            cout << matrix[i][j] << " "; 
        cout << endl;
    }
    for (int i = 0; i < N; i++)
        delete [] matrix[i];
    delete [] matrix;
    system("pause");
    return 0;
}
приводит к предыдущей ошибке
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,519
27.08.2012, 22:09 13
Цитата Сообщение от Alt_Shift Посмотреть сообщение
приводит к предыдущей ошибке
еще раз
Цитата Сообщение от ValeryS Посмотреть сообщение
пройди по шагам и посмотри при каких значениях i j вылетает
ты за пределы выходишь( по моему)
0
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
27.08.2012, 22:50  [ТС] 14
Цитата Сообщение от ValeryS Посмотреть сообщение
еще раз

ты за пределы выходишь( по моему)
на вот этом этапе
C++
1
 for (int k = 0; k<N; k++)
(32 строка)
N=5, а вот k почему то забито мусором вида -854322. Cледующая строчка та же херня с j и потом с i
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,519
27.08.2012, 22:58 15
Цитата Сообщение от Alt_Shift Посмотреть сообщение
N=5, а вот k почему то забито мусором вида -854322. Cледующая строчка та же херня с j и потом с i
она еще не успела инициализироваться
на следующем шаге должна быть 0
0
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
27.08.2012, 23:02  [ТС] 16
все верно, но почему так то?
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,519
27.08.2012, 23:22 17
Цитата Сообщение от Alt_Shift Посмотреть сообщение
все верно, но почему так то?
попробуй написать так
C++
1
int k = 0;
и тоже самое увидишь
отладчик встал ДО исполнение инициализации а не ПОСЛЕ
грубо говоря ты стоишь в начале строчки и не можешь прочитать что в этой строке
0
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
27.08.2012, 23:34  [ТС] 18
Цитата Сообщение от ValeryS Посмотреть сообщение
попробуй написать так
C++
1
int k = 0;
и тоже самое увидишь
отладчик встал ДО исполнение инициализации а не ПОСЛЕ
грубо говоря ты стоишь в начале строчки и не можешь прочитать что в этой строке
а как правильно?
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,519
28.08.2012, 00:41 19
Цитата Сообщение от Alt_Shift Посмотреть сообщение
а как правильно?
в смысле ???
так и есть правильно
это просто работа с отладчиком
все что происходит в строке ты увидишь
когда курсор будет стоять на следующей строке
например
C++
1
2
3
int k=5;// вот здесь ты увидишь в k мусор
k=7+10;// вот здесь ты увидишь в k 5
 ....  // вот здесь ты увидишь в k 17
Добавлено через 6 минут
Цитата Сообщение от Alt_Shift Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for (int k = 0; k<N; k++)
 {
 for(int j = 0;j < SIZE - 1; ++j) // i - номер прохода
 { 
 for(int i = 0; i < SIZE - 1; ++i) // внутренний цикл прохода
 { 
 if (matrix[k][2] < matrix[k+1][2]) 
 {
 temp = matrix[k][2]; 
 matrix[k][2] = matrix[k+1][2]; 
 matrix[k+1][2] = temp;
 }
 }
 }
 }
вот она твоя ошибка
matrix[k][2] ты берешь третий столбец (выход за пределы)
matrix[k+1][2] на последней итерации будет matrix[N][2](опять выход за пределы)
и зачем ты крутишь циклы j и i если не используешь в теле этих значений

Добавлено через 4 минуты

Добавлено через 21 минуту
если хочешь сортировать 2 столбец то наверное так
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int k=0; k<N-1; k++) // цикл проходов
 {
 for(int j =0 ;j <N-k ; j++) 
   { 
     if (matrix[j][1] > matrix[j+1][1]) 
     {
       temp = matrix[j+1][1]; 
       matrix[j+1][1] = matrix[j][1]; 
       matrix[j][1] = temp;
     }
   }
 }
"камешком"

C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int k=N-1; k>1; k--) // цикл проходов
 {
 for(int j =k-1 ;j <N-1 ; j++) 
   { 
     if (matrix[j][1] >matrix[j+1][1]) 
     {
       temp = matrix[j+1][1]; 
       matrix[j+1][1] = matrix[j][1]; 
       matrix[j][1] = temp;
     }
   }
 }
"пузырьком"

Добавлено через 15 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int k=1; k<N; k++) // цикл проходов
 {
 for(int j =N-k-1 ;j >=0 ; j--) 
   { 
     if (matrix[j][1] >matrix[j+1][1]) 
     {
       temp = matrix[j+1][1]; 
       matrix[j+1][1] = matrix[j][1]; 
       matrix[j][1] = temp;
     }
   }
 }
еще один "пузырек"
0
51 / 51 / 20
Регистрация: 28.05.2012
Сообщений: 161
28.08.2012, 04:17  [ТС] 20
первые два не сортирую вообще Последняя сортирует но как то странно-только первые несколько строк
0
28.08.2012, 04:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2012, 04:17
Помогаю со студенческими работами здесь

Qt: программа компилируется но не работает
#include &lt;QtGui&gt; #include &lt;clRead.h&gt; #include &lt;QDebug&gt; int main(int argc, char *argv) { ...

Программа с WinAPI компилируется, но не работает
Всем привет. Я занимаюсь по книге Румянцева &quot;Азбука программирования в Win32 API&quot;. Листинги в...

Программа компилируется, но не работает (MASM32)
Всем здрасте. Имею WinXP SP3 32-bit (дистрибутив MSDN скачанный с торрентов) на компе с процом...

Программа не компилируется на mingw, но работает на dev c++
Я новичок в СИ, пишу простейшую программу для считывания данных с файла. В дев с++ все прекрасно...


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

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