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

Программа глючит - C++

Восстановить пароль Регистрация
 
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,147
Завершенные тесты: 1
19.12.2010, 18:51     Программа глючит #1
Написал курсовую.
Программа глючит.
Дана матрица, элементы которой – случайные числа, находящийся в диапазоне [-15;88].
Найти максимальный элемент матрицы, и числа, которые делятся на максимальное число, записать в одномерный массив. Написать функцию, которая из массива передает в функцию main() адрес первого нечетного элемента, и присваивает его переменной в главной функции. Разработать функции для заполнения матрицы, а так же для ее вывода на экран.
Код
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
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
const int n=5;
void inp(int x[][n],int y[]);
int calc(int x[][n],int y[]);
void out(int x[][n],int y[],int k);
 
void main()
{
    srand(time(0));
    int k=0;
    int x[n][n];
    int y[n*n];
    inp(x,y);
    k=calc(x,y);
    out(x,y,k);
 
}
 
void inp(int x[][n],int y[])
{
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            x[i][j]=rand()%103-15;
 
    for(int i=0;i<n;i++)
        y[i]=0;
}
 
int calc(int x[][n],int y[])
{
    int max=x[0][0];
    int k=0;
    for(int i=0;i<n;i++)//MAX
        for(int j=0;j<n;j++)
            if(max<x[i][j])
                max=x[i][j];
    cout<<"Max="<<max<<endl;
    
    for(int i=0;i<n;i++)//Bajanararner
        for(int j=0;j<n;j++)
            if(max%x[i][j]==0)
                y[i]=x[i][j];
 
    for(int i=0;i<n;i++)
        if(y[i]%2!=0 && y[i]!=0)
        {
            k=i;
            break;
        }
                return k;
}
 
void out(int x[][n],int y[],int k)
{
 
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
            cout<<x[i][j]<<" ";
        cout<<endl;
    }
    
    cout<<endl<<endl;
    for(int i=0;i<n;i++)
        cout<<y[i]<<" ";
 
    cout<<endl<<"arajin kent tvi hascen Y zangvaci mej-"<<k<<endl;
 
}


Глюки
1.Иногда выскакивает во время запуска программы окно ошибкиПрограмма глючит
2.Хотел открыть программу чтобы сделать скрин что выше-комп завис...клава мышка-всё. Рестар, открыл прогу,нормально все без всяких окон. Закрыл-комп завис...Рестарт.Открываю ВС08,дебаг программы,окно что выше-скрин.
3.Последний глюк что "убило" меня-17%2=0.Что то нечто фантастическое...что такое.:????
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2841 / 1778 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
19.12.2010, 18:57     Программа глючит #2
У меня вроде код работает, вот
Миниатюры
Программа глючит  
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,147
Завершенные тесты: 1
19.12.2010, 19:00  [ТС]     Программа глючит #3
asics, пардон,это старый код,у меня там некоторые подправки...массив не 5 а 5*5...потому что может быть такое что все числа матрицы могут быть разделены на макс число без остатка..

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
//Trvac e matric,vori tarrer@ [-15:88] mijakayqin patkanox tveren.
//Haytnaberel matrici mecaguyn tarr@,ev nra bajanararnern artagrel mek ayl zangvaci mej.
//Veradarcnum e arajin kent tari hascen ev hxum parametrov arjeqavorum e main() funkciayi arachadrvac popoxakan@.
//Xndir@ lucel funkcianeri ognutyamb.
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
const int n=5;
void inp(int x[][n],int y[]);
int calc(int x[][n],int y[]);
void out(int x[][n],int y[],int k);
 
void main()
{
    srand(time(0));
    int k=0;
    int x[n][n];
    int y[n*n];
    inp(x,y);
    k=calc(x,y);
    out(x,y,k);
    system("pause");
}
 
void inp(int x[][n],int y[])
{
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            x[i][j]=rand()%103-15;
 
    for(int i=0;i<n*n;i++)
        y[i]=0;
}
 
int calc(int x[][n],int y[])
{
    int max=x[0][0];
    int k=0;
    for(int i=0;i<n;i++)//MAX
        for(int j=0;j<n;j++)
            if(max<x[i][j])
                max=x[i][j];
    cout<<"Max="<<max<<endl;
    
    for(int i=0;i<n;i++)//Bajanararner
        for(int j=0;j<n;j++)
            if(max%x[i][j]==0)
                y[i]=x[i][j];
 
    for(int i=0;i<n;i++)
        if(y[i]%2!=0 && y[i]!=0)
        {
            k=i;
            break;
        }
                return k;
}
 
void out(int x[][n],int y[],int k)
{
 
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
            cout<<x[i][j]<<" ";
        cout<<endl;
    }
    
    cout<<endl<<endl;
    for(int i=0;i<n*n;i++)
        cout<<y[i]<<" ";
 
    cout<<endl<<"The addres of the first odd number in the Y array is "<<k+1<<endl;
 
}
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
19.12.2010, 19:03     Программа глючит #4
C++
1
2
3
4
        for(int i=0;i<n;i++)//Bajanararner
                for(int j=0;j<n;j++)
                        if(max%x[i][j]==0)
                                y[i]=x[i][j];
В y больше 5 элементов никаким раком не будет. Советую завести дополнительный индекс.
C++
1
2
3
4
5
6
7
8
int z=0;
for(int i=0;i<n;i++)//Bajanararner
                for(int j=0;j<n;j++)
                        if(max%x[i][j]==0)
                        {
                                y[z]=x[i][j];
                                ++z;
                        }
Ну и размер итогового массива y неплохо бы записать куда-то... Иначе будет выводиться все 25 (и я думаю там будет большинство нулей)

C++
1
2
3
4
5
6
7
        for(int i=0;i<n;i++)
                if(y[i]%2!=0 && y[i]!=0)
                {
                        k=i;
                        break;
                }
                                return k;
Ну и тут поменять вместо n - z
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,147
Завершенные тесты: 1
19.12.2010, 19:10  [ТС]     Программа глючит #5
ForEveR, скопилировал код,сразу же вышла ошибка та..
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
19.12.2010, 19:23     Программа глючит #6
^Tecktonik_KiLLeR, Проверил) Все просто. Деление на ноль.

Добавлено через 5 минут
Я бы сделал так.

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
//Trvac e matric,vori tarrer@ [-15:88] mijakayqin patkanox tveren.
//Haytnaberel matrici mecaguyn tarr@,ev nra bajanararnern artagrel mek ayl zangvaci mej.
//Veradarcnum e arajin kent tari hascen ev hxum parametrov arjeqavorum e main() funkciayi arachadrvac popoxakan@.
//Xndir@ lucel funkcianeri ognutyamb.
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
const int n=5;
 
struct result
{
    int size;
    int k;
};
 
void inp(int x[][n],int y[]);
result calc(int x[][n],int y[]);
void out(int x[][n],int y[],const result& res);
 
void main()
{
        srand(time(0));
        int x[n][n];
        int y[n*n];
        inp(x,y);
        result res=calc(x, y);
        out(x,y,res);
        system("pause");
}
 
void inp(int x[][n],int y[])
{
        for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                        x[i][j]=1+rand()%(103-15);
 
        for(int i=0;i<n*n;i++)
                y[i]=0;
}
 
result calc(int x[][n],int y[])
{
        result res;
        res.size=0;
        res.k=0;
        int max=x[0][0];
        for(int i=0;i<n;i++)//MAX
                for(int j=0;j<n;j++)
                        if(max<x[i][j])
                                max=x[i][j];
        cout<<"Max="<<max<<endl;
        
        for(int i=0;i<n;i++)//Bajanararner
                for(int j=0;j<n;j++)
                        if(max%x[i][j]==0)
                        {
                                y[res.size]=x[i][j];
                                res.size++;
                        }
 
        for(int i=0;i<n;i++)
                if(y[i]%2!=0 && y[i]!=0)
                {
                        res.k=i;
                        break;
                }
                return res;
}
 
void out(int x[][n],int y[],const result& res)
{
 
        for(int i=0;i<n;i++)
        {
                for(int j=0;j<n;j++)
                        cout<<x[i][j]<<" ";
                cout<<endl;
        }
        
        cout<<endl<<endl;
        for(int i=0;i<res.size;i++)
                cout<<y[i]<<" ";
 
        cout<<endl<<"The addres of the first odd number in the Y array is "<<res.k+1<<endl;
 
}
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,147
Завершенные тесты: 1
19.12.2010, 19:25  [ТС]     Программа глючит #7
ForEveR, деление на ноль?О_О ну и где

Добавлено через 41 секунду
ForEveR, не не,там структуры есть...у нас не прошли еще
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
19.12.2010, 19:27     Программа глючит #8
^Tecktonik_KiLLeR, Я тебе говорю как лучше сделать... Можно и по ссылке передать. А на ноль деление происходило здесь.
C++
1
 if(max%x[i][j]==0)
Деление с остатком на ноль как бэ тоже плохо.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,147
Завершенные тесты: 1
19.12.2010, 19:29  [ТС]     Программа глючит #9
Цитата Сообщение от ForEveR Посмотреть сообщение
Можно и по ссылке передать
это тоже не прошли)
Цитата Сообщение от ForEveR Посмотреть сообщение
Деление с остатком на ноль как бэ тоже плохо.


Ну и что можно поменять в условии?можно так?
если неровно 0 то если делится на макс число то...?
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
19.12.2010, 19:31     Программа глючит #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
//Trvac e matric,vori tarrer@ [-15:88] mijakayqin patkanox tveren.
//Haytnaberel matrici mecaguyn tarr@,ev nra bajanararnern artagrel mek ayl zangvaci mej.
//Veradarcnum e arajin kent tari hascen ev hxum parametrov arjeqavorum e main() funkciayi arachadrvac popoxakan@.
//Xndir@ lucel funkcianeri ognutyamb.
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
const int n=5;
 
void inp(int x[][n],int y[]);
int calc(int x[][n],int y[], int* z);
void out(int x[][n],int y[], int k, int z);
 
void main()
{
        srand(time(0));
        int x[n][n];
        int y[n*n];
        inp(x,y);
        int z=0;
        int k=calc(x, y, &z);
        out(x,y,k, z);
        system("pause");
}
 
void inp(int x[][n],int y[])
{
        for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                        x[i][j]=1+rand()%(103-15);
 
        for(int i=0;i<n*n;i++)
                y[i]=0;
}
 
int calc(int x[][n],int y[], int* z)
{
        int max=x[0][0];
        for(int i=0;i<n;i++)//MAX
                for(int j=0;j<n;j++)
                        if(max<x[i][j])
                                max=x[i][j];
        cout<<"Max="<<max<<endl;
        
        for(int i=0;i<n;i++)//Bajanararner
                for(int j=0;j<n;j++)
                        if(max%x[i][j]==0)
                        {
                                y[*z]=x[i][j];
                                (*z)++;
                        }
        int k=0;
        for(int i=0;i<n;i++)
                if(y[i]%2!=0 && y[i]!=0)
                {
                        k=i;
                        break;
                }
                return k;
}
 
void out(int x[][n],int y[],int k, int z)
{
 
        for(int i=0;i<n;i++)
        {
                for(int j=0;j<n;j++)
                        cout<<x[i][j]<<" ";
                cout<<endl;
        }
        
        cout<<endl<<endl;
        for(int i=0;i<z;i++)
                cout<<y[i]<<" ";
 
        cout<<endl<<"The addres of the first odd number in the Y array is "<<k+1<<endl;
 
}
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,147
Завершенные тесты: 1
19.12.2010, 19:58  [ТС]     Программа глючит #11
Цитата Сообщение от ForEveR Посмотреть сообщение
y[*z]=x[i][j]; (*z)++;
уфф что это такое?..

Добавлено через 9 минут
C++
1
2
3
4
5
6
7
 for(int j=0;j<n;j++)
                    if(x[i][j]!=0)
                        if(max%x[i][j]==0)
                        {
                                y[z]=x[i][j];
                                ++z;
                        }
если так?

Добавлено через 53 секунды
да,сработало,в матрице увидел ноль и без всяких окон
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
19.12.2010, 20:32     Программа глючит #12
^Tecktonik_KiLLeR, А ты z прости как передаешь? Если как указатель то -
C++
1
2
                                y[z]=x[i][j];
                                ++z;
Не должно работать.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,147
Завершенные тесты: 1
19.12.2010, 21:50  [ТС]     Программа глючит #13
ForEveR, ну нет,не указатель,как обычный индекс
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
19.12.2010, 21:53     Программа глючит #14
^Tecktonik_KiLLeR, Если как обычный индекс и не по ссылке - вывод не будет верно работать. Ибо размер получится нулевой. Ну или делать по-плохому, т.е. не использовать z в функции out а печатать все 25 элементов массива y.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,147
Завершенные тесты: 1
19.12.2010, 22:02  [ТС]     Программа глючит #15
ForEveR, Тогда лучше второй вариант
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
19.12.2010, 22:09     Программа глючит #16
^Tecktonik_KiLLeR,
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
 //Trvac e matric,vori tarrer@ [-15:88] mijakayqin patkanox tveren.
//Haytnaberel matrici mecaguyn tarr@,ev nra bajanararnern artagrel mek ayl zangvaci mej.
//Veradarcnum e arajin kent tari hascen ev hxum parametrov arjeqavorum e main() funkciayi arachadrvac popoxakan@.
//Xndir@ lucel funkcianeri ognutyamb.
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
const int n=5;
 
void inp(int x[][n],int y[]);
int calc(int x[][n],int y[]);
void out(int x[][n],int y[], int k);
 
void main()
{
        srand(time(0));
        int x[n][n];
        int y[n*n];
        inp(x,y);
                int z=0;
                int k=calc(x, y);
        out(x,y,k);
        system("pause");
}
 
void inp(int x[][n],int y[])
{
        for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                        x[i][j]=1+rand()%(103-15);
 
        for(int i=0;i<n*n;i++)
                y[i]=0;
}
 
int calc(int x[][n],int y[])
{
        int z=0;
        int max=x[0][0];
        for(int i=0;i<n;i++)//MAX
                for(int j=0;j<n;j++)
                        if(max<x[i][j])
                                max=x[i][j];
        cout<<"Max="<<max<<endl;
        
        for(int i=0;i<n;i++)//Bajanararner
                for(int j=0;j<n;j++)
                        if(max%x[i][j]==0)
                                                {
                                y[z]=x[i][j];
                                z++;
                                                }
                int k=0;
        for(int i=0;i<z;i++)
                if(y[i]%2!=0 && y[i]!=0)
                {
                        k=i;
                        break;
                }
                                return k;
}
 
void out(int x[][n],int y[],int k)
{
 
        for(int i=0;i<n;i++)
        {
                for(int j=0;j<n;j++)
                        cout<<x[i][j]<<" ";
                cout<<endl;
        }
        
        cout<<endl<<endl;
        for(int i=0;i<n*n;i++)
                cout<<y[i]<<" ";
 
        cout<<endl<<"The addres of the first odd number in the Y array is "<<k+1<<endl;
 
}
С рандомом сделаешь как тебе самому нужно. Но вот впринципе так будет работать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2010, 19:14     Программа глючит
Еще ссылки по теме:

C++ Глючит деструктор динамическогом массива
C++ Sizeof глючит ?
C++ Глючит сохранение размеров главного окна
задание из книги стивен прата 6 издание глючит. в чем может быть ошибка C++

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

Или воспользуйтесь поиском по форуму:
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,147
Завершенные тесты: 1
20.12.2010, 19:14  [ТС]     Программа глючит #17
ForEveR, Большое спасибо
Yandex
Объявления
20.12.2010, 19:14     Программа глючит
Ответ Создать тему
Опции темы

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