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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Yakov112
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 69
#1

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

25.10.2012, 00:33. Просмотров 847. Ответов 11
Метки нет (Все метки)

Мне нужно написать функцию или скажите, пожалуйста, правильно ли она составлена в коде

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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2012, 00:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция для двумерного массива (C++):

Функция fill Для двумерного массива - C++
Как использовать функцию fill с двумерным массивом std::fill(array, array + size, 1.0); к примеру есть двумерный массив int...

Шаблонная функция для инициализации двумерного массива - C++
Вот так можно сделать функцию для иниц. двумерного массива типа int. int** CreateArray(int row,int column) { int** arr =...

Функция для удаления строки из двумерного массива - C++
Массив должен передаваться в функцию как параметр. Написать функцию для удаления строки из двумерного массива. Оставшиеся строки должны...

нужна функция для обмена строк двумерного массива на плюсах - C++
доброго времени суток нужна ваша помощь в решении задачи вот здесь она уже решена но это c# а мне нужно точно такаяже прога на плюсах...

Функция печати двумерного массива - C++
Компилируется успешно, но при вызове функции Print() выводя &quot; |1&quot; попадает в бесконечный цикл. void Print(float **M, int n, int m) { ...

Функция сортировки двумерного массива - C++
необходимо написать функцию сортирующую двумерный массив. за основу взял сортировку при помощи указателей типа: for (int g=0; g&lt;n*m;...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
25.10.2012, 11:09 #2
Цитата Сообщение от Yakov112 Посмотреть сообщение
Мне нужно написать функцию или скажите, пожалуйста, правильно ли она составлена в коде
Любая функция, вне зависимости от того как составлена, всегда что-то делает и иногда даже выдает ответ. А вот то что она делает и правильный ли ответ это уже зависит от вашего написания тела функции...
Если ваша функция смотрит каждую строку, но столбец через один и возвращает true когда находит, среди просмотренных значений, первый четный элемент, и возвращает false если не находит таковых элементов то ваша функция работает верно.
1
Yakov112
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 69
25.10.2012, 17:11  [ТС] #3
Цитата Сообщение от MrGrig Посмотреть сообщение
ваша функция работает верно
MrGrig, т.е. я так понимаю задача при нахождении на нечетных местах в каждой строке четного элемента выполнена правильно? и ничего не стоит исправлять?
0
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
25.10.2012, 19:34 #4
Цитата Сообщение от Yakov112 Посмотреть сообщение
MrGrig, т.е. я так понимаю задача при нахождении на нечетных местах в каждой строке четного элемента выполнена правильно? и ничего не стоит исправлять?
нет не правильно, дайте точную формулировку вашего задания и я поправлю вашу функцию
0
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;
}
0
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
25.10.2012, 20:51 #6
хм ну по заданию счас гляну, вроде все нормально единственное ваша функция условия мне немного не нравится
1
Yakov112
0 / 0 / 0
Регистрация: 08.12.2011
Сообщений: 69
25.10.2012, 20:57  [ТС] #7
MrGrig, помогите исправьте)))) а то писал один код, но как оказалось условие задачи не правильно понял...вот пытался исправить
там короче когда смотришь нечетные элементы в строке то как только первый нечетный нашелся можно из этой стоки выходить и сто то типа счетчика сделать, которая следит за хорошими строками.
еще в если в строке на нечетных местах есть четные и нечетное элементы то условие выполнено, а если все четные то нет.
0
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.
0
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 # # # # # #
???
0
valeriikozlov
Эксперт C++
4670 / 2496 / 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;    
}
1
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
0
valeriikozlov
Эксперт C++
4670 / 2496 / 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
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2012, 18:56
Привет! Вот еще темы с ответами:

Функция объявления двумерного массива - C++
Данный код - объявляет двумерный массив arr. Как из этого куска кода сделать функцию? Передаваемые параметры как мне кажется n и m, а...

Функция ввода двумерного массива - C++
Ребят, помогите! Надо написать функцию чтобы с помощью нее мы вводили двумерный массив! Не знаю какие параметры задать и что внутри...

Функция проверки двумерного массива C++ - C++
Здравствуйте! Мне нужна помощь вот в чем - мое полное задание это написать игру пятнашки которая должна состоять из 5 функций!! 1 -...

Шаблонная функция сортировки двумерного массива - C++
Помогите пожалуйста написать шаблонную функцию сортировки двумерного массива (матрицы) любым методом. Пробовал пузырьком, компилятор не...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.10.2012, 18:56
Ответ Создать тему
Опции темы

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