Автор |
Сообщение |
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
|
Михаил Долинский
Темы: 2072
Сообщений: 49900
Мой профиль
|
Получается есть два рабочих варианта
01. unsigned __bits(16) MS(unsigned __bits(3) A,
02. unsigned __bits(16) X0,
03. unsigned __bits(16) X1,
04. unsigned __bits(16) X2
05. ...
06. )
07. ...
08. if (A==0) MS = X0;
09. if (A==1) MS = X1;
10. if (A==2) MS = X2;
11. ...
и когда X передаётся как 2^A-битный вектор (с выделением сдвигами отдельных элементов).
Наверно первый удобнее.
для арифметических схем нужно ещё реализовать
01. x16=CBW(x8)
02. x32=CWD(x16)
03. s16=SUM(A16,B16)
04. s16=ISUB(A16,B16)
05. p32=iMUL(A16,B16)
06. d16=iDIV(A32,B16)
07. x16=x32
08. R16=MS(A1,X16_0,X16_1)
09.
10. Тогда схема условного арифметического выражения реализуется в С-МПА
11. как последовательность этих операторов
12. в порядке вычислений
13. и с правильными названиями переменных, чтобы передавать сигналы
14. с верхних блоков в нижние (в программе)
15. как с левых на правые (в схеме)
Для реализации всех остальных схем нужно
сделать также блоки
DC
CD
MS
(Матафонов Юра, ПИ-21 уже занимается)
Тогда для того, чтобы добиться от ИИ помощи в генерации схем для HLCCAD,
достаточно научить его писать С-МПА программы, вызывающие такие блоки
в нужной последовательности и правильно называя переменные.
Программы можно будет проверять, автоматически генерируя схемы
и отправляя их на тестирование.
Рисовать схему в HLCCAD можно глядя на текст такой программы.
Нарисованную схему тоже потом можно отправлять на тестирование.
Совсем круто, чтобы ИИ писал такую программу прямо с условия задачи.
|
08.10.2024 11:05:46
Тема: Re:Вопросы и ответы по C-MPA
|
Иван Гейко
Темы: 0
Сообщений: 14
Мой профиль
|
Ошибка компилятора
01. unsigned __in __bits(1) A;
02. unsigned __in __bits(1) B;
03. unsigned __in __bits(1) C;
04. unsigned __in __bits(1) D;
05. unsigned __in __bits(1) E;
06. unsigned __in __bits(1) F;
07. unsigned __out __bits(1) Q;
08. unsigned __bits(1) k;
09. void main()
10. {
11. unsigned __bits(1) kA;
12. unsigned __bits(1) kB;
13. unsigned __bits(1) kC;
14. unsigned __bits(1) kD;
15. unsigned __bits(1) kE;
16. unsigned __bits(1) kF;
17. kA = A; kB = B; kC = C; kD = D; kE = E; kF = F;
18. unsigned __bits(3) sum;
19. sum = kA;
20. sum += kB;
21. sum += kC;
22. sum += kD;
23. sum += kE;
24. sum += kF;
25. if ((sum % 2) == 0) {
26. k = 0;
27. }
28. else if (sum > 3) {
29. k = kD;
30. }
31. else {
32. Q = k;
33. }
34. }
|
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
01. char in1[128];
02. char out1[128];
03. unsigned __out __bits(8) y;
04.
05. void main() {
06. char temp[128];
07. int i = 0;
08.
09. while (in1[i] != '#' ) {
10. if (in1[i] == 'A' || in1[i] == 'U' ||
11. in1[i] == 'O' || in1[i] == 'Y' || in1[i] == 'E' ||
12. in1[i] == 'I' ) {
13. temp += "$$" ;
14. } else {
15. temp += in1[i];
16. temp += in1[i];
17. }
18. }
19.
20. out1 = temp;
21. }
Внутренняя ошибка компилятора: 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
|
Михаил Долинский
Темы: 2072
Сообщений: 49900
Мой профиль
|
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
01. int __in __bits(2) IN_0;
02. int __in __bits(2) IN_1;
03. int __out __bits(5) OUT_0;
04.
05. void main()
06. {
07. int i,g = 1;
08. for (i = 0; i < IN_1; i++){
09. g = g*IN_0;
10. }
11. OUT_0 = g;
12. }
На тесте 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
01. int __in __bits(2) IN_0;
02. int __in __bits(2) IN_1;
03. int __out __bits(5) OUT_0;
04.
05. void main()
06. {
07. if (IN_0 == 0){
08. if (IN_1 == 0) OUT_0 = 1;
09. else OUT_0 = 0;
10. }
11. if (IN_0 == 1) OUT_0 = 1;
12. if (IN_0 == 2){
13. if (IN_1 == 0) OUT_0 = 1;
14. else if (IN_1 == 1) OUT_0 = 2;
15. else if (IN_1 == 2) OUT_0 = 4;
16. else if (IN_1 == 3) OUT_0 = 8;
17. }
18. if (IN_0 == 3){
19. if (IN_1 == 0) OUT_0 = 1;
20. else if (IN_1 == 1) OUT_0 = 3;
21. else if (IN_1 == 2) OUT_0 = 9;
22. else if (IN_1 == 3) OUT_0 = 27;
23. }
24. }
На тесте 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
01. unsigned __in __bits(2) IN_0;
02. unsigned __in __bits(2) IN_1;
03. unsigned __out __bits(5) OUT_0;
04.
05. void main()
06. {
07. if (IN_0 == 0){
08. if (IN_1 == 0) OUT_0 = 1;
09. else OUT_0 = 0;
10. }
11. if (IN_0 == 1) OUT_0 = 1;
12. if (IN_0 == 2){
13. if (IN_1 == 0) OUT_0 = 1;
14. else if (IN_1 == 1) OUT_0 = 2;
15. else if (IN_1 == 2) OUT_0 = 4;
16. else if (IN_1 == 3) OUT_0 = 8;
17. }
18. if (IN_0 == 3){
19. if (IN_1 == 0) OUT_0 = 1;
20. else if (IN_1 == 1) OUT_0 = 3;
21. else if (IN_1 == 2) OUT_0 = 9;
22. else if (IN_1 == 3) OUT_0 = 27;
23. }
24. }
В тесте 00 выдает ответ 0, а в программе ответ = 1.
|
22.10.2024 16:01:12
Тема: Re:Вопросы и ответы по C-MPA
|
Денис Сероженко
Темы: 0
Сообщений: 26
Мой профиль
|
https://dl.gsu.by/task.jsp?nid=2428545&cid=1370
01. unsigned __in __bits(2) IN_0;
02. unsigned __in __bits(2) IN_1;
03. unsigned __out __bits(5) OUT_0;
04.
05. void main()
06. {
07. int i,g = 1;
08. for (i = 0; i < IN_1; i++){
09. g = g*IN_0;
10. }
11. OUT_0 = g;
12. }
На тесте 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
01. unsigned __in __bits(2) IN_0;
02. unsigned __in __bits(2) IN_1;
03. unsigned __out __bits(5) OUT_0;
04.
05. void main()
06. {
07. int i,g = 1;
08. for (i = 0; i < IN_1; i++){
09. g = g*IN_0;
10. }
11. OUT_0 = g;
12. }
На тесте 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
01. unsigned __in __bits(2) IN_0;
02. unsigned __in __bits(2) IN_1;
03. unsigned __out __bits(5) OUT_0=1;
04.
05. void main(){
06. unsigned i;
07. for (i=0;i<IN_1;i++){
08. OUT_0*=IN_0;
09. }
10. }
Ошибка: Несовпадение OUT_0:00100=01000 [9 ns]
В Winter же результат равен 8, что является правильным ответом
|
|