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

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

Войти
Регистрация
Восстановить пароль
 
 
Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
#1

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

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

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

Или воспользуйтесь поиском по форуму:
Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
28.08.2012, 04:17  [ТС]     Программа компилируется но не работает #20
первые два не сортирую вообще Последняя сортирует но как то странно-только первые несколько строк
Yandex
Объявления
28.08.2012, 04:17     Программа компилируется но не работает
Ответ Создать тему
Опции темы

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