Отговори на тема  [ 18 мнения ]  Отиди на страница Предишна  1, 2
Как да направя масив от константи? 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Ное 11, 2005 9:30 am
Мнения: 142
Местоположение: София
Мнение Re: Как да направя масив от константи?
Благодаря на всички, които взеха отношение по темата!
И най-най-най-много на miro_atc :supz: , който предложи според мен много добро решение!!!
Изпробвах го с масив от 200000 (двеста хиляди) елемента и работи безпроблемно.
Това са 6 нива на влагане.
За повече не ми достига паметта на контролера.
Реално масивът ще между 100 и 1000 елемента.


Чет Мар 28, 2024 6:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение Re: Как да направя масив от константи?
slav4o.com написа:
Н'бабане Гт'муан'га написа:
А гпт-то какво казва по въпроса? :D

You
Искам да направя масив от константи. Идеята е обаче попълването на масива да го прави препроцесора по някаква зададена формула. Средата е Arduino.

ChatGPT
...Тук е важно да отбележим, че препроцесорът в C++ е много прост и не поддържа сложни операции или цикли. Всеки макрос е проста замяна на текст и не може да извършва сложни изчисления или да създава цикли. Във вашия случай, ако искате да генерирате масив с определени стойности, изчислени по формула, единственият начин да го направите ефективно е да използвате функция (както в примера) или да напишете макроси за всеки елемент поотделно, което не е практично за големи масиви. ...




Това фри версията ли е? Защото аз наравих копи-пейст точно на твоя формулира въпрос и четворката каза това:

За да реализирате идеята си за автоматично попълване на масив от константи в средата на Arduino, като използвате препроцесора и зададена формула, ще трябва да приложите макроси и може би някои трикове с препроцесора на C/C++. Arduino средата е базирана на C/C++, което означава, че може да използвате предварителната обработка на кода за да генерирате стойности преди компилация.

Тук е пример как можете да направите това:

1. **Дефиниране на Макрос за Генериране на Стойности**: Можете да използвате макроси за генериране на константни стойности според дадена формула. Макросите могат да изпълняват прости аритметични операции.

2. **Използване на `#define` за Създаване на Константи**: С `#define` може да зададете статични стойности, които да бъдат заместени навсякъде в кода преди компилация.

Важно е да отбележим, че препроцесорът на C/C++ няма вградена поддръжка за цикли или сложна логика, така че за сложни формули може да се наложи да намерите алтернативен подход.

Ето един прост пример, който демонстрира създаването на масив от константи с макроси:

```c
#define CALCULATE_VALUE(i) ((i)*(i)) // Примерна формула: i^2

// Дефиниране на масива
const int myArray[] = {
CALCULATE_VALUE(0),
CALCULATE_VALUE(1),
CALCULATE_VALUE(2),
CALCULATE_VALUE(3),
// Продължавайте по същия начин за всяко следващо i...
};
```

Ако искате да автоматизирате процеса още повече, ще трябва да използвате външни скриптове или инструменти, които да генерират кода за вас преди да го заредите в Arduino средата. Това може да бъде направено с помощта на Python скрипт, който генерира нужния код в `.h` файл, който после да бъде включен във вашия Arduino проект.

Примерен Python скрипт може да изглежда така:

```python
N = 10 # Брой на елементите в масива
formula = lambda i: i*i # Примерна формула: i^2

with open("ConstantsArray.h", "w") as file:
file.write("const int myArray[] = {\n")
for i in range(N):
file.write(f" {formula(i)},\n")
file.write("};\n")
```

След като сте генерирали `ConstantsArray.h`, можете да го включите във вашия Arduino проект с `#include "ConstantsArray.h"` и да използвате масива `myArray` както е необходимо.

_________________
'просто' е технически синоним на 'красиво'


Чет Мар 28, 2024 6:57 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 8:04 pm
Мнения: 2663
Местоположение: София / Велико Търново
Мнение Re: Как да направя масив от константи?
Ами на GPT4. Ама от служебния. Иначе вкъщи имам също 4 и там по-друг отговор ми даде.
Интересното е, че всеки път различно отговаря.

You Искам да направя масив от константи. Идеята е обаче попълването на масива да го прави препроцесора по някаква зададена формула. Средата е Arduino.

ChatGPT
В Arduino и други C/C++ среди, препроцесорът е ограничен във възможностите си и не може да извършва сложни изчисления или да генерира масиви по динамично зададени формули. Препроцесорът обикновено се използва за условна компилация или за дефиниции на прости макроси.

Ако искате да генерирате масив от константи на базата на някаква формула, това трябва да стане по време на компилацията, но не чрез препроцесора. Един подход е да използвате шаблони на C++ или constexpr функции, които се изчисляват по време на компилация.

Ето пример как можете да генерирате масив от константи с използването на constexpr:

cpp
Copy code
constexpr int calculateValue(int i) {
// Тук сложете вашата формула
return i * i; // Пример: квадрат на индекса
}

template<size_t N>
constexpr std::array<int, N> generateArray() {
std::array<int, N> arr = {};
for (size_t i = 0; i < N; ++i) {
arr[i] = calculateValue(i);
}
return arr;
}

constexpr size_t arraySize = 10; // Примерен размер на масива
constexpr auto myArray = generateArray<arraySize>();

int main() {
for (int val : myArray) {
Serial.println(val);
}
return 0;
}
Този код генерира масив от константи по време на компилацията, използвайки зададената функция calculateValue. Размерът на масива и формулата могат да бъдат променени според нуждите ви. Обърнете внимание, че Arduino средата може да има ограничения в зависимост от хардуера, така че подходът с constexpr може да не е подходящ за много големи масиви или сложни изчисления.

_________________
https://github.com/slav4ocom/


Пет Мар 29, 2024 2:01 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 18 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 0 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни