Автор |
Сообщение |
08.12.2023 18:03:03
Тема: Re:Вопросы и ответы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Александр Дудинский:
Здравствуйте, я занимался разработкой мультиплексора в C-MPA для обучения ИИ бота. Задача состоит в том, что на выход подаётся a+b+c+d, если a>b; в остальных случаях на выход подаётся a-b-c-d.
Код программы:
unsigned __in __bits(16) a=10;
unsigned __in __bits(16) b=1;
unsigned __in __bits(8) c=3;
unsigned __in __bits(8) d=4;
unsigned __out __bits(16) RES;
unsigned __bits(16) ms(unsigned __bits(1) A, unsigned __bits(16) X[2]){
unsigned __bits(16) otvet;
switch(A){
case 0: otvet=X[0]; break;
case 1: otvet=X[1]; break;
}
return otvet;
}
void main(){
unsigned __bits(1) A;
unsigned __bits(16) X[2];
X[0]=a+b+c+d;
X[1]=a-b-c-d;
if(a>b) A=1;
else A=0;
RES=ms(A,X[2]);
}
Выдаёт ошибку на 11-ой строке: This variable is not array: X.
По сути, проблема состоит в передаче массива в функцию.
Передача массивов в функцию не работает, но можно так:
unsigned __bits(16) ms(unsigned __bits(1) A, unsigned __bits(16) X0, unsigned __bits(16) X1)
|
08.12.2023 21:20:12
Тема: Re:Вопросы и ответы по C-MPA
|
Михаил Долинский
(Online)
Темы: 2072
Сообщений: 49883
Мой профиль
|
Получается есть два рабочих варианта
unsigned __bits(16) MS(unsigned __bits(3) A,
unsigned __bits(16) X0,
unsigned __bits(16) X1,
unsigned __bits(16) X2
...
)
...
if (A==0) MS = X0;
if (A==1) MS = X1;
if (A==2) MS = X2;
...
и когда X передаётся как 2^A-битный вектор (с выделением сдвигами отдельных элементов).
Наверно первый удобнее.
для арифметических схем нужно ещё реализовать
x16=CBW(x8)
x32=CWD(x16)
s16=SUM(A16,B16)
s16=ISUB(A16,B16)
p32=iMUL(A16,B16)
d16=iDIV(A32,B16)
x16=x32 // скорей всего уже правильно работает
R16=MS(A1,X16_0,X16_1)
Тогда схема условного арифметического выражения реализуется в С-МПА
как последовательность этих операторов
в порядке вычислений
и с правильными названиями переменных, чтобы передавать сигналы
с верхних блоков в нижние (в программе)
как с левых на правые (в схеме)
Для реализации всех остальных схем нужно
сделать также блоки
DC
CD
MS
(Матафонов Юра, ПИ-21 уже занимается)
Тогда для того, чтобы добиться от ИИ помощи в генерации схем для HLCCAD,
достаточно научить его писать С-МПА программы, вызывающие такие блоки
в нужной последовательности и правильно называя переменные.
Программы можно будет проверять, автоматически генерируя схемы
и отправляя их на тестирование.
Рисовать схему в HLCCAD можно глядя на текст такой программы.
Нарисованную схему тоже потом можно отправлять на тестирование.
Совсем круто, чтобы ИИ писал такую программу прямо с условия задачи.
|
08.10.2024 11:05:46
Тема: Re:Вопросы и ответы по C-MPA
|
Иван Гейко
Темы: 0
Сообщений: 14
Мой профиль
|
Ошибка компилятора
unsigned __in __bits(1) A;
unsigned __in __bits(1) B;
unsigned __in __bits(1) C;
unsigned __in __bits(1) D;
unsigned __in __bits(1) E;
unsigned __in __bits(1) F;
unsigned __out __bits(1) Q;
unsigned __bits(1) k;
void main()
{
unsigned __bits(1) kA;
unsigned __bits(1) kB;
unsigned __bits(1) kC;
unsigned __bits(1) kD;
unsigned __bits(1) kE;
unsigned __bits(1) kF;
kA = A; kB = B; kC = C; kD = D; kE = E; kF = F;
unsigned __bits(3) sum;
sum = kA;
sum += kB;
sum += kC;
sum += kD;
sum += kE;
sum += kF;
if((sum % 2) == 0) {
k = 0;
}
else if(sum > 3) {
k = kD;
}
else {
Q = k;
}
}
|
08.10.2024 11:08:09
Тема: Re:Вопросы и ответы по C-MPA
|
Иван Гейко
Темы: 0
Сообщений: 14
Мой профиль
|
после перезахода ошибка пропала
|
15.10.2024 15:49:58
Тема: Re:Вопросы и ответы по C-MPA
|
Глеб Тищенко
Темы: 0
Сообщений: 19
Мой профиль
|
http://dl.gsu.by/task.jsp?nid=2423960&cid=1370
char in1[128];
char out1[128];
unsigned __out __bits(8) y;
void main() {
char temp[128];
int i = 0;
while(in1[i] != '#') {
if(in1[i] == 'A' || in1[i] == 'U' ||
in1[i] == 'O' || in1[i] == 'Y' || in1[i] == 'E' ||
in1[i] == 'I') {
temp += "$$" ;
}else {
temp += in1[i];
temp += in1[i];
}
}
out1 = temp;
}
Внутренняя ошибка компилятора: Unsupported node type.
|
17.10.2024 15:30:33
Тема: Re:Вопросы и ответы по C-MPA
|
Матвей Пинчуков
Темы: 0
Сообщений: 10
Мой профиль
|
Организация и функционирование ЭВМ (ПО2) - 2024
Контрольные срезы\21 ноября\Программирование\Цифры числа\14 - "Приличная задача" (809)
http://dl.gsu.by/task.jsp?nid=2409999&cid=1371
не прошел секретный тест
|
17.10.2024 15:30:46
Тема: Re:Вопросы и ответы по C-MPA
|
Михаил Долинский
(Online)
Темы: 2072
Сообщений: 49883
Мой профиль
|
Report = report.txt
StopOnError = false
Statistics = false
WatchReport = false
ShowReport = false
[1]
Cycles = 1000
CheckCycles = true
Segment - 0
Offset - 0
n1 dec: 218
R dec: 107
[2]
Cycles = 1000
CheckCycles = true
Segment - 0
Offset - 0
n1 dec: 100
R dec: 100
[3]
Cycles = 1000
CheckCycles = true
Segment - 0
Offset - 0
n1 dec: 1
R dec: 0
[4]
Cycles = 1000
CheckCycles = true
Segment - 0
Offset - 0
n1 dec: 132
R dec: 21
[5]
Cycles = 1000
CheckCycles = true
Segment - 0
Offset - 0
n1 dec: 55
R dec: 0
|
22.10.2024 15:35:49
Тема: Re:Вопросы и ответы по C-MPA
|
Денис Сероженко
Темы: 0
Сообщений: 26
Мой профиль
|
https://dl.gsu.by/task.jsp?nid=2428545&cid=1370
int __in __bits(2) IN_0;
int __in __bits(2) IN_1;
int __out __bits(5) OUT_0;
void main()
{
int i,g = 1;
for (i = 0; i < IN_1; i++){
g = g*IN_0;
}
OUT_0 = g;
}
На тесте 0 0 пишет, что мой ответ = 0, а в программе он равен 1.
|
22.10.2024 15:48:56
Тема: Re:Вопросы и ответы по C-MPA
|
Денис Сероженко
Темы: 0
Сообщений: 26
Мой профиль
|
https://dl.gsu.by/task.jsp?nid=2428545&cid=1370
int __in __bits(2) IN_0;
int __in __bits(2) IN_1;
int __out __bits(5) OUT_0;
void main()
{
if (IN_0 == 0){
if(IN_1 == 0) OUT_0 = 1;
else OUT_0 = 0;
}
if (IN_0 == 1) OUT_0 = 1;
if (IN_0 == 2){
if (IN_1 == 0) OUT_0 = 1;
else if (IN_1 == 1) OUT_0 = 2;
else if (IN_1 == 2) OUT_0 = 4;
else if (IN_1 == 3) OUT_0 = 8;
}
if (IN_0 == 3){
if (IN_1 == 0) OUT_0 = 1;
else if (IN_1 == 1) OUT_0 = 3;
else if (IN_1 == 2) OUT_0 = 9;
else if (IN_1 == 3) OUT_0 = 27;
}
}
На тесте 0 0 выдает ответ 0, а в программе ответ = 1.
|
22.10.2024 16:00:11
Тема: Re:Вопросы и ответы по C-MPA
|
Денис Сероженко
Темы: 0
Сообщений: 26
Мой профиль
|
https://dl.gsu.by/task.jsp?nid=2428545&cid=1370
unsigned __in __bits(2) IN_0;
unsigned __in __bits(2) IN_1;
unsigned __out __bits(5) OUT_0;
void main()
{
if (IN_0 == 0){
if(IN_1 == 0) OUT_0 = 1;
else OUT_0 = 0;
}
if (IN_0 == 1) OUT_0 = 1;
if (IN_0 == 2){
if (IN_1 == 0) OUT_0 = 1;
else if (IN_1 == 1) OUT_0 = 2;
else if (IN_1 == 2) OUT_0 = 4;
else if (IN_1 == 3) OUT_0 = 8;
}
if (IN_0 == 3){
if (IN_1 == 0) OUT_0 = 1;
else if (IN_1 == 1) OUT_0 = 3;
else if (IN_1 == 2) OUT_0 = 9;
else if (IN_1 == 3) OUT_0 = 27;
}
}
В тесте 00 выдает ответ 0, а в программе ответ = 1.
|
22.10.2024 16:01:12
Тема: Re:Вопросы и ответы по C-MPA
|
Денис Сероженко
Темы: 0
Сообщений: 26
Мой профиль
|
https://dl.gsu.by/task.jsp?nid=2428545&cid=1370
unsigned __in __bits(2) IN_0;
unsigned __in __bits(2) IN_1;
unsigned __out __bits(5) OUT_0;
void main()
{
int i,g = 1;
for (i = 0; i < IN_1; i++){
g = g*IN_0;
}
OUT_0 = g;
}
На тесте 0 0 пишет, что мой ответ = 0, а в программе он равен 1.
|
24.10.2024 18:47:10
Тема: Re:Вопросы и ответы по C-MPA
|
Екатерина Киптик
Темы: 0
Сообщений: 25
Мой профиль
|
https://dl.gsu.by/task.jsp?nid=2416138&cid=1371
unsigned __in __bits(1) m1;
unsigned __in __bits(1) m2;
unsigned __in __bits(1) start;
unsigned __in __bits(1) C;
unsigned __out __bits(4) R;
unsigned cnt;
unsigned last_C;
void main() {
unsigned __bits(1) m1i = m1;
unsigned __bits(1) m2i = m2;
unsigned __bits(1) sti = start;
unsigned __bits(1) Ci = C;
if (sti == 1) {
cnt = 0;
} else if (Ci == 1 && last_C == 0) {
if (m1i == 1 && m2i == 1) {
cnt++;
} else if (m1i == 0 && m2i == 0) {
cnt--;
}
}
last_C=Ci;
R = cnt;
}
В данной задаче необходимо использовать две глобальные переменные, которые будут сохранять своё значение.
cnt: глобальная переменная, которая используется для хранения текущего значения счетчика. Она сохраняет свое значение между вызовами функции main().
last_C: переменная, которая также сохраняет свое состояние между вызовами функции main(). Она необходима для отслеживания предыдущего значения сигнала C и обнаружения переднего фронта (логика обновления счетчика осуществляется только при переходе C из 0 в 1).
Так же не стоит забывать, что в начале функции main() входные значения (m1, m2, start, C) необходимо сохранять в промежуточные переменные (m1i, m2i, sti, Ci). Это позволяет избежать гонок сигналов, так как входные значения могут измениться в процессе вычисления.
|
26.10.2024 10:22:32
Тема: Re:Вопросы и ответы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Денис Сероженко:
https://dl.gsu.by/task.jsp?nid=2428545&cid=1370
unsigned __in __bits(2) IN_0;
unsigned __in __bits(2) IN_1;
unsigned __out __bits(5) OUT_0;
void main()
{
int i,g = 1;
for (i = 0; i < IN_1; i++){
g = g*IN_0;
}
OUT_0 = g;
}
На тесте 0 0 пишет, что мой ответ = 0, а в программе он равен 1.
Этот вариант программы правильный.
Но присланный на тестирование проект сгенерирован был по другой программе:
unsigned __in __bits(3) in_0;
unsigned __in __bits(3) in_1;
unsigned __in __bits(3) in_2;
unsigned __in __bits(3) in_3;
unsigned __out __bits(1) out_0;
unsigned __out __bits(1) out_1;
unsigned __out __bits(1) out_2;
void main()
{
int sum1;
if (!in_0 || !in_1) sum1 = 0;
else sum1 = in_0 + in_1;
int sum2;
if (!in_2 || !in_3) sum2 = 0;
else sum2 = in_2 + in_3;
if (sum1 > sum2)
{
out_0 = 1;
out_1 = 0;
out_2 = 0;
}
else if (sum1 < sum2)
{
out_0 = 0;
out_1 = 1;
out_2 = 0;
}
else
{
out_0 = 0;
out_1 = 0;
out_2 = 1;
}
}
|
26.10.2024 10:27:22
Тема: Re:Вопросы и ответы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Чтобы увидеть исходник по которому генерировалась схема нужно нажать правую кнопку мыши над корпусом МПА и выбрать "Список параметров -> Source".
|
01.11.2024 15:58:53
Тема: Re:Вопросы и ответы по C-MPA
|
Иван Морозов
Темы: 0
Сообщений: 21
Мой профиль
|
https://dl.gsu.by/task.jsp?nid=2411200&cid=1371
unsigned __in __bits(2) IN_0;
unsigned __in __bits(2) IN_1;
unsigned __out __bits(5) OUT_0=1;
void main(){
unsigned i;
for(i=0;i<IN_1;i++){
OUT_0*=IN_0;
}
}
Ошибка: Несовпадение OUT_0:00100=01000 [9 ns]
В Winter же результат равен 8, что является правильным ответом
|
|