Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.68
Izual
 Аватар для Izual
93 / 118 / 6
Регистрация: 13.11.2012
Сообщений: 1,531
#1

Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур - C++

18.02.2014, 14:05. Просмотров 2709. Ответов 47

Сабж. Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур или... пободного рода простых для восприятия методов.
Поясню.
Пишу базу дынных, используя структуры я могу получить динамически кол-во строк исходя из данных в структуре.
Например:
C++
1
2
3
4
5
6
struct addition
{
    char m[10][20];
};
addition *ma;
addition *mae;
Т.е. При использовании такого вида структуры, я могу создать N-ое кол-во строк динамически с помощью оператора New.
C++
1
2
int MK=5;
    ma=new addition[MK];
Но вот кол-во членов не может быть динамическим на сколько я знаю, т.е. нельзя в структуре написать: m[n][j]
Где заранее будет проинициализированна глобальная переменная типа int, а перед определением самой структуры, я бы написал что например n = 10, j = 30...
Ещё интересует вопрос с разнородными переменными, например я вот захочу чтоб в структуре было char[], int, float, WORD типы переменных... Посоветовали юзать тип VARIANT, однако как его юзать, если кол-во бит выделенное для каждого типа переменных - будет различаться...
В общем нужен простой подход(в синтаксисе) к данному вопросу.
И повторюсь - классы и векторы не предлагать, они слишком сложны в синтаксисе.(переубеждать меня не надо, данная тема не для этого создана).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2014, 14:05     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур
Посмотрите здесь:

Вывод переменных разного типа через TextOut() C++ WinAPI
C++ Хранение в массиве данных разного типа
C++ Передать массив элементов(типа int) объекта, в функцию из массивов(типа int)
Определения знака переменных разного типа C++
C++ Массив шаблонов или как обратиться к элементам разного типа, хранящиеся в одном "списке" по индексу
C++ Создать программу обработки массивов структур используя структурные переменные и переменные типа объеденения
Сортировка массивов разного типа C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1599 / 991 / 117
Регистрация: 27.09.2009
Сообщений: 1,911
Завершенные тесты: 1
18.02.2014, 16:37     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #2
Резюмируя: вы не хотите использовать для решения своих задач средства, которые для них предлагает язык C++.
Рекомендация: сменить язык программирования на тот, который предоставляет приемлемые для вас средства.
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
18.02.2014, 17:59     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #3
Izual, а что мешает сделать массив m двумерной ссылкой?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct addition {
    char **m; // Под двумерный динамический массив 
};
 
int main() {
    int n = 10, k = 30, mk = 5;
    addition *ma = new addition[mk]; // mk элементов
    
    for (int i = 0; i < mk; i++) {
        ma[i].m = new char*[n]; // n строк
        for (int j = 0; j < n; j++)
            ma[i].m[j] = new char [k]; // k символов в строке
    }
    /*
    * Тут куча другого кода
    */
    return 0;
}
И зачем "ООП" в заголовке, если предполагается не использовать ООП?

Кстати, без использования классов и векторов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct addition {
    char **m; // Под двумерный динамический массив 
    void init(int n, int k);
};
 
void addition::init(int n, int k) {
    m = new char*[n]; // n строк
    for (int j = 0; j < n; j++)
        m[j] = new char [k]; // k символов в строке
}
 
int main() {
    int n = 10, k = 30, mk = 5;
    addition *ma = new addition[mk]; // mk элементов
    
    for (int i = 0; i < mk; i++)
        ma[i].init(n, k);
    /*
    * Тут куча другого кода
    */
    return 0;
}
Цитата Сообщение от Izual Посмотреть сообщение
классы и векторы не предлагать
Цитата Сообщение от Izual Посмотреть сообщение
данная тема не для этого создана
Может, стоило в раздел языка Си идти?
Izual
 Аватар для Izual
93 / 118 / 6
Регистрация: 13.11.2012
Сообщений: 1,531
18.02.2014, 18:04  [ТС]     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #4
Цитата Сообщение от Nick Alte Посмотреть сообщение
Резюмируя: вы не хотите использовать для решения своих задач средства, которые для них предлагает язык C++.
Рекомендация: сменить язык программирования на тот, который предоставляет приемлемые для вас средства.
Средств много. У меня лично совершенно иной подход к программированию, если он отличается от вашего - то это не значит что он не правильный. (тоже самое что: "Возраст ещё не говорит о наличии мудрости")
Язык Си предлагает массу вариаций, но синтаксис навороченных классов - через чур сложен для понимания, особенно я замечаю что когда проходит довольно длительное время, а ваша программа устаревает, то начиная опять в ней копаться - классы сильно затрудняют жизнь.
Это лично моё мнение, спорить со мной не надо, и не надо мне предлагать того что мне не надо. Если бы я спросил в теме тот вопрос на который вы дали ответ, то тема бы называлась по другому, а вы спамите, потому что не по делу ответили.
С++ в свою очередь даёт массу возможностей, которые просто надо додумать как реализовать.
У кого то в подписи было изречение, мол "настоящий программист пишет код, который понятен даже школьнику", с чем я полностью согласен.
В Си есть структуры, есть динамическое выделение памяти, есть массивы, есть даже готовая структура типов VARIANT. Так что вы мне тут советуете о смене языка, если всё что надо есть. Не хватает только практических навыков и знаний, чего я и ищу.

Добавлено через 3 минуты
Цитата Сообщение от elivin Посмотреть сообщение
Izual, а что мешает сделать массив m двумерной ссылкой?
Может, стоило в раздел языка Си идти?
Спасибо большое, пойду разбераться. То что вы мне написали как раз то что нужно, хотя я ещё не доконца въехал в "ссылки"... как они храняться, где, и т.п. подводные камни, ну время есть... всё в переди =)

По поводу раздела "Си", не думаю что он подойдёт, структуры же это уже ООП принципы(а значит ++), а тем более я всё же собираюсь использовать VARIANT, там уж точно будут фичи с классами(хотя они будут идти как добавочное, что мне изучать нет нужды).
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
18.02.2014, 18:19     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #5
Пардон, не ссылки, а указатели, конечно же

Цитата Сообщение от Izual Посмотреть сообщение
структуры же это уже ООП принципы
Структуры в языке Си и в C++ - разные вещи. Первый мой пример запустится и будет работать (если циклы подправить), если его собрать Си'шным компилятором, второй - нет. В языке Си структуры не имеют отношения к ООП.
Izual
 Аватар для Izual
93 / 118 / 6
Регистрация: 13.11.2012
Сообщений: 1,531
18.02.2014, 18:42  [ТС]     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #6
Цитата Сообщение от elivin Посмотреть сообщение
Пардон, не ссылки, а указатели, конечно же


Структуры в языке Си и в C++ - разные вещи. Первый мой пример запустится и будет работать (если циклы подправить), если его собрать Си'шным компилятором, второй - нет. В языке Си структуры не имеют отношения к ООП.
Что ссылки, что указатели для меня пока что тёмный лес.. хотя использую постольку поскольку =)

Хмм, в книге Хабибулина, по которой я изучаю Си\Си++ структуры помещены в раздел ООП, вот я и решил что это уже ООП. Но есть другая сторона медали, в разделе чистого Си маловато народу... Да и я использую всё же операторы New и Delete, которые относятся к С++. Вообще предполагаю что из плюсов я многим чем пользуюсь, тем более что програмлю под WinApi, а там всё же ++ мне кажется =)
Сам принцип ООП, как объектов - для меня несёт немного другой смысл, нежели для большинства(имхо). В принципе даже сам массив - это уже объект, хотя по причине того что в него не помещяется разнородного типа данные - это выходит за рамки объекта, но зато с этой задачей справляется структура.
Кстати, а что по поводу разных типов данных? Я тут в книге увидел пример с использованием unsigned:
C++
1
2
3
4
5
struct phone{
char ab[100];
unsigned home: 1;
unsigned sell: 2;
};
Типа под переменную выделяется определённое кол-во бит... я так понял что это то что мне надо для реализации "разнородного типа данных", которые будут определены только перед заданием самой структуры.
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
18.02.2014, 19:27     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #7
Цитата Сообщение от Izual Посмотреть сообщение
структуры помещены в раздел ООП
Значит, это книга по C++. Язык Си вообще с ООП не связан. А вот в C++ между классами и структурами мне известно только одно отличие - параметры доступа и наследования по умолчанию. В классах это private, а в структурах - public. Если указывать их в явном виде, то разницы никакой. (Да, у структур в плюсах тоже есть конструкторы/деструкторы/методы/права доступа)

Цитата Сообщение от Izual Посмотреть сообщение
програмлю под WinApi, а там всё же ++
WinAPI - не часть C++. Его можно использовать и в Си, и в паскале, и мало ли ещё в каких языках.

Цитата Сообщение от Izual Посмотреть сообщение
принцип ООП, как объектов
ООП - это не работа с объектами, как может показаться из названия. Вернее, не так, а работа с объектами - не признак ООП. Если перевести пример к ООП виду, получится примерно так (и то неидеально вышло):
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
struct addition {
    addition();
    void init(int n, int k);
    // Тут другие публичные методы
private:
    char **m;
};
 
addition::addition() {
 
}
 
void addition::init(int n, int k) {
    m = new char*[n]; // n строк
    for (int j = 0; j < n; j++)
        m[j] = new char [k]; // k символов в строке
}
 
int main() {
    int n = 10, k = 30, mk = 5;
    addition *ma = new addition[mk]; // mk элементов
    
    for (int i = 0; i < mk; i++)
        ma[i].init(n, k);
    /*
    * Тут куча другого кода
    */
    return 0;
}
Цитата Сообщение от Izual Посмотреть сообщение
Типа под переменную выделяется определённое кол-во бит
Ага, только я таким не пользуюсь, так что тут особо не помогу.
Izual
 Аватар для Izual
93 / 118 / 6
Регистрация: 13.11.2012
Сообщений: 1,531
18.02.2014, 20:08  [ТС]     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #8
Книга "Профессиональное программирование на языке высокого уровня С/С++".
Кстати раздел в котором находится описание структур, звучит "Расширение языка Си в С++"... Т.е. всё таки плюсы =)
По поводу отличия, синтаксис сложный у классов и векторов, очень много символов которые затрудняют понимание, всякие двойные >> << :: и т.п. а потом всё это вместе друг с другом... Получается просто "херня" =)
Для меня важен синтаксис, потому что я буду строить интерпритатор(если я правильно его назвал) текста, т.е. т.к. в Windows нет встроенного компилятора, мне придётся в программе реализовать алгоритм чтения и приминения блок схем пользовательских функций. Не хотелось бы чтоб там присутствовал сложный синтаксис, тем более что парсить в таком случае файл с кодом, который создаст программа исходя из блок-схемы будет просто очень тяжело. А уж если потом вылезет ошибка, то в создаваемом файле "чёрт голову сломает", всё должно быть просто как автомат АК.(хотя бы потому что я хочу и авто проверку на ошибки сделать и способ устранения ошибок, чтоб всё было автономно по максимуму)

Я понимаю что WinApi это всего лишь библиотека, однако для её полного использования всё же С++ (тем более что я использую ещё и OLEAUTO, для работы с Excel импорт-экспортом, а там используются классы).

Говорю же мой взгляд на ООП иной, я буквально всё воспринимаю.(в этом заслуга вед и буквицы)

Кстати, а вот если я в цикле задания массива захочу чтоб например у меня в 3-ей строке было отличительное кол-во элементом, то ничего страшного в этом не будет?... Например так:
C++
1
2
3
4
5
6
7
for (int j = 0; j < n; j++)
{
 if(j!=2)
  ma[i].m[j] = new char [k]; // k символов в строке
 else
  ma[i].m[j] = new char [dk]; // dk символов в строке
}
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
18.02.2014, 20:35     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #9
Цитата Сообщение от Izual Посмотреть сообщение
всякие двойные >> << :: и т.п.
>> и << - это побитовый сдвиг на самом деле. Просто в std::cin и std::cout они перегружены.
Цитата Сообщение от Izual Посмотреть сообщение
т.к. в Windows нет встроенного компилятора, мне придётся в программе реализовать алгоритм чтения и приминения блок схем пользовательских функций.
Честно говоря, вообще не понял, о чём речь. Может, лучше установить нормальную IDE? Большинство современных IDE предоставляют проверку синтаксиса на лету, составление деревьев классов/функций/переменных/etc и много других плюшек.
Цитата Сообщение от Izual Посмотреть сообщение
(тем более что я использую ещё и OLEAUTO, для работы с Excel импорт-экспортом, а там используются классы)
Подозреваю, что для Си и для C++ просто разная реализация. Просто составлена в соответствии с парадигмами языка.
Цитата Сообщение от Izual Посмотреть сообщение
мой взгляд на ООП иной
Это не меняет самого ООП
Цитата Сообщение от Izual Посмотреть сообщение
то ничего страшного в этом не будет?
Ничего. Только в структуре надо бы хранить размер массива. И для этого лучше воспользоваться методами структуры.
Izual
 Аватар для Izual
93 / 118 / 6
Регистрация: 13.11.2012
Сообщений: 1,531
18.02.2014, 22:13  [ТС]     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #10
Сдвиги.. что то слышал )))) Но речь не именно о этих символах, а вообще о синтаксисе при классовом программировании, там этих символов постоянно пачками, это раздражает. Структуры проще - всего льшб точка - как разделитель.

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

На обычном Си не всё реализованно под Excel и удобства намного меньше. А тем более новые версии экселя выходят, так новые фичи тока под ++ пишутся(и то, OLEAUTO уже забросили, там что то другое мутят)

Взгляд меняет всё! Только с помощью взгляда на вещи мы видим например, что андроид - "куй проссыш" как настроить, а iOS - прост на столько, что 5-и летний ребёнок поймёт.

Размем будет естественно в виде отдельной переменной. Только что то я не понял, что значит "в самой структуре"?...Ну т.е. я понял это как отдельную переменную, но я бы хотел её хранить в другой подобной динамической структуре... Которая будет описывать таблицы на основе той структуры которую мы тут описываем... ололо, называется "сам то понял что сказал")))) Но на самом деле я знаю что я имею ввиду, но "по другому не скажеш" =)

Вот теперь осталась последняя задача, с типами данных. Хотя тут будет немного размытее, т.к. вот у меня динамический массив в структуре уже есть, но он то мне нужен для того чтоб выделять память под разного рода типы... Типа чтоб m[0] было например char(и размер j - был бы задаваемым), m[1] было int.. и т.д.

Кстати суть то хоть того что я хочу сделать понятна?.. И куда может вывести подобная программа всю индустрию обработки баз данных?... Если реализовать как надо - 1С программа будет курить в сторонке.
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
19.02.2014, 08:43     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #11
Цитата Сообщение от Izual Посмотреть сообщение
Структуры проще - всего льшб точка - как разделитель.
Как я уже говорил, между структурами и классами в плюсах разница небольшая. Кстати, тут могу отчасти согласиться - сам не люблю некоторые аспекты ООП (точнее, их реализацию в C++). Например, не использую boost и STL из-за конструкций типа
C++
1
namespace1::namespace2::namespace3 template_name<namespase1::namespace4, namespace1::namespace5>
Хотя boost::regex всё-таки стоит освоить - регулярки - хорошая вещь. Кстати, и тебе советую освоить - поиск по регуляркам очень полезен.

Цитата Сообщение от Izual Посмотреть сообщение
программа в зависимости от нужд пользователей - сама себя либо рекомпилировала(как это можно было бы сделать в Linux, т.к. там встроенный GCC), либо вот я мечтаю(готовлюсь) осуществить через чтение блок схем файлов.
Пиши просто интерпретатор. Про "блок-схемы файлов" всё равно не понял. Кстати, можешь пообщаться с автором этой темы.

Не по теме:

Компилятор, встроенный в Linux, называется сс, а gcc устанавливается отдельно. К тому же это компилятор языка Си, а не плюсов


Цитата Сообщение от Izual Посмотреть сообщение
На обычном Си не всё реализованно под Excel и удобства намного меньше.
А разве работа с Excel включена в состав WinAPI? Я не работаю с WinAPI. Собственно, и для винды не так уж часто что-нибудь собираю.

Не по теме:

Цитата Сообщение от Izual Посмотреть сообщение
андроид - "куй проссыш" как настроить, а iOS - прост на столько, что 5-и летний ребёнок поймёт.
Субъективно. iOS прост, пока не потребуется что-нибудь перенастроить. Хотя спорить не буду - с iOS мало имел дело.


Цитата Сообщение от Izual Посмотреть сообщение
я не понял, что значит "в самой структуре"?
C++
1
2
3
4
5
struct addition {
    char **m; // Под двумерный динамический массив 
    int k_str; // Количество строк
    int k_symb; // Количество символов в каждой строке
};
Кстати, тут лучше через методы реализовать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct addition {
    char **m; // Под двумерный динамический массив 
    int k_str; // Количество строк
    int k_symb; // Количество символов в каждой строке
    void init(int n, int k);
};
 
void addition::init(int n, int k) {
    m = new char*[n]; // n строк
    for (int j = 0; j < n; j++)
        m[j] = new char [k]; // k символов в строке
    k_str = n;
    k_symb = k;
}
(А в идеале - запихать все переменные/указатели в privat) Но, конечно, это нужно только если у массива таких структур будут разные количества символов/строк. В противном случае советую создать ещё одну структуру:
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
struct addition {
    char **m; // Под двумерный динамический массив 
    void init(int n, int k);
};
 
void addition::init(int n, int k) {
    m = new char*[n]; // n строк
    for (int j = 0; j < n; j++)
        m[j] = new char [k]; // k символов в строке
}
 
struct field_varchar {
    int k_str; // Количество строк
    int k_symb; // Количество символов в каждой строке
    addition ad;
    void init(int n, int k);
};
 
void field_varchar::init(int n, int k) {
    k_str = n;
    k_symb = k;
    ad.init(n, k);
}
 
int main() {
    int n, k;
    field_varchar field;
    // Инициализируем n и k, например
    n = 10;
    k = 30;
    // И инициализируем поле таблицы:
    field.init(n, k);
    // Дальше программа. Обращаемся к первой строке так: field.ad.m[0]
    // Количество строк: field.k_str
    // Количество символов в строке: field.k_symb
    return 0;
}
Цитата Сообщение от Izual Посмотреть сообщение
Типа чтоб m[0] было например char(и размер j - был бы задаваемым), m[1] было int.. и т.д.
Могу дать (написать) небольшой пример реализации, использующий наследования, но там ООП во все поля
Цитата Сообщение от Izual Посмотреть сообщение
Кстати суть то хоть того что я хочу сделать понятна?
Насколько я понял, небольшую СУБД.
Цитата Сообщение от Izual Посмотреть сообщение
Если реализовать как надо - 1С программа будет курить в сторонке.
Сила 1С в её поддержке
Izual
 Аватар для Izual
93 / 118 / 6
Регистрация: 13.11.2012
Сообщений: 1,531
19.02.2014, 09:23  [ТС]     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #12
Вот про реализацию синтаксиса я и говорю, чёрт голову сломает.

Интерпретатор он как ни крути будет... Блок-схемы - это же школьный курс, либо в книгах - это самые азы.(графическое представление хода действия программы с всякими угольниками, кругами, ромбами и т.п. - для понимания, а так же для устранения/выявления ошибок).

По поводу Linuxa уже что то перехотелось вообще сидеть на нём, т.к. говорят куча ошибок там, даже в простых функциях(я говорю о переносимости WinApi кода)... а раз уж без плюсов, то возможно и к лучшему.

Работа с Excel это COM библиотека, не WinApi, я просто сказал как бы в добавок о том что на плюсах оно лучше.

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

Не, ООП(как классы) не надо, это меня ещё на год заступорит, или на вечно.

СУБД да, уже научен горьким опытом, когда к БД присоединяеш дополнительную СУБД, пишеш код для сцепки... а потом получается что надо ещё и ещё, а копипаста не сработает, т.к. имена переменных разные, приходится переписывать очень много - не мой стиль, я как в мультике "Я на месте не сижу, щяс пойду и попляшу" =) Не усидчивый и не могу заниматься нудной работой, и из за этого программу не могу доделать должным образом, хотя уже 17к строк... Мне нравится сам творческий процесс - создания алгоритмов... Ну от природы не уйдёш. ("И даже мудрец поступает согласно природе своей, так к чему противленье?" с.Бхагавад Гидта)

Поддержка не знаю уж почему такая большая, наверно потому что это первая программа в классе СУБД, где можно увидеть прям из неё исполняемый код и ошибки.(видел как то пару раз, но это всё равно не достаточно, я хочу с блок схемами, т.к. логика расширится)

Так а теперь по поводу кода. Конешно будет несколько структур, взаимо связанных. Без этого никуда, т.к. приоритет должен быть управляемым с уровней. Возник тут вопросик... А вот как мне реализовать N-ое(динамическое) кол-во экземпляров структуры? Т.е. например низший уровень, структура - которая в себе держит данные для формы колонок\столбцов. И мне например надо будет не одну или две, а 5-6 экземпляров(т.е. разные названия, в моём примере были экземпляры 'ma' и 'mar', а две как минимум - для того чтобы хотябы одну можно было дописывать\изменять в процессе работы), но только не статически им названия давать, а опять же динамически.
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
19.02.2014, 11:03     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #13
Цитата Сообщение от Izual Посмотреть сообщение
Вот про реализацию синтаксиса я и говорю, чёрт голову сломает.
Это всё из-за namespace'ов.

Цитата Сообщение от Izual Посмотреть сообщение
Блок-схемы - это же школьный курс, либо в книгах - это самые азы
Я знаю, что такое блок-схемы. Вопрос в другом. Во-первых, это именно графическое представление кода, то есть проще хранить сам код в виде кода, а блок-схемы изображениями/диаграммами. Собираешься таскать с программой блок-схемы, их распознавать, по ним генерировать код, парсить его на ошибки, потом этот код собирать? Уж проще исходники с собой сразу таскать. Во-вторых, говоришь, подстраиваться под пользователя будет таким образом. Как? Пользователь сам будет блок-схемы править? В-третьих, блок-схемы на уровне (утрирую, конечно) (начало)->(ввести пременные a и b)->(c := a + b)->(вывести c)->(конец) используют разве что школьники. Схемы используются на более высоком уровне (взаимодействие функций/модулей/классов). Так что мне не понятно, что именно ты хочешь сделать.

Цитата Сообщение от Izual Посмотреть сообщение
говорят куча ошибок там, даже в простых функциях(я говорю о переносимости WinApi кода)
Вот не поверишь, в винде ошибок в реализации POSIX не меньше. А всё почему? А потому, что WinAPI - интерфейс для работы с виндой (и только с ней), а POSIX - интерфейс для работы с *nix-like системами. То есть в win нет реализации POSIX, а в Linux нет реализации WinAPI.

Цитата Сообщение от Izual Посмотреть сообщение
а раз уж без плюсов
Это cc - компилятор именно языка Си. gcc поддерживает куда больше языков.

Цитата Сообщение от Izual Посмотреть сообщение
Не, ООП(как классы) не надо, это меня ещё на год заступорит, или на вечно.
Это не такая сложная тема, как кажется на первый взгляд (я про классы, а не про ООП в целом)

Цитата Сообщение от Izual Посмотреть сообщение
к БД присоединяеш дополнительную СУБД
Это как?

Цитата Сообщение от Izual Посмотреть сообщение
Поддержка не знаю уж почему такая большая
Поддержка осуществляется разработчиками. 1С - это больше, чем СУБД.

Цитата Сообщение от Izual Посмотреть сообщение
не статически им названия давать, а опять же динамически
В C++ (как и в других транслируемых языках) имена переменных существуют только в исходном коде (ну, и в объектном, наверное, в конечном бинарнике точно их нет). Динамически - значит во время выполнения программы. На этом этапе никаких имён переменных уже нет. А вообще, юзай динамические массивы.

Цитата Сообщение от Izual Посмотреть сообщение
уже 17к строк
Советую заняться рефакторингом
Dmitriy_M
19.02.2014, 18:10
  #14

Не по теме:


Цитата Сообщение от Izual Посмотреть сообщение
как это можно было бы сделать в Linux, т.к. там встроенный GCC
GCC не встроен в Linux. Пример Android.

Izual
 Аватар для Izual
93 / 118 / 6
Регистрация: 13.11.2012
Сообщений: 1,531
19.02.2014, 18:26  [ТС]     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #15
namespace, ну да, что то слышал =) постольку поскольку иногда пользуюсь, но вроде 100500 символов он не требует, покрайней мере в той копипасте, которую я скопировал в свой код))

Есть тут у одного старичка на форуме подписка, мол(примерно) "хороший код может написать любой програмист, но написать код понятный обычным людям может только профессионал"... здесь самое главное слово - "Простота"! - и это залог всего, так же как я веды изучаю, да есть лекторы несущие такой объём знаний, что можно мир завоевать, но понять и принять эти знания в себя, когда они разсказываются стилем попа, без чувств, без интонации, без пауз на "весёлые" примеры и т.п. - их никто не примет, кроме "задротов". Это как в школе, бывают такие люди - они тупо заучивают учебник, а толку? Я всегда следовал принципу - найди самое важное (например формулу), пойми суть и используй. Ведь в программировании как в геометрии... преобладает логика, эти "допустим" и "если"... И это в конечном итоге определяет достигнеш ли ты цели или нет, и хватит ли терпения, ведь заучить книги по математике не так уж и трудно, там книга на год, а у нас в нашем не лёгком деле - так всё быстро мчиться что подобным способом можно заучивать 100500 книг, но только что же останется в памяти? иии а как же творческий процесс?... Блок схема - помогает для восприятия алгоритмов, если её продумать, то это как brakepoints, по которым даже можно смотреть результат на определённом выполнении этапа. Тем более что если данное будет - то даже недо программисты(бугалтера и другой шлак) могут справляться с исправлением алгоритмических ошибок.

POSIX - слышал что то, но не сталкивался, так что тёмный лес. А вообще, ну как LINUX может не поддерживать код WinApi... ну это честно говоря бредово, винда это же придаток линхи как ни крути. Да и WINE там есть... в общем фиг с этой линухой.

Поддерживает и хорошо, но не о том речь.(но спасибо за инфу, может пригодится)

Сложная в синтаксисе. Мне этого хватает. Как только книгу переварачиваеш за поовину начинется бред сивой кабылы с таким кол-вом соединительных символов... опять же простота залог всего.

Есть основная база данных, которая читается из одного файла, и есть ещё с десяток дополнительных файлов, откуда читается ещё, при этом эти придатки должны загрузиться правильно, т.е. если основная база данных была изменена, то придаток должен эти ньюансы проработать и измениться ровно так же, чтоб стыковка прошла успешно.(вся эта конитель потому что и так база огромная, а если все придатки грузить сразу то будет овер мемори - говорю же уже 17 000 строк кода накатал, ну и постольку поскольку - но работает, хотя меня не хватает одного, и уже за**** переписывать один и тот же алгоритм стыковки с разницей в стыковочных узлах - а это самое мерзкое, потому что в 100 строках кода надо изменять названия переменных, а ещё иногда что то другое дополнять, а это уже сложно, потому что алгоритм не гибкий получается, хрен знает когда ты его писал, а теперь не понятно что есть что, для этого и нужна графическая блок схема, для того чтобы править код прям в ней, это как графическая IDE)

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

Я по поводу например сделать ma[N], int N - определить как кол-во загруженных "таблиц", и в последствии иметь возможность изменять это N. Например вот при подгрузке придатка как я объяснил выше. (я просто не знаю можно так или нет, ни в книге ни в гугле не видел, да и ключевое слово для поиска наверно не правильно подобрал, т.к. не знаю как это называется)

Рефакторинг был, уже 3 раза. Но 17к всё равно остаётся, я тупо делаю огромную базу данных(в одиночку ~ ~), ну суть не в этом, а в том что всё что есть - необходимо, я уже и в функции всё вывел, и алгоритмы укорачивал, но при 10 стыковочных доп. баз данных к основной, где разные связующие звенья - единую функцию для стыковки не напишеш. Остался теперь последний рефакторинговый этап - разбить один файл с 17к строк на несколько файлов, но т.к. я сразу не думал что столько получится - я использовал не очень переносимые алгоритмы, зависящие от некоторых деталей... ладно это я на закуску себе оставлю, тем более что я уже к 3 рефакторингу вывел много чего в функции с возвращяемыми значениями, осталось доделать и уже потом можно разъединять файл...
Dmitriy_M
1329 / 1210 / 110
Регистрация: 20.03.2009
Сообщений: 4,314
Записей в блоге: 11
19.02.2014, 20:08     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #16
Предлагая почитать исходный код SQLite, что бы разобраться как на самом деле создаются субд.
Izual
 Аватар для Izual
93 / 118 / 6
Регистрация: 13.11.2012
Сообщений: 1,531
19.02.2014, 20:22  [ТС]     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #17
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Предлагая почитать исходный код SQLite, что бы разобраться как на самом деле создаются субд.
Предлагаю вам.. думаю вы понимаете куда я вам укажу. Данная тема не для этого создана, я уже достаточно опытен и знаю курс направления, ваши догматичные "на самом деле" можете для себя оставить.
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
19.02.2014, 20:44     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #18
Izual, сам себе противоречишь:
Цитата Сообщение от Izual Посмотреть сообщение
самое главное слово - "Простота"!
Цитата Сообщение от Izual Посмотреть сообщение
один файл с 17к строк
Цитата Сообщение от Izual Посмотреть сообщение
в 100 строках кода надо изменять названия переменных
Цитата Сообщение от Izual Посмотреть сообщение
хрен знает когда ты его писал, а теперь не понятно что есть что
Вот тут как раз использование ООП - самый оптимальный вариант. Как ни крути, ООП предназначено для средний и крупных программ.

Цитата Сообщение от Izual Посмотреть сообщение
namespace, ну да, что то слышал =) постольку поскольку иногда пользуюсь, но вроде 100500 символов он не требует
Не требует, если не содержит вложенных namespace'ов. Например,
C++
1
boost::numeric::ublas::matrix
это шаблон matrix, находящийся в namespace (пространстве имён) ublas, который находится в namespace'е numeric namespace'а boost. То есть, в третьем уровне вложения.

Цитата Сообщение от Izual Посмотреть сообщение
Я всегда следовал принципу - найди самое важное (например формулу), пойми суть и используй.
Напомнил

Цитата Сообщение от Izual Посмотреть сообщение
ну как LINUX может не поддерживать код WinApi... ну это честно говоря бредово, винда это же придаток линхи как ни крути. Да и WINE там есть
С точностью до наоборот - было бы бредово, если бы поддерживал. Прежде, чем делать такие заявления, советую ознакомиться с небольшим количеством матчасти: ОС, Linux (ОС GNU/Linux), Windows, WinAPI, POSIX. Ну уж извини, тут у меня коротко получится объяснить только так: Windows и GNU/Linux - разные ОС, у каждой из которых СВОИ API-функции
И да, винда - не придаток линукса. Мало того, она раньше появилась. А wine - это вообще отдельная программа.

Цитата Сообщение от Izual Посмотреть сообщение
сделать ma[N], int N - определить как кол-во загруженных "таблиц", и в последствии иметь возможность изменять это N
Вектора. Всё остальное - костыли. Кстати, насколько я понимаю, БД не должна переноситься в RAM, работа с БД осуществляется через чтение/запись файлов. Так что строго говоря ma[N] не нужен.

Цитата Сообщение от Izual Посмотреть сообщение
Предлагаю вам.. думаю вы понимаете куда я вам укажу.
Не стоит недооценивать разбор чужого кода. Там можно многое почерпнуть.
Izual
 Аватар для Izual
93 / 118 / 6
Регистрация: 13.11.2012
Сообщений: 1,531
19.02.2014, 21:50  [ТС]     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #19
Цитата Сообщение от elivin Посмотреть сообщение
Izual, сам себе противоречишь
Конешно, из за недостатка так сказать наглядности, потому и хочу блок-схемы вывести в графический режим.
Но с другой стороны, вот вы дали ссылку, и ну я таким же методом(почти) и поступаю. Так получилось, что после 8 класса(когда музыкальная школа была окончена) появилось много свободного времени, пьянки гулянки - надоедали, т.к. люди которые в них принимали участие в основном... мягко говоря быдловаты) А я как белка в олесе всегда был, то с ботанами, то с бакланами) Ну у каждых из них свои приемущества и недостатки, думаю если задаться вопросом то сами найдёте)
И в общем информатика стала для меня самым любимым предметом для тренировки логики(т.к. обожал логические задачки из всех точных наук). 10-11 класс - параллельно учился в шараге(тупо С++ осваивал там), потом шарагу то я еле еле закончил, и ещё 2 года в инсте, потом терпение лопнуло, потому что знания и практика должны идти параллельно, а институт такого не даёт, +ещё куча не нужных предметов(основанных на догмах) - вообще поставили крест. В итоге я два года потом дома сидел штрудировал всякие задачки и DirectX, т.к. душа всегда тянулась к красоте. И вот полтора года назад - первый проэкт, база данных, ни конкретного ТЗ, ни чего такого не было, пришлось импровизировать, но задача была примерно ясна.
Первые пару месяцев(а в добавок работаю я дома, без рамок ограничения во времени и т.п.) я 24\7 сидел парился над WinAPi, и понял что шарага в месте с инстом дали меньше 1% от того что надо хотябы для понимания основ работы с формами. Вот и получилось, что я примерно "вашим" же способом и делаю, т.е. тут и пища для ума, и творчество, и много ещё "и", плюсы которых ни один институт не даст.
(кстати, streamami не пользуюсь, предпочитаю Си стиль, т.е. fopen, fgets и т.п.)
Ладно с оффтопом нада завязывать =)

По поводу "нагромождения" - а по другому никак, есть задача - выполняеш теми знаниями которые есть, постепенно понимание и знания приходят(фактор времени никто не отменял) и потому совершенствование так же идёт.
По поводу того что "якобы сложно" - да нет, 17к строк кода это не сложно, потому что методы которые я использую - просты как самые базовые книжёнки по С/С++. И даже маломальски грамотный человек(понимающий что такое if\else) поймёт код, а логику - я для себя всё же описываю в комментах, ну так где это необходимо - хотя таких моментов мало.
Почему сложно переделывать - потому что алгоритм стыковки при если если... не вмещяется на экран - не видишь полностью картину, да и плюс переменные надо помнить куда какая принадлежит и за что отвечает(ну это я только продумываю в плане именации их).

Мне лично ООП не нужно(если вы о классах), но если смотреть как на структуры то именно это для меня самый высший приоритет, потому что понятно и объяснить на пальцах можно.

Дада, вот этот синтаксис(в частности) мне тоже не нравится, это о примере с namespace.

По поводу Linux, ну возможно всё так как вы и говорите, но непереносимость кода(потому что библиотек нет на Linux под WinApi) конешно большой минус. Тем более - ну кто пользуется Linuxom?.. Не выгодно изучать форму под Linux, когда самой ОС не пользуются обычные бухгалтера.
Wine - понятное дело что это программа, но это я так привёл просто пример того, что могли бы блин и реализовать переносимость, как это делает Wine.

Как это не должна переноситься в RAM? А просчёты формул и данных на основе тех переменных которые в файле?...
И мне нужно именно динамически контролировать кол-во экземпляров структуры.(блин вы походу не въехали, говорю же я пишу программу так, чтобы потом не мучаться(расширять основы).(и я же говорил что придатков СУБД у меня более чем 10, иногда надо несколько сразу загрузить для расчёта данных перманентно)

Работа чужого кода, основанного на классах - нет спасибо =) У меня свой стиль, свои убеждения, а в конечном итоге программа будет не только для баз данных.

Кстати, я тут подумал, да в принципе фиг с тем что структура содержит только char тип, ведь в конечном итоге - (наверно) из char можно во все типы конвертировать данные.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2014, 22:38     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур
Еще ссылки по теме:

Написать программу определения знака переменных разного типа C++
Возврат объекта шаблонного типа от типа Type из специализации шаблона метода от того же типа C++
Объединить данные разного типа в векторе C++
C++ Реализовать сортировку и поиск данных в массиве структур типа School
C++ Реализовать сортировку и поиск данных в массиве структур типа School

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

Или воспользуйтесь поиском по форуму:
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
19.02.2014, 22:38     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур #20
Цитата Сообщение от Izual Посмотреть сообщение
я 24\7 сидел парился над WinAPi, и понял что шарага в месте с инстом дали меньше 1% от того что надо хотябы для понимания основ работы с формами
Я вот с ними вообще не работал и не собираюсь. Это нужно далеко не всем.

Цитата Сообщение от Izual Посмотреть сообщение
да нет, 17к строк кода это не сложно, потому что методы которые я использую - просты как самые базовые книжёнки по С/С++
Использование простых методов тут ни при чём. Сможешь понять 17к строк чужого кода, забитого в один файл? Сколько потребуется времени, чтобы его понять? Хотя бы общую картину составить.

Цитата Сообщение от Izual Посмотреть сообщение
(потому что библиотек нет на Linux под WinApi)
Я спокойно использую POSIX. И пока я пишу для себя (фактически работаю админом), мне параллельно, что мой код не запускается под виндой. Если нужна поддержка винды, перехожу на Qt. Так что для кого минус?

Цитата Сообщение от Izual Посмотреть сообщение
ну кто пользуется Linuxom?
Ну, я, например, пользуюсь. И дома, и на работе (как ПК, так и сервер)

Цитата Сообщение от Izual Посмотреть сообщение
когда самой ОС не пользуются обычные бухгалтера
Ну не знаю, для бухгалтеров не пишу.

Цитата Сообщение от Izual Посмотреть сообщение
я пишу программу так, чтобы потом не мучаться(расширять основы)
Или так, чтобы она ела всю RAM, которую только найдёт? Хотя да, конечно, я не разрабатывал своих СУБД, так что особо тут помочь не смогу

Цитата Сообщение от Izual Посмотреть сообщение
Работа чужого кода, основанного на классах - нет спасибо
SQLite написан на Си, насколько помню. Так что никаких классов там нет.
Yandex
Объявления
19.02.2014, 22:38     Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур
Ответ Создать тему
Опции темы

Текущее время: 00:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru