Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2011, 00:04   #1
AfterLife
Новичок
Джуниор
 
Регистрация: 30.05.2011
Сообщений: 1
По умолчанию Функции(двумерные массивы)

Доброго времени суток.Помогите пожалуйста найти ошибку в коде.
Задание :
Для заданной матрицы размерностью 10 на 10 найти сумму элементов над главной диагональю,подсчитать число локальных минимумов
Каждый пункт задания оформить в виде функции
Вот код,который у меня получился :
Код:
#include <iostream.h>
#include <math.h>
#include <iomanip>
#include <fstream.h>

int vivod(int matrix[10][10]){
int i,j;
for (i=0;i<10; i++)
{for (j=0;j<10; j++)
cout<<matrix[i][j]<<" ";
cout<<endl;}
return 1;
}
int first(int matrix[10][10]){
	int r=10,sum;
for( int i = 1; i < r; ++i)
for(int j = i + 1; j < r; ++j)
sum += abs(matrix[i][j]);
cout <<"summa nad diagonal'u = "<<sum<<" \n";
return sum;
}
int sec(int matrix[10][10]){
	int s,r=10;
	for (int i=1; i<=r; i++)
for (int j=1; j<=r; j++) {
if((matrix[i][j]<matrix[i+1][j])&&(matrix[i][j]<matrix[i][j+1])&&
(matrix[i][j]<matrix[i+1][j+1])&&(matrix[i][j]<matrix[i-1][j])&&
(matrix[i][j]<matrix[i][j-1])&&(matrix[i][j]<matrix[i-1][j-1])&&
(matrix[i][j]<matrix[i-1][j+1])&&(matrix[i][j]<matrix[i+1][j-1])) {
cout <<" matrix["<<i<<"]["<<j<<"]= "<<matrix[i][j]<<";"<<endl;
s++; } }

//cout <<"Kol-vo loc min = "<< s << endl;


return 0;
}
int main(){
int matrix[10][10]={11,14,17,24,11,15,28,17,12,12,
14,11,12,13,14,15,16,17,12,12,
17,13,21,22,24,42,22,16,12,12,
24,66,-9,29,91,43,68,15,12,12,
11,12,13,14,15,16,17,14,12,12,
15,19,20,21,22,23,24,13,12,12,
28,26,27,28,29,-5,31,12,12,12,
17,17,16,15,14,13,12,11,12,12,
15,19,20,21,22,23,24,13,12,12,
15,19,20,21,22,23,24,13,12,12};
vivod(matrix);
first(matrix);
sec(matrix);
return 0;
}
Конкретно,у меня не выводит сумму элементов и ЧИСЛО локальных минимумов.Помогите пожалуйста найти ошибку.Заранее благодарен.
AfterLife вне форума Ответить с цитированием
Старый 31.05.2011, 12:11   #2
RomanHouse
 
Аватар для RomanHouse
 
Регистрация: 29.05.2011
Сообщений: 6
По умолчанию

Ну во первых элементы массива начинаются с немера 0. Зачем функция vivod типа int? пускай void будет, она ничего овзвращать не должна. Ошибка в обходе массива. Твой код сильно разберать не стал, скидываю свой и сравни его со своим, ясно видно как надо правильно обойти массив (приблизительно правельно, на конкурс алгоритмов мне не идти))

Код:
#include <iostream>
using namespace std;

void wywod(int arr[10][10])
    {
        for (int i=0; i<10; i++)
        {
            for (int j=0; j<10; j++)
            {
                cout<<arr[i][j]<<" ";
            }
            cout<<endl;
        }
    }

int diag(int arr[10][10])
    {
        int sum=0;
        for(int i=0; i<10; i++)
        {
            int j=i+1;
            if(j<=9) sum+=arr[i][j]; else sum+=0;
        }
        return sum;
    }

int lokmin(int arr[10][10])
    {
        int kmin=0;
        for(int j=0; j<10; j++)
        {
            int i=0;
            if((arr[i][j]<arr[i+1][j]) && (arr[i][j]<arr[i+1][j+1]) && (arr[i][j]<arr[i+1][j-1]) && (arr[i][j]<arr[i][j+1])
               && (arr[i][j]<arr[i][j-1]))
               {
                   kmin++;
                   cout<<"arr["<<i+1<<"]"<<"["<<j+1<<"] = "<<arr[i][j]<<endl;
               }
        }
        for (int i=1; i<9; i++)
        {
            for(int j=0; j<10; j++)
            {

                if((arr[i][j]<arr[i+1][j])  && (arr[i][j]<arr[i-1][j]) && (arr[i][j]<arr[i][j+1])
                   && (arr[i][j]<arr[i][j-1]) && (arr[i][j]<arr[i-1][j-1]) && (arr[i][j]<arr[i-1][j+1])
                   && (arr[i][j]<arr[i+1][j+1]) && (arr[i][j]<arr[i+1][j-1]))
                {
                    kmin++;
                    cout<<"arr["<<i+1<<"]"<<"["<<j+1<<"] = "<<arr[i][j]<<endl;
                }
            }
        }
        for(int j=0; j<10; j++)
        {
            int i=9;
            if((arr[i][j]<arr[i-1][j]) && (arr[i][j]<arr[i-1][j+1]) && (arr[i][j]<arr[i-1][j-1]) && (arr[i][j]<arr[i][j+1])
               && (arr[i][j]<arr[i][j-1]))
               {
                   kmin++;
                   cout<<"arr["<<i+1<<"]"<<"["<<j+1<<"] = "<<arr[i][j]<<endl;
               }
        }
        return kmin;
    }


int main()
{
    int arr[10][10]=
    {
        11,14,17,24,11,15,28,17,12,12,
        14,11,12,13,14,15,16,17,12,12,
        17,13,21,22,24,42,22,16,12,12,
        24,66,-9,29,91,43,68,15,12,12,
        11,12,13,14,15,16,17,14,12,12,
        15,19,20,21,22,23,24,13,12,12,
        28,26,27,28,29,-5,31,12,12,12,
        17,17,16,15,14,13,12,11,12,12,
        15,19,20,21,22,23,24,13,12,12,
        15,19,20,21,22,23,24,13,12,12
    };
    wywod(arr);
    cout<<"summa nad diagonalu = "<<diag(arr)<<endl;
    cout<<"kolichestwo lokmin = "<<lokmin(arr);

    return 0;
}
RomanHouse вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерные массивы NagareBoshi Помощь студентам 2 15.05.2011 13:57
двумерные массивы kop Общие вопросы C/C++ 1 15.05.2011 00:36
двумерные массивы kop Общие вопросы C/C++ 3 14.05.2011 22:59
двумерные массивы Konfetkaa Помощь студентам 2 15.03.2010 13:55
Процедуры и функции, двумерные массивы. (QBasic) poad_hok Помощь студентам 2 27.05.2009 18:59