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

Не получается отладить программу - C++

Восстановить пароль Регистрация
 
filimoncc
1 / 1 / 1
Регистрация: 02.12.2013
Сообщений: 101
09.12.2013, 18:09     Не получается отладить программу #1
В двумерном массиве удалить все строки, в которых среднее арифметическое элементов является двузначным числом.

Не получаются два момента:
1)Вывести корректно в виде матрицы полученный массив
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
#include <iostream>
 
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int n,m; cout<<"Vvedite n - ctroki i m - ctolbcy  v maccive"<<endl;;cin>>n>>m;
    int a[n][m];
 
    int s=0, sa; int k=0;
 
 
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
            cout<<"a["<<i<<"]["<<j<<"]=";cin>>a[i][j];
        }
    }
 
 
 
 
 
        for(int i=0;i<n; i++)
        {
            for (int j=0;j<m;j++)
            {
                s+=a[i][j];k++;
            }
                sa=s/k;
                if (abs(sa)>9&& abs(sa)<100)
                {
                    for (int j=0;j<m;j++)
                    {
                        a[i][j]=a[i+1][j];
                    }
                }
 
        }
            for (int z=0; z<n; z++)
                    for (int j=0; j<m; j++)
            cout<<"a["<<z<<"]["<<j<<"]="<<a[z][j]<<"\t";
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
09.12.2013, 18:14     Не получается отладить программу #2
тут надо второй массив создавать
filimoncc
1 / 1 / 1
Регистрация: 02.12.2013
Сообщений: 101
09.12.2013, 18:53  [ТС]     Не получается отладить программу #3
jurok_85, Можно код?
Alex5
881 / 616 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
09.12.2013, 19:00     Не получается отладить программу #4
Цитата Сообщение от filimoncc Посмотреть сообщение
C++
1
int a[n][m];
Размеры массива должны быть константными выражениями.
C++
1
2
3
    const int nMax = 100, mMax = 100;
    int n,m; cout<<"Vvedite n - ctroki i m - ctolbcy  v maccive"<<endl;;cin>>n>>m;
    int a[nMax][mMax];
Цитата Сообщение от filimoncc Посмотреть сообщение
C++
1
2
3
4
5
            for (int j=0;j<m;j++)
            {
                s+=a[i][j];k++;
            }
                sa=s/k;
1)Зачем здесь k, если число элементов в любой строке равно m.
2) Перед тем, как складывать элементы a[i][j], надо обнулить s.
C++
1
2
3
4
5
6
7
        k = 0;
        s = 0;
        for (int j=0;j<m;j++)
        {
            s+=a[i][j];k++;
        }
        sa=s/k;
И можно обойтись без переменной k.
C++
1
2
3
4
5
6
        s = 0;
        for (int j=0;j<m;j++)
        {
            s+=a[i][j];
        }
        sa=s/m;
filimoncc
1 / 1 / 1
Регистрация: 02.12.2013
Сообщений: 101
09.12.2013, 19:29  [ТС]     Не получается отладить программу #5
Alex5, со средним арифметическим всё и так ясно. Как корректно удалить строки и вывести получившийся массив?

Добавлено через 24 минуты
???
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
09.12.2013, 20:09     Не получается отладить программу #6
filimoncc
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
#include <iostream>
 
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
 
int main()
{
    srand(time(NULL));
int n,m; cout<<"Vvedite n - ctroki i m - ctolbcy  v maccive"<<endl;;cin>>n>>m;
    int a[n][m];
 
    int  sa; int counter = 0;
 
 
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
 
            a[i][j] = -10 + rand()% 40;
            cout << a[i][j] << " ";
 
        }
        cout << endl;
    }
 
 
 
 
 
        for(int i=0;i<n; i++)
        {
            int k = 0, s = 0;
 
            for (int j=0;j<m;j++)
            {
                s+=a[i][j];k++;
            }
                sa=abs(s/k);
                if (abs(sa)>9&& abs(sa)<100)
                {
                    counter++;
                }
 
        }
        cout << counter << endl;
 
        int newarr[counter][m]; int l = 0;
        for(int i=0;i< n; i++)
        {
            int k = 0, s = 0;
            for (int j=0;j<m;j++)
            {
                s+=a[i][j];k++;
            }
                sa=abs(s/k);
                if (abs(sa)>9 && abs(sa)<100)
                {
                    for(int j = 0 ; j < m; j++)
                    newarr[l][j] = a[i][j];
                    l++;
                }
 
        }
            for (int i=0; i<counter; i++)
                    for (int j=0; j<m; j++)
            cout<<"newarray["<<i<<"]["<<j<<"]="<<newarr[i][j]<<"\t" << endl;
    return 0;
}
filimoncc
1 / 1 / 1
Регистрация: 02.12.2013
Сообщений: 101
09.12.2013, 20:32  [ТС]     Не получается отладить программу #7
jurok_85, работает неправильно, строка 69 записывает в новый массив строку, которую надо удалить.
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
09.12.2013, 20:42     Не получается отладить программу #8
ну тогда поменяй знаки в if (abs(sa)>9&& abs(sa)<100) на if (abs(sa)<9&& abs(sa)>100)
и в новом массиве будут нужные строки

Добавлено через 3 минуты
а точнее такое условие поставь
if (abs(sa)<=9 )

Добавлено через 57 секунд
а точнее такое услоыие поставь
if (abs(sa)<=9 )
filimoncc
1 / 1 / 1
Регистрация: 02.12.2013
Сообщений: 101
09.12.2013, 20:42  [ТС]     Не получается отладить программу #9
jurok_85, поменял и выскочили мусорные числа
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
09.12.2013, 20:49     Не получается отладить программу #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
#include <iostream>
 
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
 
int main()
{
    srand(time(NULL));
int n,m; cout<<"Vvedite n - ctroki i m - ctolbcy  v maccive"<<endl;;cin>>n>>m;
    int a[n][m];
 
    int  sa; int counter = 0;
 
 
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
 
            a[i][j] = -10 + rand()% 40;
            cout << a[i][j] << " ";
 
        }
        cout << endl;
    }
 
 
 
 
 
        for(int i=0;i<n; i++)
        {
            int k = 0, s = 0;
 
            for (int j=0;j<m;j++)
            {
                s+=a[i][j];k++;
            }
                sa=abs(s/k);
                if  (abs(sa)<=9 )
                {
                    counter++;
                }
 
        }
        cout << counter << endl;
 
        int newarr[counter][m]; int l = 0;
        for(int i=0;i< n; i++)
        {
            int k = 0, s = 0;
            for (int j=0;j<m;j++)
            {
                s+=a[i][j];k++;
            }
                sa=abs(s/k);
                if (abs(sa)<=9 )
                {
                    for(int j = 0 ; j < m; j++)
                    newarr[l][j] = a[i][j];
                    l++;
                }
 
        }
            for (int i=0; i<counter; i++)
                    for (int j=0; j<m; j++)
            cout<<"newarray["<<i<<"]["<<j<<"]="<<newarr[i][j]<<"\t" << endl;
    return 0;
}
Alex5
881 / 616 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
09.12.2013, 21:16     Не получается отладить программу #11
C++
1
2
3
4
5
6
                if ( ... ) /* здесь условие для строк, которые остаются в массиве */
                {
                    for(int j = 0 ; j < m; j++)
                    newarr[l][j] = a[i][j];
                    l++;
                }
Добавлено через 22 минуты
jurok_85, каким компилятором Вы пользуетесь? Разве можно определить массив, у которого размеры - переменные величины?
Цитата Сообщение от jurok_85 Посмотреть сообщение
C++
1
int newarr[counter][m];/*Не будет ли здесь ошибки при компиляции*/
filimoncc, а у Вас какой компилятор?
filimoncc
1 / 1 / 1
Регистрация: 02.12.2013
Сообщений: 101
09.12.2013, 21:55  [ТС]     Не получается отладить программу #12
jurok_85, а если среднее арифметическое будет трехзначным числом?

Добавлено через 57 секунд
Alex5, CodeBlocks

Добавлено через 16 минут
Окончательно работающий вариант. Всем спасибо за помощь.

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
#include <iostream>
 
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
 
int main()
{
 
int n,m; cout<<"Vvedite n - ctroki i m - ctolbcy  v maccive"<<endl;;cin>>n>>m;
    int a[n][m];
 
    int  sa; int counter = 0;
 
 
  for (int i=0; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
            cout<<"a["<<i<<"]["<<j<<"]=";cin>>a[i][j];
        }
    }
 
 
 
 
 for(int i=0;i<n; i++)
        {
            int k = 0, s = 0;
 
            for (int j=0;j<m;j++)
            {
                s+=a[i][j];k++;
            }
                sa=abs(s/k);
                if  (abs(sa)<=9 || abs(sa)>=100 )
                {
                    counter++;
                }
 
        }
        cout << counter << endl;
 
        int newarr[counter][m]; int l = 0;
        for(int i=0;i< n; i++)
        {
            int k = 0, s = 0;
            for (int j=0;j<m;j++)
            {
                s+=a[i][j];k++;
            }
                sa=abs(s/k);
                if (abs(sa)<=9 || abs(sa)>=100 )
                {
                    for(int j = 0 ; j < m; j++)
                    newarr[l][j] = a[i][j];
                    l++;
                }
 
        }
            for (int i=0; i<counter; i++)
                    for (int j=0; j<m; j++)
            cout<<"newarray["<<i<<"]["<<j<<"]="<<newarr[i][j]<<"\t" << endl;
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2013, 13:18     Не получается отладить программу
Еще ссылки по теме:

C++ Составить и отладить программу с использованием цикла for
C++ Разработать алгоритм и тесты, написать и отладить программу Выполнить программу, проанализировать результат
Отладить программу циклического процесса C++

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

Или воспользуйтесь поиском по форуму:
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
10.12.2013, 13:18     Не получается отладить программу #13
Цитата Сообщение от Alex5 Посмотреть сообщение
jurok_85, каким компилятором Вы пользуетесь? Разве можно определить массив, у которого размеры - переменные величины?
У меня code::blocks. Ну да конечно можно переменными. Рекомендовано лучше константными переменными. Но можно и простыми, но если знаешь что потом в работе с массивом эту переменную изменять не будешь.
А то вот например в этой программе изменить counter перед последним циклом for
C++
1
2
3
4
5
counter++;
 for (int i=0; i<counter; i++)
                    for (int j=0; j<m; j++)
            cout<<"newarray["<<i<<"]["<<j<<"]="<<newarr[i][j]<<"\t" << endl;
    return 0;
будет уже мусор выдавать.
Yandex
Объявления
10.12.2013, 13:18     Не получается отладить программу
Ответ Создать тему
Опции темы

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