Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
19 / 19 / 5
Регистрация: 17.10.2010
Сообщений: 247
1

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

03.11.2010, 21:17. Просмотров 694. Ответов 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, 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 минуты
Помогите пожалуйста!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2010, 21:17
Ответы с готовыми решениями:

Явных ошибок нет, но программа не работает
Задание было такое: 1. Разработать программу, которая создает массив, количество элементов...

Программа работает только в ide, после компиляции нет!
Здравствуйте, уважаемые!! Столкнулась с такой проблемой. Написанное мною приложение, работает...

Не подключается база данных(ошибок компиляции нет)
Доброго дня! У меня возникла следующая проблема. Я собрала драйвера mysql, все библиотеки положила...

При компиляции ошибок нет, но на выходе пустая консоль
Помогите, пожалуйста. При компиляции нет ошибок, но на выходе пустая консоль. #include...

9
быдлокодер
1719 / 906 / 106
Регистрация: 04.06.2008
Сообщений: 5,614
03.11.2010, 21:28 2
ДЛя начала мне надо исходные данные, при которых прога не работает. Чем меньше их будет, тем лучше. К примеру (прога запрашивает какое-то значение x. ты его вводишь и прога не работает. Допустим, ты нашёл, что сие происходит при x== 5 или x== 11. Тогда пишешь мне: прога не работает при x== 5, НО НЕ 11, ибо так легче тестить )

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

Какую размерность ты вводишь, ё?
1
19 / 19 / 5
Регистрация: 17.10.2010
Сообщений: 247
03.11.2010, 21:42  [ТС] 5
да ни при какой от 2 до 6 не работает, да и 20 пробовал, нивкакую. выдает ту же ошибку. Что выдает у тебя?
0
быдлокодер
1719 / 906 / 106
Регистрация: 04.06.2008
Сообщений: 5,614
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];
  }
Так, это ты пробегаешься по столбцам. А по строчкам кто будет пробегаться?
Надо так, как я написал.

В общем разберись с тем, что я исправил. ПОтм задавай вопросы. Чует моё сердце ам ещё ошибок вагон ималенькая тележка.
1
3 / 3 / 0
Регистрация: 31.10.2010
Сообщений: 25
03.11.2010, 22:08 7
И еще: if (num_min=num_max) наверное стоит поменять на if (num_min==num_max)
И зачем еще i и j объявлять ГЛОБАЛЬНЫМИ если они только в циклах используются???
1
19 / 19 / 5
Регистрация: 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, помоги пожалста? мне очень надо, что делать уже и не знаю...
0
В астрале
Эксперт С++
8029 / 4786 / 655
Регистрация: 24.06.2010
Сообщений: 10,558
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;
}
2
C/C++
93 / 93 / 18
Регистрация: 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;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2010, 10:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Ошибок при компиляции нет, но скомпилированное приложение не открывается
Именно проблемы. Ошибок при компиляции не находит, но скомпилированное приложение не открывается....

При компиляции ошибок нет, но выходит пустая консоль
При компиляции ошибок нет, но выходит пустая консоль. Независимо от кода, раньше всё работало...

ошибок в компиляции нет, а при работе выходит ошибка, почему?
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; const int n=2; struct a1{ ...

При компиляции программа не выдаёт ошибок, но в итоге ничего не может сделать
Добрый день! Пишу программу на Delphi. Почему-то при запуске появляется форма со всеми...


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

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

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