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

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

03.11.2010, 21:17. Показов 1324. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.11.2010, 21:17
Ответы с готовыми решениями:

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

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

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

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

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

Какую размерность ты вводишь, ё?
1
19 / 19 / 5
Регистрация: 17.10.2010
Сообщений: 247
03.11.2010, 21:42  [ТС]
да ни при какой от 2 до 6 не работает, да и 20 пробовал, нивкакую. выдает ту же ошибку. Что выдает у тебя?
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
03.11.2010, 22:04
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
И еще: 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  [ТС]
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
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.11.2010, 00:06
Работает. Но за такие коды надо убивать. Простите.

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
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.11.2010, 10:57
Помогаю со студенческими работами здесь

При компиляции ошибок нет, но на выходе пустая консоль
Помогите, пожалуйста. При компиляции нет ошибок, но на выходе пустая консоль. #include &lt;iostream&gt; using namespace std; ...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru