Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 11.11.2014
Сообщений: 34
1

Почему в этой программе (n+2) и [m+2] а не просто n и m?

11.11.2014, 16:05. Просмотров 446. Ответов 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
#include "stdafx.h"
#include <iostream>
#include <locale.h>
using namespace std;
void main()
{
    setlocale(LC_ALL, "rus");
    int i, j, n, m, **A, **B;
    cout << "Введите размер массива А \n";
    cin >> n;
    cin >> m;
    A = new int *[n];
    B = new int *[n];
    for (i = 0; i<n + 2; i++)
    {
        A[i] = new int[m + 2];
        B[i] = new int[m + 2];
    }
    cout << "Введите элементы массива \n";
    for (i = 1; i<n + 1; i++)
        for (j = 1; j<m + 1; j++)
            cin >> A[i][j];
    cout << "Массив A \n";
    for (i = 1; i<n + 1; i++)
    {
        for (j = 1; j<m + 1; j++)
            cout << A[i][j] << " ";
        cout << "\n";
    }
    for (i = 1; i<n + 1; i++)
        for (j = 1; j<m + 1; j++)
            if ((A[i][j] == A[i - 1][j - 1]) || (A[i][j] == A[i - 1][j]) || (A[i][j] == A[i - 1][j + 1]) || (A[i][j] == A[i][j - 1]) ||
                (A[i][j] == A[i][j + 1]) || (A[i][j] == A[i + 1][j - 1]) || (A[i][j] == A[i + 1][j]) || (A[i][j] == A[i + 1][j + 1]))
                B[i][j] = 1;
            else
                B[i][j] = 0;
    cout << "Массив B \n";
    for (i = 1; i<n + 1; i++)
    {
        for (j = 1; j<m + 1; j++)
            cout << B[i][j] << " ";
        cout << "\n";
    }
    system("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2014, 16:05
Ответы с готовыми решениями:

почему в этой программе мы каждый раз perem=_BX?
Выделить участок памяти в параграфах, занести в него массив элементов 1. char; 2. int, прочитать...

Почему в этой программе я могу ввести значения только первой переменной и дальше она завершает свою рабо
Привет всем, Почему в этой программе я могу ввести значения только первой переменной и дальше она...

Выбрать файл с БД в программе и совершать с этой БД действия в программе
вообщем проект реализует Тест знаний, работает на БД (xml - ну его), все получилось кроме одного,...

Как в этой программе изменить то что во вкладке "о программе"
Здравствуйте, уважаемый народ. Подскажите как в этой программе изменить то что во вкладке &quot;о...

10
Почетный модератор
Эксперт С++
5836 / 2842 / 390
Регистрация: 01.11.2011
Сообщений: 6,881
11.11.2014, 16:16 2
EvdDm, было б хорошо, если б вы в трех словах сами сказали, что делает данная программа.

А так, если вы говорите про строки четырнадцать-семнадцать, то это называется магические числа. Что они делают - надо копаться в программе.
Может быть просто берут массив с запасиком. Мож под какие-нибудь заголовки строк/столбцов, типа того.
1
Модератор
Эксперт С++
9795 / 8357 / 5090
Регистрация: 18.12.2011
Сообщений: 22,347
11.11.2014, 16:20 3
Кстати
Цитата Сообщение от EvdDm Посмотреть сообщение
A = new int *[n]; B = new int *[n];
тогда тоже надо писать
C++
1
A = new int *[n+2]; B = new int *[n+2];
1
0 / 0 / 0
Регистрация: 11.11.2014
Сообщений: 34
11.11.2014, 16:26  [ТС] 4
Программа написана по заданию: Дан вещественный массив A[N][M]. Будем называть «соседями» элемента А[i][j] такие элементы массива А, соответствующие индексы которых отличаются от i и j не более чем на единицу. Для массива А сформировать массив В, значения элементов которого вычисляется по следующему правилу: если среди соседей а[i][j] есть хотя бы один элемент, совпадающий с а[i][j], то b[i][j]=1; в противном случае b[i][j]=0.

Здесь скорее всего массив с запасом я так понял, но для чего там запас, не могу объяснить преподавателю(
0
Почетный модератор
Эксперт С++
5836 / 2842 / 390
Регистрация: 01.11.2011
Сообщений: 6,881
11.11.2014, 16:31 5
EvdDm, ну, ага. Запас здесь за тем, чтобы при проверке соседних элементов у элементов, находящихся по периметру массива, не возникал выход за границы массива.

Добавлено через 56 секунд
Чтобы дополнительный проверки не вставлять. Хотя это был бы правильный вариант, так как не расходывалась бы вот эта бесполезная память на рамочку.
1
0 / 0 / 0
Регистрация: 11.11.2014
Сообщений: 34
11.11.2014, 16:35  [ТС] 6
Так и думал!
Огромное вам спасибо.
Если не трудно, можете еще взглянуть на то, как работает указатель на указатель в этой программе? Тоже никак не могу разобраться.
Просто взгляните, может вам это понятно и вы сможете объяснить.
0
Почетный модератор
Эксперт С++
5836 / 2842 / 390
Регистрация: 01.11.2011
Сообщений: 6,881
11.11.2014, 16:45 7
Цитата Сообщение от EvdDm Посмотреть сообщение
как работает указатель на указатель в этой программе?
Так же как и везде. Конкретные вопросы есть или общая теория непонятна?
Общая теория это долго. Это надо картинку рисовать.
0
0 / 0 / 0
Регистрация: 11.11.2014
Сообщений: 34
11.11.2014, 16:53  [ТС] 8
Общую теорию мне кажется я уже всё перерыл. Там именно такой ситуации нет!
Смотри, сначала мне интересно, правильно ли я формулирую следующее:
1. Строка 8: "Я объявляю указатель на указатель на А и на В"?
2. Строка 12 и 13: Нужно ли при выделении памяти здесь так же писать [n+2] ?
3. Так же, в 12 и 13 строках я что делаю, приравнивая А и B? Они же были объявлены как указатель на указатель, значит я задаю им адрес указателя? Я правильно понимаю?
0
Модератор
Эксперт С++
9795 / 8357 / 5090
Регистрация: 18.12.2011
Сообщений: 22,347
11.11.2014, 16:59 9
Идея создания массива такая:
1. Надо создать массив адресов строк
Т.е. i-ом элементе массива будет хранится адрес i-ой строки
(с-но имя этого массива будет иметь тип адрес адресов(ну, или указатель на массив указателей). Строки 12 и 13.
Поскольку строк для рамки нужно на 2 больше, то выделяем тоже n+2
2. Для каждого из адресов выделяем память под строку, т.е. инициализируем i-ый элемент
адресом места, где лежит соответствующая строка.
1
0 / 0 / 0
Регистрация: 11.11.2014
Сообщений: 34
11.11.2014, 17:22  [ТС] 10
Но там же у меня в 14 сроке цикл, которые задает элементы для столбцов массива? или я ошибаюсь?
0
Модератор
Эксперт С++
9795 / 8357 / 5090
Регистрация: 18.12.2011
Сообщений: 22,347
11.11.2014, 18:10 11
Естественно, под КАЖДЫЙ из указателей надо выделить память длинной в строку (m+2).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.11.2014, 18:10

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Ошибка в абсолютно просто программе
Помогите, пожалуйста..) Требуется написать программу, которая будет находить сумму n натуральных...

Что не правильно в этой программе?
Здравствуйте все! Познаний в с++ мало, чтаю, пробую учить. В одной из книг упражнение - найти что...

Что неверно в этой программе?
&lt;?php if(!isset ($_SESSION)) { ?&gt; &lt;form action=&quot;&quot; method=&quot;GET&quot;&gt; Введіть...

Извините я не понял в этой программе
Подсчитать, сколько раз строка b входит в строку a, если длина первой меньше. Почему здесь...

Все ли нормально в этой программе?
#include&lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; int PriceInput() { int price;...

Что означает в этой программе K, SR и S?
program laba3; var x,y,sr,z,s,k,u:real; begin writeln(' x y u');...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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