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

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

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

Студворк — интернет-сервис помощи студентам
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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.11.2011, 23:57
Ответы с готовыми решениями:

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

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

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

58
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
27.11.2011, 23:36
Студворк — интернет-сервис помощи студентам
fasked, мощно сказано.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
28.11.2011, 00:45
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
В первом есть дублирующийся код, хоть и набран подряд, во втором дублирующегося кода нет не смотря на то, что второй вызов функции скопирован и вставлен.
А этого второго вызова функции в исходном коде нет? То есть сам вызов никак не продублирован?

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

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

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

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

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

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

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

Решение

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

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

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

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

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

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

Не по теме:

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.11.2011, 14:24
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
59
Закрытая тема Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru