Автор |
Сообщение |
22.10.2022 11:52:55
Тема: Re:Вопросы и ответы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Роман Мицура:
01. unsigned __in __bits(8) A = 255;
02. unsigned __in __bits(8) B = 157;
03. unsigned __in __bits(8) C = 0;
04. unsigned __in __bits(8) D = 148;
05.
06. unsigned __out __bits(8) E;
07.
08. void main(){
09. int k1,k2,k3,k4;
10. int sred,sred1;
11. sred = A;
12. sred = sred + B;
13. sred = sred + C;
14. sred = sred + D;
15. sred = sred/4;
16. sred1 = (A+B+C+D)/4;
17. k1 = A - sred;
18. k2 = B - sred;
19. k3 = C - sred;
20. k4 = D - sred;
21. if (k1<0)
22. k1 = k1*(-1);
23. if (k2<0)
24. k2 = k2*(-1);
25. if (k3<0)
26. k3 = k3*(-1);
27. if (k4<0)
28. k4 = k4*(-1);
29. if ((k1>=k2)&&(k1>=k3)&&(k1>=k4))
30. E = k1;
31. if ((k2>=k1)&&(k2>=k3)&&(k2>=k4))
32. E = k2;
33. if ((k3>=k2)&&(k3>=k1)&&(k3>=k4))
34. E = k3;
35. if ((k4>=k2)&&(k4>=k3)&&(k4>=k1))
36. E = k4;
37. }
sred считается правильно, sred1 не правильно
Когда складываются 8-битные A+B+C+D происходит переполнение промежуточных вычислений, т.к. результат не помещается в 8 бит.
Можно так:
sred = A;
sred += B;
sred += C;
sred += D;
|
22.10.2022 11:59:02
Тема: Re:Вопросы и ответы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Игорь Коржов:
01. unsigned __in __bits(1) x1 = 1;
02. unsigned __in __bits(1) x2 = 1;
03. unsigned __in __bits(1) x3 = 0;
04. unsigned __in __bits(1) x4 = 1;
05. unsigned __out __bits(1) y1;
06. unsigned __out __bits(1) y2;
07. unsigned __out __bits(1) y3;
08. unsigned __out __bits(1) y4;
09.
10. void main(){
11. if (~x1 && ~x2 && ~x3 && ~x4) {
12. y1 = 0;
13. y2 = 1;
14. y3 = 0;
15. y4 = 0;
16. }
17. }
Если просто отрицать значения через ~ то условие работает неправильно
Если создать дополнительные переменные то все будет работать
Если работать просто с & то тоже работает неправильно
01. unsigned __in __bits(1) x1 = 1;
02. unsigned __in __bits(1) x2 = 1;
03. unsigned __in __bits(1) x3 = 0;
04. unsigned __in __bits(1) x4 = 1;
05. unsigned __out __bits(1) y1;
06. unsigned __out __bits(1) y2;
07. unsigned __out __bits(1) y3;
08. unsigned __out __bits(1) y4;
09.
10. void main(){
11. unsigned __in __bits(1) x11 = ~x1;
12. unsigned __in __bits(1) x22 = ~x2;
13. unsigned __in __bits(1) x33 = ~x3;
14. unsigned __in __bits(1) x44 = ~x4;
15. if (x11 && x22 && x33 && x44) {
16. y1 = 0;
17. y2 = 1;
18. y3 = 0;
19. y4 = 0;
20. }
21. }
Результат ~x1 записывается в промежуточную переменную с размерностью больше 1-ого бита поэтому инвертирование не работает как отрицание. Но в Си есть специальный оператор отрицания !. Правильно так:
if (!x1 && !x2 && !x3 && !x4) {
|
22.10.2022 12:12:56
Тема: Re:Вопросы и ответы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Арман Сорокин:
Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Контрольные срезы\26 сентября\Проектирование\Простые устройства с памятью\2 - "Арифметика" (53810)
http://dl.gsu.by/task.jsp?nid=2240401&cid=1282
14.10 16:52 2. Арифметика 0 / 1 Ошибка: Несовпадение RES:00000001=10 [9 ns] DelTA3 at NIT8 HLCCAD project
01. unsigned __in __bits(2) A = 1;
02. unsigned __in __bits(2) B = 2;
03. unsigned __in __bits(2) C = 1;
04.
05. unsigned __out __bits(8) RES;
06.
07. unsigned __bits(8) mem;
08.
09. void main()
10. {
11. if ((A * B) < (C + 1))
12. {
13. mem = 0;
14. RES = 0;
15. }
16. else if ((A * B) > (C + 1))
17. {
18. mem = A * B - C;
19. RES = mem;
20. }
21. else
22. {
23. RES = mem;
24. }
25. }
В самом начале программы нужно сохранить значения контактов во внутренних переменных. И в самой программе работать только с ними. Это предотвратит некорректную работу программы, когда входы меняются посреди вычисления логического выражения внутри if. См. также: http://dl.gsu.by/NForum/posts/topicshow/46.dl?postid=3646#3646
Правильно так:
01. unsigned __in __bits(2) A;
02. unsigned __in __bits(2) B;
03. unsigned __in __bits(2) C;
04.
05. unsigned __out __bits(8) RES;
06.
07. unsigned __bits(8) mem;
08.
09. void main()
10. {
11. unsigned __bits(2) A1 = A;
12. unsigned __bits(2) B1 = B;
13. unsigned __bits(2) C1 = C;
14.
15. if ((A1 * B1) < (C1 + 1))
16. {
17. mem = 0;
18. RES = 0;
19. }
20. else if ((A1 * B1) > (C1 + 1))
21. {
22. mem = A1 * B1 - C1;
23. RES = mem;
24. }
25. else
26. {
27. RES = mem;
28. }
29. }
|
22.10.2022 12:28:30
Тема: Re:Вопросы и ответы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Николай Афанасенко :
Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Контрольные срезы\12 сентября \Программирование\Цифры числа\3 - "Перевернутое число" (44766)
http://dl.gsu.by/task.jsp?nid=2239965&cid=1282
01. int __in __bits(16) x ;
02.
03. int __out __bits(16) y;
04.
05. void main(){
06. int start = x;
07. int fin = 0;
08. while (start >= 1){
09. int digit = start %10;
10. fin += digit;
11. fin *=10;
12. start /=10;
13. }
14. fin /=10;
15. y = fin;
16. }
Пишет ошибка в 1 тесте, хотя при проверке всех тестов ответ сходиться
Было отослано решение в котором инициализируется входная переменная:
01. int __in __bits(16) x = 123;
02.
03. int __out __bits(16) y;
04.
05. void main(){
06. int start = x;
07. int fin = 0;
08. while (start >= 1){
09. int digit = start %10;
10. fin += digit;
11. fin *=10;
12. start /=10;
13. }
14. fin /=10;
15. y = fin;
16. }
Так делать можно только при отладке. При отсылке нужно убирать инициализацию входов.
|
01.11.2022 09:56:45
Тема: Re:Вопросы и ответы по C-MPA
|
Даниил Коханов
Темы: 1
Сообщений: 17
Мой профиль
|
Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Командные олимпиады\Архитектура ПЦОС на примере TMS320c30 \Контрольный срез (Пример 7)\Базовый\С - "Задача №7" (101450)
http://dl.gsu.by/task.jsp?nid=2244910&cid=1282
01. int __in __bits(8) c;
02. int __in __bits(8) d;
03. int __in __bits(16) a;
04. int __in __bits(16) b;
05. int __out __bits(16) RES;
06.
07.
08. int sign( int x){
09. if (x > 0) return (1);
10. if (x == 0) return (0);
11. if (x < 0) return (-1);
12. }
13. void main(){
14. if (a == 4) RES = c/a+b/d-a*c;
15. if (a != 4) RES = (a+b-(sign(c*d)))/a;
16. }
1.11 09:52 С. Задача №7 0 / 100 [test 1]: Тест не прошел: res sgn[2]: 5. DelTA3 at NIT8 Winter mpc
a = 5
b = 24
c = 255 = -1
d = 249 = -7
В Winter получилось тоже 5. Решение не принимается.
|
01.11.2022 09:58:14
Тема: Re:Вопросы и ответы по C-MPA
|
Даниил Коханов
Темы: 1
Сообщений: 17
Мой профиль
|
Отправил еще раз прошло
|
01.11.2022 14:28:59
Тема: Re:Вопросы и ответы по C-MPA
|
Михаил Долинский
Темы: 2072
Сообщений: 49899
Мой профиль
|
Даниил Коханов:
Отправил еще раз прошло
Оно не потому прошло, что ещё раз отправил, а потому, что ПРИСВАИВАНИЯ начальных значений убрал
Вот текст программы, которая не проходила
01. int __in __bits(8) c=4;
02. int __in __bits(8) d=6;
03. int __in __bits(16) a=8;
04. int __in __bits(16) b=3;
05. int __out __bits(16) RES;
06.
07.
08. int sign( int x){
09. if (x > 0) return (1);
10. if (x == 0) return (0);
11. if (x < 0) return (-1);
12. }
13. void main(){
14. if (a == 4) RES = c/a+b/d-a*c;
15. if (a != 4) RES = (a+b-sign(c*d))/a;
16. }
|
03.11.2022 11:50:39
Тема: Re:Вопросы и ответы по C-MPA
|
Евгений Бова
Темы: 0
Сообщений: 19
Мой профиль
|
Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Экзамен\Контроль практики\Программирование\8\Add-8\Проектирование\3 - "Старшая единица" (83061)
http://dl.gsu.by/task.jsp?nid=2249080&cid=1282
03.11.2022 11:41:36 03.11.2022 11:41:44 Бова Евгений Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022 3. Старшая единица 0 Ошибка: Несовпадение Y:2097152=1 [18 ns] Project.prd DelTA3 at NIT0
03.11.2022 11:39:52 03.11.2022 11:39:57 Бова Евгений Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022 3. Старшая единица (программа) 100 Все тесты пройдены (основной + секретный). src.mpc DelTA3 at NIT8
Не проходит задача. У меня ответ выдает правильный.
Ошибка: Несовпадение Y:2097152=1 [18 ns]
; Test 6
Set 1,10 on X at 15001
Diff 1,10 on Y at 18000
01. unsigned __in __bits(32) X;
02.
03. unsigned __out __bits(32) Y;
04.
05. void main() {
06. unsigned __bits(32) a = X;
07. unsigned __bits(32) b = 0;
08. unsigned __bits(32) mask = 0x01;
09. for ( int i = 0; i < 32; i++) {
10. if ((a & (mask << (31 - i))) == (mask << (31 - i))) {
11. b |= (mask << (31 - i));
12. break ;
13. }
14. }
15. Y = b;
16. }
|
04.11.2022 15:32:33
Тема: Re:Вопросы и ответы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Евгений Бова:
Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Экзамен\Контроль практики\Программирование\8\Add-8\Проектирование\3 - "Старшая единица" (83061)
http://dl.gsu.by/task.jsp?nid=2249080&cid=1282
03.11.2022 11:41:36 03.11.2022 11:41:44 Бова Евгений Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022 3. Старшая единица 0 Ошибка: Несовпадение Y:2097152=1 [18 ns] Project.prd DelTA3 at NIT0
03.11.2022 11:39:52 03.11.2022 11:39:57 Бова Евгений Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022 3. Старшая единица (программа) 100 Все тесты пройдены (основной + секретный). src.mpc DelTA3 at NIT8
Не проходит задача. У меня ответ выдает правильный.
Ошибка: Несовпадение Y:2097152=1 [18 ns]
; Test 6
Set 1,10 on X at 15001
Diff 1,10 on Y at 18000
01. unsigned __in __bits(32) X;
02.
03. unsigned __out __bits(32) Y;
04.
05. void main() {
06. unsigned __bits(32) a = X;
07. unsigned __bits(32) b = 0;
08. unsigned __bits(32) mask = 0x01;
09. for ( int i = 0; i < 32; i++) {
10. if ((a & (mask << (31 - i))) == (mask << (31 - i))) {
11. b |= (mask << (31 - i));
12. break ;
13. }
14. }
15. Y = b;
16. }
Схема не успевает отработать за интервал времени указанный в тесте, т.к. много инструкций внутри цикла.
Вот пример более быстрого кода:
01. unsigned __in __bits(32) X;
02. unsigned __out __bits(32) Y;
03. void main() {
04. unsigned __bits(32) tx = X;
05. if (tx)
06. {
07. unsigned __bits(32) mask = 0x80000000;
08. for (;;)
09. {
10. if (tx & mask)
11. {
12. Y = tx & mask;
13. break ;
14. }
15. mask >>= 1;
16. }
17. }
18. else Y = 0;
19. }
|
22.11.2022 10:10:54
Тема: Re:Вопросы и ответы по C-MPA
|
Игорь Коржов
Темы: 0
Сообщений: 7
Мой профиль
|
Падает программа CMPA при этом коде:
01. unsigned __in __bits(4) X = 3 ;
02. unsigned __out __bits(4) Y = 0;
03.
04.
05. void main() {
06. int size = 4;
07. unsigned __bits(4) sss = 3 ;
08. unsigned __bits(4) var = 0;
09. int count = 0;
10. for ( int i = 0; i < size; i++) {
11. if ( (sss &(1<<i)) != 0)
12. count++;
13. }
14.
15. for (i = 0; i <= count; i++) {
16.
17.
18. }
19. }
|
22.11.2022 10:17:24
Тема: Re:Вопросы и ответы по C-MPA
|
Михаил Долинский
Темы: 2072
Сообщений: 49899
Мой профиль
|
На вот этой строке
1. if ( (sss &(1<<i)) != 0)
|
25.11.2022 11:46:34
Тема: Re:Вопросы и ответы по C-MPA
|
Alina Yasmine
Темы: 0
Сообщений: 5
Мой профиль
|
Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Обучение\Подготовка к контрольному срезу\Ассемблер\1 - "Подключение тестовых файлов в WInter" (135564)
http://dl.gsu.by/task.jsp?nid=2245550&cid=1282
не проходит тестирование
сгенерированная схема по этой программе
01. int __in __bits(1) x1;
02. int __in __bits(1) x2;
03. int __in __bits(1) x3;
04. int __in __bits(1) x4;
05. int __out __bits(1) y1;
06. int __out __bits(1) y2;
07. int __out __bits(1) y3;
08. int __out __bits(1) y4;
09.
10. void main()
11. {
12. y4=~x4&x3&~x2&~x1|x4&x3&~x2&x1|x4&~x3&x2&x1|~x4&~x3&x2&~x1;
13. y3=x3&x1|x2&x1|x3&x2;
14. y2=~x4&x1|x3&x1;
15. y1=~x4 | x3| ~x2 & x1 | x2 & ~x1;
16. }
и это тоже
01. unsigned __in __bits(1) x1;
02. unsigned __in __bits(1) x2;
03. unsigned __in __bits(1) x3;
04. unsigned __in __bits(1) x4;
05. unsigned __out __bits(1) y1;
06. unsigned __out __bits(1) y2;
07. unsigned __out __bits(1) y3;
08. unsigned __out __bits(1) y4;
09.
10. void main()
11. {
12. unsigned __bits(1) tx1,tx2,tx3,tx4;
13. tx1=x1;
14. tx2=x2;
15. tx3=x3;
16. tx4=x4;
17. y4=~tx4&tx3&~tx2&~tx1 | tx4&tx3&~tx2&tx1 | tx4&~tx3&tx2&tx1 | ~tx4&~tx3&tx2&~tx1;
18. y3=tx3&tx1 | tx2&tx1 | tx3&tx2;
19. y2=~tx4&tx1 | tx3&tx1;
20. y1=~tx4 | tx3 | ~tx2 & tx1 | tx2 & ~tx1;
21. }
|
25.11.2022 15:40:36
Тема: Re:Вопросы и ответы по C-MPA
|
Александр Ямром
Темы: 0
Сообщений: 4
Мой профиль
|
Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Контрольные срезы\24 октября\Программирование\Обработка строк (простая)\10 - "Поменять регистры" (44325)
http://dl.gsu.by/task.jsp?nid=2241492&cid=1282
________________________________________________________
char in1[255];
char out1[255];
int main() {
char str[255];
for (int i = 0; in1[i] != '#'; i++) {
if (in1[i] >= 65 && in1[i] <= 90) {
str[i] = in1[i] + 32;
} else {
str[i] = in1[i] - 32;
}
}
out1 = str;
}
_______________________________________________
Во вкладке "переменная" out1 имеет нужно значение, но тест не проходит
|
26.11.2022 10:06:10
Тема: Re:Вопросы и ответы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Александр Ямром:
Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Контрольные срезы\24 октября\Программирование\Обработка строк (простая)\10 - "Поменять регистры" (44325)
http://dl.gsu.by/task.jsp?nid=2241492&cid=1282
________________________________________________________
char in1[255];
char out1[255];
int main() {
char str[255];
for (int i = 0; in1[i] != '#'; i++) {
if (in1[i] >= 65 && in1[i] <= 90) {
str[i] = in1[i] + 32;
} else {
str[i] = in1[i] - 32;
}
}
out1 = str;
}
_______________________________________________
Во вкладке "переменная" out1 имеет нужно значение, но тест не проходит
В конце out1 нет '#'. В условии в примере показано, что завершающий символ должен быть и в выходной строке.
Вот тест:
[abcdef]
Cycles = 1000
CheckCycles = true
Segment - 0
Offset - 0
in1 str: abcdef#
out1 str: ABCDEF#
|
26.11.2022 10:39:56
Тема: Re:Вопросы и ответы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Alina Yasmine:
не проходит тестирование
сгенерированная схема по этой программе
01. int __in __bits(1) x1;
02. int __in __bits(1) x2;
03. int __in __bits(1) x3;
04. int __in __bits(1) x4;
05. int __out __bits(1) y1;
06. int __out __bits(1) y2;
07. int __out __bits(1) y3;
08. int __out __bits(1) y4;
09.
10. void main()
11. {
12. y4=~x4&x3&~x2&~x1|x4&x3&~x2&x1|x4&~x3&x2&x1|~x4&~x3&x2&~x1;
13. y3=x3&x1|x2&x1|x3&x2;
14. y2=~x4&x1|x3&x1;
15. y1=~x4 | x3| ~x2 & x1 | x2 & ~x1;
16. }
и это тоже
01. unsigned __in __bits(1) x1;
02. unsigned __in __bits(1) x2;
03. unsigned __in __bits(1) x3;
04. unsigned __in __bits(1) x4;
05. unsigned __out __bits(1) y1;
06. unsigned __out __bits(1) y2;
07. unsigned __out __bits(1) y3;
08. unsigned __out __bits(1) y4;
09.
10. void main()
11. {
12. unsigned __bits(1) tx1,tx2,tx3,tx4;
13. tx1=x1;
14. tx2=x2;
15. tx3=x3;
16. tx4=x4;
17. y4=~tx4&tx3&~tx2&~tx1 | tx4&tx3&~tx2&tx1 | tx4&~tx3&tx2&tx1 | ~tx4&~tx3&tx2&~tx1;
18. y3=tx3&tx1 | tx2&tx1 | tx3&tx2;
19. y2=~tx4&tx1 | tx3&tx1;
20. y1=~tx4 | tx3 | ~tx2 & tx1 | tx2 & ~tx1;
21. }
Увеличены задержки в тестах. Решение засчитано.
|
|