Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
Заблокирован
1

Сложность абстракции, полиморфизм, дублирование и другие

25.11.2011, 23:57. Показов 4400. Ответов 58
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
//структура "матрица"
//Представляет собой обёртку над двухмерным массивом
template<typename TypeT, int _SizeX, int _sizeY>
struct Array2D
{
    Array2D()
    {
        for(int y = 0; y < _sizeY; ++y)
        {
            for(int x = 0; x < _SizeX; ++x)
            {
               Arr[x][y] =  rand()%100 + 1;
            }
        }
    }
    TypeT Arr[_SizeX][_sizeY];
};
 
//создаём 100 штук таких матриц
//каждая матрица будит проинициализирована
//случайными числами
Array2D<int,100,100> SuperArray[100];
 
 
int main()
{
   return 0;
};
Добавлено через 5 минут
Цитата Сообщение от silent_1991 Посмотреть сообщение
proger2030, вы читаете, что вам пишут? Используйте трёхмерные массивы (т.е. массивы двухмерных массивов, с логической точки зрения), в самом верхнем цикле перебирая двухмерные массивы, а во вложенных заполняя каждый из них.
Настоятельно не рекомендую использовать трехмерные массивы.
Более того, крайне не рекомендую использовать двухмерные массивы.

Одномерный массив намного проще для понимания, и гибче в управлении.
Его легче трансформировать во всевозможные состояния.

Если так сильно понадобились многомерные массивы - всегда можно инкапсулировать сложность абстракции внутри нового класса.

Массивы массивов намного гибче и проще в плане всевозможных трансформаций/сортировок и тп.
Не придётся голову ломать над глючной адресной арифметикой многомерных массивов.

Всегда нужно стремится понижать сложность архитектуры. Для этого и существуют классы.

 Комментарий модератора 
Корни темы здесь - Как создать 100 массивов разными значениями ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2011, 23:57
Ответы с готовыми решениями:

Одновременное дублирование строк на другие листы по условию
Всех с Новым годом! Есть таблица данных, ежедневно пополняемая! Задача в том, чтобы при пополнении...

Как сделать дублирование изображения формы 2 на первую с компонентом Panel или другие варианты
Как сделать дублирование изображения с формы 2 и обновление его на форме 1 с помощью Panel или...

Как вычислять сложность алгоритма, или найти асимптотическую сложность любой программки?
Например Вычислить x^n по алгоритму быстрого возведения в степень Добавлено через 43 секунды...

Дублирование базы , или дублирование информациии
Доброго времени суток ! Поставлена задача: мне нужно либо при изменении или добавлении данных...

58
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
27.11.2011, 23:36 41
Author24 — интернет-сервис помощи студентам
fasked, мощно сказано.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
28.11.2011, 00:45 42
Цитата Сообщение от volovzi Посмотреть сообщение
Причём, большинство, тупо из стадного инстинкта, — против Берса. Здравое есть и там, и там. Просто некоторые, например, модераторы, думают, что правы априори, т.к. они модераторы
Ерунда полная. И
Цитата Сообщение от volovzi Посмотреть сообщение
чисто для объективности
ForEveR не модератор. Может причина в том, что большинство в данном случае правильно говорит?

Цитата Сообщение от Bers Посмотреть сообщение
Это типа, если докалебаться больше не до чего, надо докалебаться до грамматики
Bers, Вы, конечно, не обижайтесь, но складывается мнение, что безграмотность - ваше кредо. Вот Вам два простых примера:
C++
1
2
3
4
5
6
7
8
9
//...
const int SIZE(3);
int arr[SIZE] = { 1, 2, 3 };
for ( int i = 0; i < SIZE; ++i )
    std::cout << arr[i] << ' ';
//some changes 
for ( int i = 0; i < SIZE; ++i )
    std::cout << arr[i] << ' ';
//...
C++
1
2
3
4
5
6
7
8
9
10
//...
void dump(const int * arr, size_t size, std::ostream & ost){
    while ( size-- )
        ost << *arr++ << ' ';
}
//...
int arr[SIZE] = { 1, 2, 3 };
dump(arr, SIZE, std::cout);
//some changes
dump(arr, SIZE, std::cout);
В первом есть дублирующийся код, хоть и набран подряд, во втором дублирующегося кода нет не смотря на то, что второй вызов функции скопирован и вставлен.
1
Заблокирован
28.11.2011, 00:54  [ТС] 43
Цитата Сообщение от easybudda Посмотреть сообщение
В первом есть дублирующийся код, хоть и набран подряд, во втором дублирующегося кода нет не смотря на то, что второй вызов функции скопирован и вставлен.
А этого второго вызова функции в исходном коде нет? То есть сам вызов никак не продублирован?

И сам по себе вызов функции - это не код? Это так.. это "не считается" за код, да?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
28.11.2011, 01:14 44
Цитата Сообщение от Bers Посмотреть сообщение
А этого второго вызова функции в исходном коде нет? То есть сам вызов никак не продублирован?
И сам по себе вызов функции - это не код? Это так.. это "не считается" за код, да?
Вот и не знаю - смешно это, или грустно...
По логике программы массив должен два раза выводиться. Первый раз перед изменениями, второй - после. Существенная разница в том, что при изменении вывода (вдруг оказалось, что массив нужно задом на перёд выводить, или поля вывода нужно определённой ширины сделать, да ещё с ведущими нулями, etc...) в первом случае изменения прийдётся в двух местах вносить, а во втором - только в функции вывода. По-моему очень неплохо сначала в таких простых моментах разобраться, а уж потом абстрактные сущности разделять...
0
Заблокирован
28.11.2011, 01:15  [ТС] 45
Цитата Сообщение от easybudda Посмотреть сообщение
Вот и не знаю - смешно это, или грустно...
Вы не ответили на вопрос.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.11.2011, 01:28 46
А этого второго вызова функции в исходном коде нет? То есть сам вызов никак не продублирован?

И сам по себе вызов функции - это не код? Это так.. это "не считается" за код, да?
Тебе уже сказали все про это... Блин. Это бред чистой воды. Это код, но это нельзя назвать дублированием кода.
0
Заблокирован
28.11.2011, 01:36  [ТС] 47
Цитата Сообщение от ForEveR Посмотреть сообщение
Тебе уже сказали все про это... Блин. Это бред чистой воды. Это код, но это нельзя назвать дублированием кода.
Цитата Сообщение от easybudda Посмотреть сообщение
второй вызов функции скопирован и вставлен.
То есть дублирование кода нельзя называть дублированием кода?
Это не у меня бред. Это у вас бред, господа.

Я то понимаю, что код, даже если это всего лишь вызов функции - все равно остаётся кодом.

Функции, собственно для того и придумали, что бы дублировать только маленький кусочек кода, вместо большого тела функции.

А если оптимизировать по скорости - ну вставится само тело вместо вызова. Это уже будит дублированием тела функции, но на уровне компиляции, а не на уровне исходного кода.

И я прекрасно понимаю, что далеко не всякое дублирование кода - это плохо.
Более того, язык практически полностью построен на принципе постоянного дублирования отдельных кусочков кода. И это абсолютно нормально, и логически обоснованно.

А вы свои бредовые объяснения оставьте для того товарища, который заявил, что "дублирование кода - это плохо". А я вашим бредом сыт по горло.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.11.2011, 07:53 48
Bers, Просто ни один здравомыслящий человек не станет называть это дублированием кода. В таком случае, когда для каждой новой программы нам приходится писать точку входа в программу - тоже является дублированием кода. Я считаю, что называть это так - это бред.
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.11.2011, 08:25 49
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Bers Посмотреть сообщение
Это не у меня бред. Это у вас бред, господа.
Цитата Сообщение от ForEveR;2221235[B
]Просто ни один здравомыслящий человек не станет называть это дублированием кода.[/B]
А сам я решил в дискуссию на этот раз не вступать, а просто почитать... похихикать...
3
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
28.11.2011, 10:06 50
Цитата Сообщение от Bers Посмотреть сообщение
В моём понимании, если вы вообще сделали копипаст, то уже сделали дублирование кода.
Удачи Вам в ваших нелёгких начинаниях.
0
Заблокирован
28.11.2011, 13:28  [ТС] 51
Цитата Сообщение от ForEveR Посмотреть сообщение
Bers, Просто ни один здравомыслящий человек не станет называть это дублированием кода. В таком случае, когда для каждой новой программы нам приходится писать точку входа в программу - тоже является дублированием кода. Я считаю, что называть это так - это бред.
У вас в исходном коде каждой новой программы имеется более одной точки входа main() ?
Если нет - тогда у вас проблемы с логикой. Бред у вас в голове.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.11.2011, 13:33 52
Bers, Скорее все же у вас. Я говорю про "дублирование кода" не в одной программе, а вообще. Если для вас вызов функции в программе более 1 раза - это дублирование кода, то почему написание новой программы (в частности точки входа) не является дублированием кода?)
1
Заблокирован
28.11.2011, 14:03  [ТС] 53
Цитата Сообщение от ForEveR Посмотреть сообщение
Bers, Скорее все же у вас. Я говорю про "дублирование кода" не в одной программе, а вообще. Если для вас вызов функции в программе более 1 раза - это дублирование кода, то почему написание новой программы (в частности точки входа) не является дублированием кода?)
Исходный код конкретной программы включает в себя только исходный код этой конкретной программы. Локально не существует никаких других исходных кодов. Ваш К.О.

А ваш идиотский вопрос из серии: "Почему молоток не является дублированием перфоратора. Ведь у них в их устройстве есть очень много похожего, или даже одинакового кода"

Потому что молоток - это инструмент. Который поставляет совершенно другие, отличные от перфоратора услуги.

Тема "инструменты, которые поставляют одинаковые услуги" и тема "дублирование кода" - это принципиально разные темы. А у вас в голове опять всё в куче.

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

А по своей ущерной логике вы вообще скажите: "нуу... это тоже дублирование кода, но за дублирование ммм... как бы не считается"
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.11.2011, 14:05 54
Bers, Это не ущербная логика. Это называется не зацикливаться на мелочах. Чего и вам желаю.
1
Заблокирован
28.11.2011, 14:06  [ТС] 55
Цитата Сообщение от ForEveR Посмотреть сообщение
Bers, Это не ущербная логика. Это называется не зацикливаться на мелочах. Чего и вам желаю.
Я и не зацикливаюсь на мелочах.
На мелочах зациклился тот, кто открыл эту ветку, и начал гнусеть про "дублирование кода", толком не понимая, что есть "дублирование", а что "ни есть".
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.11.2011, 14:08 56
Пора закрывать тему кажется. Она изжила себя.
0
Заблокирован
28.11.2011, 14:09  [ТС] 57
#35 пост
0
silent_1991
28.11.2011, 14:18
  #58
 Комментарий модератора 
Так и сделаем.
0
fasked
28.11.2011, 14:24     Сложность абстракции, полиморфизм, дублирование и другие
  #59

Не по теме:

Цитата Сообщение от Bers Посмотреть сообщение
На мелочах зациклился тот, кто открыл эту ветку, и начал гнусеть про "дублирование кода", толком не понимая, что есть "дублирование", а что "ни есть".
Если уж до такого дошло, то я вынужден вызвать Вас на дуэль :D

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2011, 14:24

Абстракции
Мои работы в стиле абстракций. Работа выполненная несколько месяцев назад.

Неопределенность в абстракции
Добрый день. Есть класс A от которого производится класс В и С. У этих классов есть общий...

Абстракция, уровни абстракции
Как понять это? Может кто-нибудь объяснить более доступным и понятным языком нежели википедия?

Entity Framework и абстракции
Можно сказать &quot;новичковый&quot; вопрос :) Есть сущности, созданные из базы данных. Database First. К...

Задачка с использованием абстракции
Добрый день! подскажите(объясните:)) пожалуйста, что еще необходимо сделать с данной задачей с...

Изучение инкапсуляции и абстракции
Всем доброго вечера у меня очередная лабораторка. Завдання. Створити на мові Java клас, який...


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

Или воспользуйтесь поиском по форуму:
59
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru