Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Alt_Shift
50 / 50 / 20
Регистрация: 28.05.2012
Сообщений: 161
1

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

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

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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
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-м...

Первая программа. Код не компилируется и не запускается программа.
Первая программа, первая ошибка Здравствуйте! Решил учить С++. Скачал книгу Programming:...

23
Mr. Pyatachok
8 / 8 / 1
Регистрация: 30.06.2011
Сообщений: 250
27.08.2012, 20:23 2
добавь задержку system("pause") из библиотеки iostream.h
или
getch() из conio.h
0
DaskOFF
112 / 112 / 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
Alt_Shift
50 / 50 / 20
Регистрация: 28.05.2012
Сообщений: 161
27.08.2012, 20:29  [ТС] 4
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
добавь задержку system("pause") из библиотеки iostream.h
или
getch() из conio.h
и как это может помочь? через ctrl+F5 тоже нормально задерживается впринципе
0
27.08.2012, 20:29
Mr. Pyatachok
8 / 8 / 1
Регистрация: 30.06.2011
Сообщений: 250
27.08.2012, 20:31 5
извиняюсь, не до конца прочитал ваше сообщение
0
Alt_Shift
50 / 50 / 20
Регистрация: 28.05.2012
Сообщений: 161
27.08.2012, 20:40  [ТС] 6
Цитата Сообщение от DaskOFF Посмотреть сообщение
что у вас тут происходит ?
вылетает именно тут, перепроверьте сортировку
Ну это я и сам вижу,проверял, с статическим массивом работает нормально, с динамикой нет
0
DaskOFF
112 / 112 / 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
Alt_Shift
50 / 50 / 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
DaskOFF
112 / 112 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
27.08.2012, 20:50 9
пост выше обновил, все работает без ошибок с любым размером
ток он как-то странно сортирует
0
ValeryS
Модератор
7911 / 5887 / 774
Регистрация: 14.02.2011
Сообщений: 20,249
Завершенные тесты: 1
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
DiffEreD
1446 / 783 / 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
Alt_Shift
50 / 50 / 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
ValeryS
Модератор
7911 / 5887 / 774
Регистрация: 14.02.2011
Сообщений: 20,249
Завершенные тесты: 1
27.08.2012, 22:09 13
Цитата Сообщение от Alt_Shift Посмотреть сообщение
приводит к предыдущей ошибке
еще раз
Цитата Сообщение от ValeryS Посмотреть сообщение
пройди по шагам и посмотри при каких значениях i j вылетает
ты за пределы выходишь( по моему)
0
Alt_Shift
50 / 50 / 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
ValeryS
Модератор
7911 / 5887 / 774
Регистрация: 14.02.2011
Сообщений: 20,249
Завершенные тесты: 1
27.08.2012, 22:58 15
Цитата Сообщение от Alt_Shift Посмотреть сообщение
N=5, а вот k почему то забито мусором вида -854322. Cледующая строчка та же херня с j и потом с i
она еще не успела инициализироваться
на следующем шаге должна быть 0
0
Alt_Shift
50 / 50 / 20
Регистрация: 28.05.2012
Сообщений: 161
27.08.2012, 23:02  [ТС] 16
все верно, но почему так то?
0
ValeryS
Модератор
7911 / 5887 / 774
Регистрация: 14.02.2011
Сообщений: 20,249
Завершенные тесты: 1
27.08.2012, 23:22 17
Цитата Сообщение от Alt_Shift Посмотреть сообщение
все верно, но почему так то?
попробуй написать так
C++
1
int k = 0;
и тоже самое увидишь
отладчик встал ДО исполнение инициализации а не ПОСЛЕ
грубо говоря ты стоишь в начале строчки и не можешь прочитать что в этой строке
0
Alt_Shift
50 / 50 / 20
Регистрация: 28.05.2012
Сообщений: 161
27.08.2012, 23:34  [ТС] 18
Цитата Сообщение от ValeryS Посмотреть сообщение
попробуй написать так
C++
1
int k = 0;
и тоже самое увидишь
отладчик встал ДО исполнение инициализации а не ПОСЛЕ
грубо говоря ты стоишь в начале строчки и не можешь прочитать что в этой строке
а как правильно?
0
ValeryS
Модератор
7911 / 5887 / 774
Регистрация: 14.02.2011
Сообщений: 20,249
Завершенные тесты: 1
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
Alt_Shift
50 / 50 / 20
Регистрация: 28.05.2012
Сообщений: 161
28.08.2012, 04:17  [ТС] 20
первые два не сортирую вообще Последняя сортирует но как то странно-только первые несколько строк
0
28.08.2012, 04:17
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2012, 04:17

Программа не компилируется
Доброго всем времени суток! Не могу скомпилировать программу. У меня задача написать...

Программа не компилируется
На копе в универе писала программу, принесла домой доделать, но она не хочет компилироваться. VS...

Не компилируется программа
------ Построение начато: проект: Rapid Roll, Конфигурация: Debug Win32 ------ Компиляция......


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

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

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