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

Функция для двумерного массива - C++

Восстановить пароль Регистрация
 
Yakov112
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 69
25.10.2012, 00:33     Функция для двумерного массива #1
Мне нужно написать функцию или скажите, пожалуйста, правильно ли она составлена в коде

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
в каждой строке существуют элементы на нечетных местах нечетные
*/
bool uslov (int n, int a[N][N])
{
    int k=0;
    for(int i=0; i<n; i++)  //перебор по строкам
    {
        for(int j=0; j<n; j+=2)  // цикл для просмотра элементов в строке
            if(a[i][j]%2==1)return true;
        break;
        k++;
    }   
    if(k==n)
        return true;
    else
        return false;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
25.10.2012, 11:09     Функция для двумерного массива #2
Цитата Сообщение от Yakov112 Посмотреть сообщение
Мне нужно написать функцию или скажите, пожалуйста, правильно ли она составлена в коде
Любая функция, вне зависимости от того как составлена, всегда что-то делает и иногда даже выдает ответ. А вот то что она делает и правильный ли ответ это уже зависит от вашего написания тела функции...
Если ваша функция смотрит каждую строку, но столбец через один и возвращает true когда находит, среди просмотренных значений, первый четный элемент, и возвращает false если не находит таковых элементов то ваша функция работает верно.
Yakov112
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 69
25.10.2012, 17:11  [ТС]     Функция для двумерного массива #3
Цитата Сообщение от MrGrig Посмотреть сообщение
ваша функция работает верно
MrGrig, т.е. я так понимаю задача при нахождении на нечетных местах в каждой строке четного элемента выполнена правильно? и ничего не стоит исправлять?
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
25.10.2012, 19:34     Функция для двумерного массива #4
Цитата Сообщение от Yakov112 Посмотреть сообщение
MrGrig, т.е. я так понимаю задача при нахождении на нечетных местах в каждой строке четного элемента выполнена правильно? и ничего не стоит исправлять?
нет не правильно, дайте точную формулировку вашего задания и я поправлю вашу функцию
Yakov112
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 69
25.10.2012, 20:24  [ТС]     Функция для двумерного массива #5
MrGrig, в каждой строке существуют элементы на нечетных местах нечетные - это и есть точная формулировка...а если совсем подробно вот код программы так написано полное условие нужно выполнить первое условие(второе работает отлично

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
/*
 
Условие задачи:
 
Дан двухмерный массив (вектор) n целых чисел.
Ввод функцией void inMas1(int& n,int a[N]), вывод массива функцией void outMas1(int n,int a[N]) 
Если условие выполнено (функция типа bool), то выполнить пребразование (функция типа void) и выполнить вычисление (функция типа int)
 
 
Условие на элементы в строках-столбах двухмерного массива
 
1.в каждой строке существующие элементы на нечетных местах нечетные
2. Вычислить сумму элементов в области 8.
 
*/
#include<iostream>
#include<locale>
#define N 100
 
using namespace std;
 
bool uslov (int n, int a[N][N])
{
    int k=0;
    for(int i=0; i<n; i++)  //перебор по строкам
    {
        for(int j=0; j<n; j+=2)  // цикл для просмотра элементов в строке
            if(a[i][j]%2==1)return true;
        break;
        k++;
    }   
    if(k==n)
        return true;
    else
        return false;
}
 
void inMas1(int& n,int a[N][N])
{
    cout<<"\nВведите элементы матрицы A \n";
    for (int i=0; i<n; i++)      //цикл по переменной i, в которой перебираем строки матрицы
        for (int j=0; j<n; j++)  //цикл по переменной j, в котором перебираем элементы внутри строки
        {   
            cout<<"a["<<i<<"]["<<j<<"]=";
            cin>>a[i][j];    //ввод очередного элемента матрицы
        }   
}
 
void outMas1(int n,int a[N][N])
{
    cout<<"\nВы ввели матрицу A \n";
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<n; j++)//цикл по переменной i, в котором перебираем строки матрицы
        cout<<a[i][j]<<"\t"; //вывод очередного элемента матрицы
        cout<<endl; //переход на новую строку после вывода всех элементов строки
    }
}
 
void sum(int n, int a[N][N])
{
    int s=0;
    for(int i=0;i<(n/2);i++)
        for(int j=0;j<(n/2);j++)
            if(j<=i) s+=a[i][j];
    cout<<"сумма равна "<<s<<endl;
}
 
int main()
{
    setlocale (LC_ALL, "RUS");
    int i,j,n,m,a[N][N];
    cout<<"n="; //ввод количества строк
    cin>>n;
                                                //cout<<"m="; //ввод количества столбцов
                                                //cin>>m;
    inMas1(n,a);
    outMas1(n,a);
    if(uslov(n,a))
    {
        cout<<"\nВерно, на нечетных местах стоят нечетные элементы"<<endl;
        sum(n,a);
    }
    else
        cout<<"\nERROR!!!Матрица не подходит по условию!!!"<<endl;
    
    return 0;
}
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
25.10.2012, 20:51     Функция для двумерного массива #6
хм ну по заданию счас гляну, вроде все нормально единственное ваша функция условия мне немного не нравится
Yakov112
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 69
25.10.2012, 20:57  [ТС]     Функция для двумерного массива #7
MrGrig, помогите исправьте)))) а то писал один код, но как оказалось условие задачи не правильно понял...вот пытался исправить
там короче когда смотришь нечетные элементы в строке то как только первый нечетный нашелся можно из этой стоки выходить и сто то типа счетчика сделать, которая следит за хорошими строками.
еще в если в строке на нечетных местах есть четные и нечетное элементы то условие выполнено, а если все четные то нет.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
25.10.2012, 20:59     Функция для двумерного массива #8
Цитата Сообщение от Yakov112 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
void sum(int n, int a[N][N])
{
* * int s=0;
* * for(int i=0;i<(n/2);i++)
* * * * for(int j=0;j<(n/2);j++)
* * * * * * if(j<=i) s+=a[i][j];
* * cout<<"сумма равна "<<s<<endl;
}
вы уверены что функция должна работать именно так? вросто таким образом посчитаются только эти элементы

C++
1
2
3
4
5
6
7
ij 0  1  2  3  4  5
0  *  *  *  #  #  #
1  #  *  *  #  #  #
2  #  #  *  #  #  #
3  #  #  #  #  #  #
4  #  #  #  #  #  #
5  #  #  #  #  #  #
* выделены элементы которые просуммируются
просто я немного не понял что есть
Цитата Сообщение от Yakov112 Посмотреть сообщение
2. Вычислить сумму элементов в области 8.
Yakov112
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 69
25.10.2012, 23:32  [ТС]     Функция для двумерного массива #9
Цитата Сообщение от MrGrig Посмотреть сообщение
вы уверены что функция должна работать именно так? вросто таким образом посчитаются только эти элементы
да мне это и нужно, и эта часть проги работает, у меня не правильно как я понял реализовано первое условие "в каждой строке существуют элементы на нечетных местах нечетные" выше в проге опечатка в слове "существующие" нужно !именно! "существуют"

Добавлено через 4 минуты
т.е. не обязательно чтобы все элементы на нечетных местах в строке были нечетные, это условие не верно только тогда когда все элементы на нечетных местах в строке будут четные

Добавлено через 2 часа 22 минуты
Цитата Сообщение от MrGrig Посмотреть сообщение
ij 0 1 2 3 4 5
0 * * * # # #
1 # * * # # #
2 # # * # # #
3 # # # # # #
4 # # # # # #
5 # # # # # #
а почему эти то?
разве не
Код
ij  0 1 2  3 4 5
0 * # # # # #
1 * * # # # #
2 * * * # # #
3 # # # # # #
4 # # # # # #
5 # # # # # #
???
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.10.2012, 06:11     Функция для двумерного массива #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool uslov (int n, int a[N][N])
{
    for(int i=0; i<n; i++)  //перебор по строкам
    {
        for(int j=0; j<n; j+=2)  // цикл для просмотра элементов в строке
            if(a[i][j]%2==1)
                break;
        if(j==n)
            return false;    
    }
    return true;    
}
Yakov112
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 69
26.10.2012, 16:00  [ТС]     Функция для двумерного массива #11
valeriikozlov,
Цитата Сообщение от valeriikozlov Посмотреть сообщение
if(j==n)
а можно узнать почему тут j? ведь мне нужно проверить,что в каждой строке существует нечетный элемент на нечетном месте, а не то что если этот элемент находится на n-ом месте
примеры матрицы:
верная

Код
ij0 1 2
0 1 2 4
1 2 3 1
2 1 3 5
- это верная матрица и ответ true

Код
ij0 1 2
0 1 2 4
1 2 3 1
2 2 6 4
- это уже не верная и результат false
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2012, 18:56     Функция для двумерного массива
Еще ссылки по теме:

C++ Шаблонная функция сортировки двумерного массива
Функция для удаления строки из двумерного массива C++
C++ Функция проверки двумерного массива C++

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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.10.2012, 18:56     Функция для двумерного массива #12
У меня ошибка в коде - упустил что j увеличивается на 2, а не на один. Вот так будет правильно (заодно смотрите комментарии к коду, которые дадут ответы на Ваши вопросы):
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool uslov (int n, int a[N][N])
{
    for(int i=0; i<n; i++)  //перебор по строкам
    {
        for(int j=0; j<n; j+=2)  // цикл для просмотра элементов в строке
            if(a[i][j]%2==1)// если встретили в строке i на нечетном месте нечетный элемент, прекращаем дальше смотреть эту строку (и в этом случае j остается меньше n)
                break;
        if(j>=n)//вот это условие выполниться, если в строке i нет ни одного нечетного элемента на нечетном месте
            return false;// поэтому дальше матрицу можно не смотреть а вернуть false
    }
    return true;// если дошли сюда, то значит в каждой строке есть хотя бы один нечетный элемент на нечетном месте, поэтому возвращаем true
}
Yandex
Объявления
26.10.2012, 18:56     Функция для двумерного массива
Ответ Создать тему
Опции темы

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