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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2018, 16:36   #1
Сергей9898
 
Регистрация: 25.05.2018
Сообщений: 3
По умолчанию [C++] Нужна помощь с кодом

Подскажите, пожалуйста, как мне исправить код. Преподаватель сказал, что в том месте, где проверяется, является ли число локальным минимумом, происходит выход за границу массива.


Задача: Дан файл, в котором в первой строчке задана размерность матрицы, а далее задана сама матрица.
Найти локальные минимумы и записать в файл значений локального минимума, а так же его расположение в матрице.
Значение в матрице считается локальным минимумом, если оно меньше всех соседних элементов.



Код:
#include <iostream> 
 
#include <fstream> 
 
using namespace std;
 
 
int main()
{
 
    int min = 0;
    int ni = 0;
    int i, j;
    int n, m;
    bool s;
 
 
    ifstream f("in.txt");
    f >> n >> m;
    int **a = new int *[n]; 
    for (int i = 0; i < n; ++i)
        a[i] = new int[m];
 
    
        for (int i = 0; i < n; ++i)
            for (int j = 0; j < m; ++j)
                f >> a[i][j];
    
 
    
 
 
    setlocale(LC_ALL, "russian");
 
 
    ofstream fout("cpp.txt");
 
    fout << "Матрица до обработки: " << endl;
 
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
            fout << a[i][j] << "\t "; fout << "\n";
 
    }
 
 
 
    for (i = 0; i < n; i++)
        for (j = 0; j < m; j++)
        {
            s = true;
            if (i > 0 && a[i - 1][j] <= a[i][j])
                s = false;
            if (j > 0 && a[i][j - 1] <= a[i][j])
                s = false;
            if (i < n - 1 && a[i + 1][j] <= a[i][j])
                s = false;
            if (j < m - 1 && a[i][j + 1] <= a[i][j])
                s = false;
            if (s)
            {
 
                fout << ni + 1 << "-й элемент : " << a[i][j] << " \tСтрока : " << i + 1 << " \tСтолбик : " << j + 1 << endl;
                ni++;
                min++;
            }
        }
    fout << "==============================================" << endl;
    fout << "Кол-во минимумов: " << min << endl;
    fout << "==============================================" << endl;
    fout.close();
 
    system("pause");
 
    for (int i = 0; i < n; i++)
        delete[] a[i];
    delete[] a;
 
    return 0;
 
 
}
Если я заменю ту часть вот этим, будет ли выходит за границы массива?

Код:
if (i + 1 <= n) { if (a[i][j] > a[i + 1][j]) { s = false; }; }
if (i - 1 >= 0) { if (a[i][j] > a[i - 1][j]) { s = false; }; }
if (j + 1 <= n) { if (a[i][j] > a[i][j + 1]) { s = false; }; }
if (j - 1 >= 0) { if (a[i][j] > a[i][j - 1]) { s = false; }; }
if ((i + 1 <= n)&&(j + 1 <= n)) { if (a[i][j] > a[i + 1][j + 1]) { s = false; }; }
if ((i + 1 <= n)&&(j - 1 >= 0)) { if (a[i][j] > a[i + 1][j - 1]) { s = false; }; }
if ((i - 1 >= 0)&&(j + 1 <= n)) { if (a[i][j] > a[i - 1][j + 1]) { s = false; }; }
if ((i - 1 >= 0)&&(j - 1 >= 0)) { if (a[i][j] > a[i + 1][j - 1]) { s = false; }; }

Последний раз редактировалось Вадим Мошев; 29.05.2018 в 19:25.
Сергей9898 вне форума Ответить с цитированием
Старый 28.05.2018, 18:24   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Будет. В первой строчке. У вас нет элементов a[n][j].
p51x вне форума Ответить с цитированием
Старый 28.05.2018, 18:46   #3
Сергей9898
 
Регистрация: 25.05.2018
Сообщений: 3
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Будет. В первой строчке. У вас нет элементов a[n][j].
Не подскажите, как мне это исправить?
Сергей9898 вне форума Ответить с цитированием
Старый 28.05.2018, 19:01   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

бросается в глаза сразу:

000034.png
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь с кодом lilnup C# (си шарп) 4 18.06.2017 17:44
Помощь с кодом Программистер Помощь студентам 0 17.01.2017 21:18
Нужна помощь с кодом игры. игра на Blitz Basic 3D Guerrilla Помощь студентам 0 05.07.2009 16:20
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Нужна помощь с кодом Мучитель excel Microsoft Office Excel 3 05.08.2008 21:40