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

Не работает программа, ошибок компиляции нет. - C++

Восстановить пароль Регистрация
 
vaselo
19 / 19 / 1
Регистрация: 17.10.2010
Сообщений: 247
03.11.2010, 21:17     Не работает программа, ошибок компиляции нет. #1
Есть вот такая программа: поменять местами строки в матрице с мин и макс значениями. Писал в вижуал С++.
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
#include <stdio.h>
#include <iostream>
#include <ctime>
 
using std::cout;
using std::cin;
using std::endl;
int minimum, maximum,num_max,num_min, m, i, j;
int minb[100], maxb[100];
 
int** input ( int **arr, int m,int i,int j)
{for (i=0; i<m; i++)
arr[i]=new int[m];
{for (j=0; j<m; j++)
    {cout<<"arr["<<i<<"]["<<j<<"]= ";
    cin>>arr[i][j];
    }
}
    return arr;
}
int search (int **arr, int m, int i, int j)
{
     int *min, *max;
        min = new int[m];
        max = new int[m];
        for(int i=0; i<m; i++)
        {
                minimum = arr[i][0];
                maximum = arr[i][0];
                for(int j=0; j<m; j++)
                 {
            if (arr[i][j]<minimum)
                         {
                                minimum=arr[i][j];
                         }
                        if (arr[i][j]>maximum)
                         {
                                maximum=arr[i][j];
                         } 
                 }
                max[i]=maximum;
                min[i]=minimum;
                
         }
        minimum = min[0];
        maximum = max[0];
        for(int i=0; i<m; i++)
        {
                if (min[i]<minimum)
                  {
                        minimum = min[i];
                        num_min=i;
                  } 
        if (max[i]>maximum)
                  {
                        maximum = max[i];
                        num_max=i;
                  }
        }
        return minimum,maximum;
}
 
int** change (int i, int j, int **arr)
{
        i=num_min;
        for(j=0;j<m;j++)
        {minb[j]=arr[i][j];
        }
        i=num_max;
        for(j=0;j<m;j++)
        {maxb[j]=arr[i][j];
        }
        i=num_max;
        for(j=0;j<m;j++)
        {arr[i][j]=minb[j];
        }
            i=num_min;
        for(j=0;j<m;j++)
        {arr[i][j]=maxb[j];
        }return 0;
}
int main()
{       
        int i, j;
        int **arr;
        setlocale(LC_ALL,"Russian");
        cout<<"Введите размерность матрицы: ";
         cin>>m;
    cout<<endl;
        arr = new int*[m];
 
        input (arr, m, i, j);
        
        cout<<"Начальная матрица: "<<endl;
        for(int i=0; i<m; i++)
         {
        for(int j=0; j<m; j++)
         {
                            cout<<arr[i][j]<<"  ";
         }
                cout<<endl;
        } 
        search (arr, m, i, j);
        cout<<"Минимальный элемент - "<<minimum<<" в "<<num_min+1<<"строке"<<endl;
        cout<<"Максимальный элемент - "<<maximum<<" в "<<num_max+1<<"строке"<<endl;
        if (num_min=num_max)
            cout<<"Элементы находятся в одной строке!"<<endl;
        else
        {
 
            change (i, j, arr);
            
            
            cout<<"Конечная матрица: "<<endl;
        for(int i=0; i<m; i++)
         {
        for(int j=0; j<m; j++)
         {
                            cout<<arr[i][j]<<"  ";
         }
                cout<<endl;
        }
        }
        return 0;
}
Добавлено через 2 минуты
Помогите пожалуйста!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2010, 21:17     Не работает программа, ошибок компиляции нет.
Посмотрите здесь:

Апроксимация функции с фурье, компилятор ошибок не находит, но программа работает не верно. C++
явных ошибок нету, но программа не работает C++
C++ Множество ошибок при компиляции.
C++ Синтаксических и арифметических ошибок в цикле вроде как нет, но он не работает
ошибок в компиляции нет, а при работе выходит ошибка, почему? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
03.11.2010, 21:28     Не работает программа, ошибок компиляции нет. #2
ДЛя начала мне надо исходные данные, при которых прога не работает. Чем меньше их будет, тем лучше. К примеру (прога запрашивает какое-то значение x. ты его вводишь и прога не работает. Допустим, ты нашёл, что сие происходит при x== 5 или x== 11. Тогда пишешь мне: прога не работает при x== 5, НО НЕ 11, ибо так легче тестить )

Потом: опиши КАК ИМЕННО она не работает
vaselo
19 / 19 / 1
Регистрация: 17.10.2010
Сообщений: 247
03.11.2010, 21:31  [ТС]     Не работает программа, ошибок компиляции нет. #3
ты ее не запускал? после ввода размерности матрицы выдает что j не инициализировано и все: выбор: завершить, продолжить (бесконечно)
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
03.11.2010, 21:36     Не работает программа, ошибок компиляции нет. #4
Я же чётко попросил: исходные данные сюда.

Какую размерность ты вводишь, ё?
vaselo
19 / 19 / 1
Регистрация: 17.10.2010
Сообщений: 247
03.11.2010, 21:42  [ТС]     Не работает программа, ошибок компиляции нет. #5
да ни при какой от 2 до 6 не работает, да и 20 пробовал, нивкакую. выдает ту же ошибку. Что выдает у тебя?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
03.11.2010, 22:04     Не работает программа, ошибок компиляции нет. #6
1) ПОчему ты не пишешь, что матрица квадратная?
Я что, должен сам догадываться?


ВВод матрицы у тебя неправильный. Вот правильный ввод
C++
1
2
3
4
5
6
7
8
9
10
11
void input ( int **arr, int m) {
 arr= new int* [m];
 for (i=0; i<m; i++)
  arr[i]=new int[m];
 for (i=0; i<m; i++) {
  for (j=0; j<m; j++) {
   cout<<"arr["<<i<<"]["<<j<<"]= ";
   cin>>arr[i][j];
  }
 }
}
1) Убрал на хрен передачу i и j/ ОНи БЕЗУСЛОВНО в функции input иницализирутся нулями. Так зачем же передавать нули? Передавать надо то, что можеж быть разным. А поскольку вначале input они нули, я просто аналогичные перемнные внутри input объявил и обнулил их

2) Добавил строку
C++
1
 arr= new int* [m];
Ну и наконец, твой непосредственно ввод заключался в этом
C++
1
2
3
4
for (j=0; j<m; j++) {
   cout<<"arr["<<i<<"]["<<j<<"]= ";
   cin>>arr[i][j];
  }
Так, это ты пробегаешься по столбцам. А по строчкам кто будет пробегаться?
Надо так, как я написал.

В общем разберись с тем, что я исправил. ПОтм задавай вопросы. Чует моё сердце ам ещё ошибок вагон ималенькая тележка.
ilya~k
3 / 3 / 1
Регистрация: 31.10.2010
Сообщений: 25
03.11.2010, 22:08     Не работает программа, ошибок компиляции нет. #7
И еще: if (num_min=num_max) наверное стоит поменять на if (num_min==num_max)
И зачем еще i и j объявлять ГЛОБАЛЬНЫМИ если они только в циклах используются???
vaselo
19 / 19 / 1
Регистрация: 17.10.2010
Сообщений: 247
03.11.2010, 23:21  [ТС]     Не работает программа, ошибок компиляции нет. #8
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
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <ctime>
 
using std::cout;
using std::cin;
using std::endl;
int minimum, maximum,num_max,num_min, m;
int minb[100], maxb[100];
 
void input ( int **arr, int m, int i, int j) {
 arr= new int* [m];
 for (i=0; i<m; i++)
  arr[i]=new int[m];
 for (i=0; i<m; i++) {
  for (j=0; j<m; j++) {
   cout<<"arr["<<i<<"]["<<j<<"]= ";
   cin>>arr[i][j];
  }
 }
 
}
int search (int **arr, int m, int i, int j)
{
     int *min, *max;
        min = new int[m];
        max = new int[m];
        for(int i=0; i<m; i++)
        {
                minimum = arr[i][0];
                maximum = arr[i][0];
                for(int j=0; j<m; j++)
                 {
            if (arr[i][j]<minimum)
                         {
                                minimum=arr[i][j];
                         }
                        if (arr[i][j]>maximum)
                         {
                                maximum=arr[i][j];
                         } 
                 }
                max[i]=maximum;
                min[i]=minimum;
                
         }
        minimum = min[0];
        maximum = max[0];
        for(int i=0; i<m; i++)
        {
                if (min[i]<minimum)
                  {
                        minimum = min[i];
                        num_min=i;
                  } 
        if (max[i]>maximum)
                  {
                        maximum = max[i];
                        num_max=i;
                  }
        }
        return minimum,maximum;
}
 
int** change (int i, int j, int **arr)
{
        i=num_min;
        for(j=0;j<m;j++)
        {minb[j]=arr[i][j];
        }
        i=num_max;
        for(j=0;j<m;j++)
        {maxb[j]=arr[i][j];
        }
        i=num_max;
        for(j=0;j<m;j++)
        {arr[i][j]=minb[j];
        }
            i=num_min;
        for(j=0;j<m;j++)
        {arr[i][j]=maxb[j];
        }return 0;
}
int main()
{       
        int i, j;
        int **arr;
        setlocale(LC_ALL,"Russian");
        cout<<"Введите размерность матрицы: ";
         cin>>m;
    cout<<endl;
        arr = new int*[m];
 
        input (arr, m, i, j);
        
        cout<<"Начальная матрица: "<<endl;
        for(int i=0; i<m; i++)
         {
        for(int j=0; j<m; j++)
         {
                            cout<<arr[i][j]<<"  ";
         }
                cout<<endl;
        } 
        search (arr, m, i, j);
        cout<<"Минимальный элемент - "<<minimum<<" в "<<num_min+1<<"строке"<<endl;
        cout<<"Максимальный элемент - "<<maximum<<" в "<<num_max+1<<"строке"<<endl;
        if (num_min==num_max)
            cout<<"Элементы находятся в одной строке!"<<endl;
        else
        {
 
            change (i, j, arr);
            
            
            cout<<"Конечная матрица: "<<endl;
        for(int i=0; i<m; i++)
         {
        for(int j=0; j<m; j++)
         {
                            cout<<arr[i][j]<<"  ";
         }
                cout<<endl;
        }
        }
        return 0;
}
теперь доходит до вывода начальной матрицы, но выдает:
Bash
1
Необработанное исключение в "0x000d1be9" в "Lab4.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcdcdcdcd".
Добавлено через 51 минуту
kravam, помоги пожалста? мне очень надо, что делать уже и не знаю...
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.11.2010, 00:06     Не работает программа, ошибок компиляции нет. #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
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
#include <stdio.h>
#include <iostream>
#include <ctime>
 
using std::cout;
using std::cin;
using std::endl;
int minimum, maximum,num_max,num_min, m;
int minb[100], maxb[100];
 
void input ( int **arr, int m) {
 for (int i=0; i<m; i++) {
  for (int j=0; j<m; j++) {
   cout<<"arr["<<i<<"]["<<j<<"]= ";
   cin>>arr[i][j];
  }
 }
 
}
int search (int **arr, int m)
{
         int *min, *max;
        min = new int[m];
        max = new int[m];
        for(int i=0; i<m; i++)
        {
                minimum = arr[i][0];
                maximum = arr[i][0];
                for(int j=0; j<m; j++)
                 {
            if (arr[i][j]<minimum)
                         {
                                minimum=arr[i][j];
                         }
                        if (arr[i][j]>maximum)
                         {
                                maximum=arr[i][j];
                         } 
                 }
                max[i]=maximum;
                min[i]=minimum;
                
         }
        minimum = min[0];
        maximum = max[0];
        for(int i=0; i<m; i++)
        {
                if (min[i]<minimum)
                  {
                        minimum = min[i];
                        num_min=i;
                  } 
        if (max[i]>maximum)
                  {
                        maximum = max[i];
                        num_max=i;
                  }
        }
        return minimum,maximum;
}
 
int** change (int **arr)
{
                int i=num_min;
                for(int j=0;j<m;j++)
                {minb[j]=arr[i][j];
                }
                i=num_max;
                for(int j=0;j<m;j++)
                {maxb[j]=arr[i][j];
                }
                i=num_max;
                for(int j=0;j<m;j++)
                {arr[i][j]=minb[j];
                }
                        i=num_min;
                for(int j=0;j<m;j++)
                {arr[i][j]=maxb[j];
                }return 0;
}
int main()
{               
                int **arr;
        setlocale(LC_ALL,"Russian");
        cout<<"Введите размерность матрицы: ";
         cin>>m;
    cout<<endl;
        arr = new int*[m];
        for(int i=0; i<m; ++i)
            arr[i]=new int[m];
 
                input (arr, m);
        
                cout<<"Начальная матрица: "<<endl;
        for(int i=0; i<m; i++)
         {
        for(int j=0; j<m; j++)
         {
                            cout<<arr[i][j]<<"  ";
         }
                cout<<endl;
                } 
                search (arr, m);
                cout<<"Минимальный элемент - "<<minimum<<" в "<<num_min+1<<"строке"<<endl;
        cout<<"Максимальный элемент - "<<maximum<<" в "<<num_max+1<<"строке"<<endl;
                if (num_min==num_max)
                        cout<<"Элементы находятся в одной строке!"<<endl;
                else
                {
 
                        change (arr);
                        
                        
                        cout<<"Конечная матрица: "<<endl;
        for(int i=0; i<m; i++)
         {
        for(int j=0; j<m; j++)
         {
                            cout<<arr[i][j]<<"  ";
         }
                cout<<endl;
                }
                }
                return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2010, 10:57     Не работает программа, ошибок компиляции нет.
Еще ссылки по теме:

Программа в Visual Studio работает, а в Borland C++ нет C++
Число ошибок превышает 100: Остановка компиляции C++
много ошибок при компиляции C++

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

Или воспользуйтесь поиском по форуму:
МаксимМВ
C/C++
90 / 90 / 5
Регистрация: 01.07.2010
Сообщений: 281
04.11.2010, 10:57     Не работает программа, ошибок компиляции нет. #10
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
void randz(int **matr, int size)
{
    for (int i=0;i<size;i++)
        for (int j=0;j<size;j++)
            matr[i][j]=rand()%100;
        cout<<endl;
}
void printm(int **matr,int size)
{
for (int i=0;i<size;i++)
    {
        for (int j=0;j<size;j++)
            cout<<matr[i][j]<<" ";
        cout<<endl;
    }
}
 
int findmin(int **matr, int size, int *mini=NULL)
{
    int minstr=0,min=matr[0][0];
    for (int i=0;i<size;i++)
        for (int j=0;j<size;j++)
            if (matr[i][j]<min)
            {
                min=matr[i][j];
                minstr=i;
            }
    *mini=min;
    return minstr;
}
 
int findmax(int **matr, int size, int *maxi=NULL)
{
    int maxstr=0,max=0;
    for (int i=0;i<size;i++)
        for (int j=0;j<size;j++)
            if (matr[i][j]>max)
            {
                max=matr[i][j];
                maxstr=i;
            }
    *maxi=max;
    return maxstr;
}
 
void swap (int **matr, int str1, int str2, int size)
{
    int temp[size];
    for (int j=0;j<size;j++)
        temp[j]=matr[str1][j];
    for (int j=0;j<size;j++)
        matr[str1][j]=matr[str2][j];
    for (int j=0;j<size;j++)
        matr[str2][j]=temp[j];
}
 
int main(int argc, char *argv[])
{
    srand(time(0));
    int size;
    cout<<"Введите размер матрицы:";
    cin>>size;
    int **matr=new int*[size];
    for (int i=0;i<size;i++)
        matr[i]=new int[size];
    
    randz(matr,size);
    cout<<"Исходная матрица:"<<endl;
    printm(matr,size);
    
    int min,max;
    int mins=findmin(matr,size,&min);
    int maxs=findmax(matr,size,&max);
    swap(matr,mins,maxs,size);
    cout<<"Минимальный элемент: "<<min<<endl<<"Максимальный элемент: ";
    cout<<max<<endl<<"Строка с минимальным элементом: "<<mins<<endl;
    cout<<"Строка с максимальным элементом: "<<maxs<<endl;
    cout<<"Полученная матрица: "<<endl;
    printm(matr,size);
        
    return 0;
}
Yandex
Объявления
04.11.2010, 10:57     Не работает программа, ошибок компиляции нет.
Ответ Создать тему
Опции темы

Текущее время: 02:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru