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

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

Вернуться   Форум программистов > Работа для программиста > Ищу работу: резюме, портфолио, отзывы
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2020, 00:00   #1
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию Пишу функции для обработки массивов на с++

Разработки по массивам. Если что-то вам приглянётся пишите на vmastich@inbox.ru.

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

Если вы передаёте массивы в свои функции и не хотите передавать лишние параметры в функции, то данные функции будут вам очень полезны.
Нахождение размера.
Пример вы объявили обычную переменную
Код:
int Q=(int)new int[10];
Далее вы передаёте этот объект как число и получаете размер функцией которую я вам предлагаю.
Нахождение ранга.
Предположим вы собрали многомерный динамический массив такого вида
Цитата:
[2][3][4][5]
и запихнули его в переменную Q, далее вы передали переменную в функцию, и вам нужно узнать что ранг у этого массива равен 4ём. Вы вызываете функцию и получаете ранг из переменной Q.

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

Отправляя вам код с функциями, я отправлю вам видео, на чём основаны мои расчёты. Если вы не поленитесь, то на этих прототипах сможете сделать много интересных функций.
Loksiin12 вне форума Ответить с цитированием
Старый 06.10.2020, 00:30   #2
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Прошу обратить внимание мои типы данных занимают памяти как на этом ресурсе https://metanit.com/cpp/tutorial/2.3.php т.е. откалиброваны очень тонко. Если что-то не получается пишите.
Loksiin12 вне форума Ответить с цитированием
Старый 06.10.2020, 07:19   #3
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
int Q=(int)new int[10];
попахивает шарлатанством. Я ещё допускаю, что можно путём некой магии по указателю узнать у системы, блок какого размера (а байтах) выделен
Но размер элемента массива и размерности самого массива - это какая-такая чёрная магия ? Система об этом не знает. int тоже не знает

Может речь всё же о шаблонных параметрах? Там это всё, в принципе, возможно
Алексей1153 вне форума Ответить с цитированием
Старый 06.10.2020, 18:42   #4
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Я ещё допускаю, что можно путём некой магии по указателю узнать у системы, блок какого размера (а байтах) выделен
Значит всё таки это актуально. Я написал функцию которая строит массивы любого ранга и размеренности. Пока что тоже многопоточная, имеется в виду динамическая позже выложу может будет интересно людям.
Если я написал что я это сделал значит я это сделал.
Loksiin12 вне форума Ответить с цитированием
Старый 11.10.2020, 02:10   #5
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Рубрика2.
Предлагаю вам несколько функций для работы с динамическими/многоконтурными массивами, позже будет имитировано такое со статическим массивом.
1ая может создавать массив любого ранга и размеренности.
2ая может выводить все столбцы или информацию по нужной размеренности.
3яя разрушает такой массив полностью, имеется в виду все размеренности.
Последние выводят единичные параметры: возвращают значение, присваивают его и т.д. В них вы передаёте массив любого ранга и можете управлять этим делом в цикле в ходе выполнения программы.
Я в видео https://youtu.be/wzDQsMQY-b4 кратко показал, как это работает. Если видео будет удалено (потому что я попадал в ситуации когда каналы блокировали) то напишите мне я отправлю вам его на почту.
Loksiin12 вне форума Ответить с цитированием
Старый 11.10.2020, 09:14   #6
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Loksiin12,

1) если оставаться в Си стиле, то лучше использовать не "многомерный" указатель, а обычный + список размерностей
Код:
T* array=0;
int arrat_count=0;
int* dim_list=0;
int dim_count=0;

...функции для работы с ...
2) если всё же используется C++, то это всё выглядит так

Код:
template<typename T>
class CMultiDimArray
{
   std::vector<T> m_array;//тело многомерного массива
   std::vector<size_t> m_dims;//список размерностей
public:
   ...функции для работы с ...
};
в C++ варианте все освобождения памяти будут автоматические
Алексей1153 вне форума Ответить с цитированием
Старый 11.10.2020, 15:41   #7
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
в C++ варианте все освобождения памяти будут автоматические
Делайте так ради Бога. Я собрал функции которые способны эти массивы создавать и разрушать. Есть функция которая может менять ранг. Но их пока мало сделаю будет больше.
Loksiin12 вне форума Ответить с цитированием
Старый 12.10.2020, 07:21   #8
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Loksiin12, в ролике был намёк, что это всё можно приобретать. Уверяю - приобретать в текущем виде никто не будет. Одномерный стандартный вектор в основе - это минимальное условие (но не последнее)

пока что это всё - поделка для саморазвития на языке Си
Алексей1153 вне форума Ответить с цитированием
Старый 13.10.2020, 04:22   #9
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Loksiin12, в ролике был намёк, что это всё можно приобретать. Уверяю - приобретать в текущем виде никто не будет. Одномерный стандартный вектор в основе - это минимальное условие (но не последнее)
Как вы хотите чтобы было? Опишите ваши условия идеи, мне будет над чем подумать.
Loksiin12 вне форума Ответить с цитированием
Старый 13.10.2020, 07:08   #10
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Цитата:
Сообщение от Loksiin12 Посмотреть сообщение
Как вы хотите чтобы было
как хочу я - это абсолютно неважно. Я данный "многоранговый массив" для себя сам напишу за часик-другой, если потребуется

я лишь подсказываю, как это сделать правильно на C++ (пост №6). Память под весь массив выделяется одним вызовом. Полное копирование и освобождение памяти - автоматическое, писать ничего не нужно. Все остальные операции - методы класса, их нужно реализовать

а то, что сейчас показано в ролике - трудноотлаживаемо, трудноиспользуемо и памятеутекательно.
Алексей1153 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функции для анимации шариков Leonid.76 JavaScript, Ajax 0 28.09.2020 18:18
Использование процедур для обработки массивов vaselisa162000 Паскаль, Turbo Pascal, PascalABC.NET 1 01.06.2018 09:14
Алгоритмы обработки массивов GregTar C++ Builder 3 17.07.2014 23:30
Пишу свой 1ый нормальный проект. Кто-нибудь протестируйте мой редактор обработки текста на java плиз monolit9951 Софт 8 09.10.2013 00:23
Программы обработки массивов Ne1StoM Помощь студентам 7 23.05.2011 10:16