Автор |
Сообщение |
19.02.2009 13:18:12
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Дмитрий Глусцов:
http://dl/task.jsp?nid=323081&cid=597
В Wintere мое решение проходит все тесты,
а сгенерированная схема не проходит.
int __bits(8) n;
int __bits(8) a[36];
int __bits(8) t;
void main() {
int j,i,s=0,s1,max1,max;
max=a[0];
for(i=0;i<n;i++)
{
s1=0;
max1=a[i];
for(j=0;j<n;j++)
{
if (max1<a[n*j+i]) max1=a[n*j+i];
s1=s1+a[n*j+i];
}
if (max<max1) {max=max1; s=s1;}
}
t=s;
}
В данный момент массивы для синтеза схем использовать нельзя.
|
19.02.2009 13:27:28
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Максим Аксютик:
http://dl.gsu.by/task.jsp?nid=332558&cid=597
unsigned __in __bits(32) A;
unsigned __out __bits(8) Res;
void main(void)
{
int i;
for(i=2;i<A/2;i++) if((A%i)==0) i=A;
if(i>(A-1))
Res=0;
else Res=1;
}
в Винтере все тесты проходят ... а вот схема не проходит
Здесь проблема в том, что в тестах недостаточные паузы между тестами (алгоритм не успевает отработать). Тесты будут исправлены через пару дней.
|
20.02.2009 12:29:20
Тема: Re:Вопросы по C-MPA
|
Слава Коноплев
Темы: 1
Сообщений: 15
Мой профиль
|
Зачет\Индивидуальные задания\Проектирование цифровых устройств\Подсчет количества битов\1 - "Количество единиц" 26681 Юрий Кадетов
unsigned __in __bits(16) D;
unsigned __out __bits(5) C;
unsigned x=1,copyD=D,col=0;
void main()
{col=0;
while (copyD>0)
{if (copyD&x) col++;
copyD=copyD>>x;
}
C=col;
}
Чекер снят по времени (>69 sec). В первоначальном варианте сдвигал не на переменную, а на число. По чекеру не снимало, но тесты не проходила. В винтере тесты проходят в обоих случаях.
|
23.02.2009 17:22:24
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Слава Коноплев:
Зачет\Индивидуальные задания\Проектирование цифровых устройств\Подсчет количества битов\1 - "Количество единиц" 26681 Юрий Кадетов
unsigned __in __bits(16) D;
unsigned __out __bits(5) C;
unsigned x=1,copyD=D,col=0;
void main()
{col=0;
while (copyD>0)
{if (copyD&x) col++;
copyD=copyD>>x;
}
C=col;
}
Чекер снят по времени (>69 sec). В первоначальном варианте сдвигал не на переменную, а на число. По чекеру не снимало, но тесты не проходила. В винтере тесты проходят в обоих случаях.
Всегда лучше сдвигать на константу.
Правильное решение:
unsigned __in __bits(16) D;
unsigned __out __bits(5) C;
unsigned copyD=D,col=0;
void main()
{
col=0;
while (copyD>0)
{
if (copyD&x) col++;
copyD>=1;
}
C=col;
}
|
23.02.2009 17:25:21
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Максим Аксютик:
http://dl.gsu.by/task.jsp?nid=332558&cid=597
unsigned __in __bits(32) A;
unsigned __out __bits(8) Res;
void main(void)
{
int i;
for(i=2;i<A/2;i++) if((A%i)==0) i=A;
if(i>(A-1))
Res=0;
else Res=1;
}
в Винтере все тесты проходят ... а вот схема не проходит
Здесь проблема в том, что используются большие значения в тестах и нужна слишком большая задержка между тестами, чтобы схема успевала отработать. Я подумаю, что можно сделать с этой проблемой.
|
23.02.2009 17:28:07
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Дмитрий Глусцов:
http://dl/task.jsp?nid=323177&cid=597
Выдает:
[255d=11111111b]: Тест не прошел: str str[8]:11111111.
Хотя программа тоже заполняет массив выходной 1 или '1' (пробовал 2 варианта). Ответы с тестами совпадают, а выдает ошибку.
unsigned __bits(32) d;
int str[8];
void main()
{
unsigned int i,k=128;
for(i=0;i<8;i++)
{
if((d-k)>=0)
{
str[i]=1; d=d-k;
}
else str[i]=0;
k=k/2;
}
}
Пока нельзя использовать массивы для синтеза схем. При построении схемы ведь выдается сообщение об ошибке.
|
24.02.2009 15:19:40
Тема: Re:Вопросы по C-MPA
|
Михаил Долинский
Темы: 2072
Сообщений: 49881
Мой профиль
|
1) “Пока нельзя использовать массивы для синтеза схем. При построении схемы ведь выдается сообщение об ошибке”
Схема генерируется? Нужно чтобы НЕ ГЕНЕРИРОВАЛАСЬ – чтобы НЕЧЕГО было отсылать на тестирование.
Поскольку проект делается вручную – ЗАПИСАТЬ В САМ проект что-то где-то так, чтобы ВО ВРЕМЯ ТЕСТИРОВАНИЯ на DL можно было в протокол занести то же самое сообщение типа Схема НЕ СГЕНЕРИРОВАНА, поскольку была использована не синтезируемая конструкция – (массивы, сдвиг на переменное число разрядов и т.д. – желательно и строку эту привести и ее номер в программе)
2) Как нам ДИАГНОСТИРОВАТЬ, что микропрограмма не успела?
Можно завести признак (или он уже есть?) – микропрограмма доработала до конца
- и если тест проверяется, когда этот признак не выставлен – ВЫДАВАТЬ СООБЩЕНИЕ микропрограмма НЕ УСПЕВАЕТ отработать за время, отведенное на тест (и привести и тест, и время)
3) Схема не успевает скомпилироваться (Чекер снят по времени (>69 sec)
Предлагаю, чтобы САМ HLCCAD выдавал сообщение – слишком сложная схема – не могу скомпилировать. Надо найти и проанализировать все такие схемы – чтобы ПОКА предъявить студентам такие конструкции и по возможности выдавать «БЛОКИРУЮЩИЕ» сообщения на этапе синтеза и ЗАПИСЫВАТЬ их же в проект – для выдачи в комментариях на DL.
4) Есть еще варианты несовпадения Winter и HLCCAD результатов?
5) Надо завести УЧЕТ ответов – студенты ЖАЛУЮТСЯ, что мы подолгу не отвечаем …
Что- типа
15.02 Ушанов – 22.02
16.02 Шруб - 23.02
…
Так сложилось что у нас две темы
- ошибочные задачи
- вопросы по С-МПА
|
24.02.2009 15:48:09
Тема: Re:Вопросы по C-MPA
|
Михаил Долинский
Темы: 2072
Сообщений: 49881
Мой профиль
|
Временная инструкция для студентов
"Решение проходит в Winter-е, но не проходит в HLCCAD":
1. Возьмите тесты из HLCCAD и подключите в Winter - прогоните программу на них.
2. Подключите тесты к сгенерированному проекту в HLCCAD - прогоните схему на них
Это позволит Вам диагностировать ситуацию:
Перечень возможных причин ситуации
1. Время, установленное в тесте для HLCCAD, недостаточно для выполнения микропрограммы.
- по истории изменения значений во время моделирования можно установить, в какое время на выходах Вашей схемы появляются правильные значения. И сравнить его со временем контроля этих же значений в тесте.
2. В программе используются не синтезируемые (на текущий момент) конструкции:
- массивы
об этом выдается ПРЕДУПРЕЖДЕНИЕ во время синтеза - будьте внимательны!
3. В программе используются конструкции, которые требуют для обработки (генерации схемы) существенно больше времени, чем СЕЙЧАС отводится:
- сдвиг на переменное число разрядов
такие ситуации описываются в форуме, возможно в скором будущем они также будут протоколироваться во время синтеза
4. Неоднократное занесение значений на выходные контакты.
5. Асинхронная работа с входными контактами
в форуме есть примеры таких "плохих"(для генерации схем) программ для случаев 4. и 5.
6. Ошибка в тестах
- если Вы это обнаружите и докажете, мы исправим
7. Ошибка в Вашей программе
Да, бывает и такое
Пользуйтесь отладчиком и режимами автоматического прогона ВСЕХ тестов!
|
26.02.2009 13:34:06
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Игорь Коршунов:
Максим Аксютик:
http://dl.gsu.by/task.jsp?nid=332558&cid=597
unsigned __in __bits(32) A;
unsigned __out __bits(8) Res;
void main(void)
{
int i;
for(i=2;i<A/2;i++) if((A%i)==0) i=A;
if(i>(A-1))
Res=0;
else Res=1;
}
в Винтере все тесты проходят ... а вот схема не проходит
Здесь проблема в том, что используются большие значения в тестах и нужна слишком большая задержка между тестами, чтобы схема успевала отработать. Я подумаю, что можно сделать с этой проблемой.
Можно сдавать эту задачу. Решение лучше отсылать на самую быструю нашу машину - NewIT.
|
02.03.2009 17:34:53
Тема: Re:Вопросы по C-MPA
|
Алексей Голубев
Темы: 0
Сообщений: 97
Мой профиль
|
unsigned __in __bits(8) a=35;
unsigned __in __bits(8) b=47;
unsigned __in __bits(8) c=32;
unsigned __in __bits(8) d=37;
unsigned __out __bits(8) e;
void main()
{
unsigned __bits(8) sr;
unsigned __bits(8) k1;
unsigned __bits(8) k2;
unsigned __bits(8) k3;
unsigned __bits(8) k4;
unsigned __bits(8) max;
sr=((a+b+c+d)/4);
k1=(a-sr);
if (k1<0) k1=-k1;
k2=(b-sr);
if (k2<0) k2=(-k2);
k3=(c-sr);
if (k3<0) k3=(-k3);
k4=(d-sr);
if (k4<0) k4=(-k4);
max=k1;
if (max<k2) max=k2;
if (max<k3) max=k3;
if (max<k4) max=k4;
e=max;
}
При проверке в отладчике строчка if (k1<0) k1=-k1;
не работает как должна.
|
02.03.2009 19:09:42
Тема: Re:Вопросы по C-MPA
|
Михаил Долинский
Темы: 2072
Сообщений: 49881
Мой профиль
|
unsigned __bits(8) k1;
Так k1 же объявлена как беззнаковая - она и не может быть меньше 0!
|
13.03.2009 08:40:35
Тема: Re:Вопросы по C-MPA
|
Андрей Новиков
Темы: 0
Сообщений: 4
Мой профиль
|
найдена ошибка!!!
unsigned __in __bits(16) S=12;
unsigned __in __bits(8) A=2;
unsigned __in __bits(8) B=4;
unsigned __out __bits(8) H;
void main()
{
H=S/((A+B)/2);
}
Ответ =4(правильный);
А при
unsigned __in __bits(16) S=12;
unsigned __in __bits(8) A=2;
unsigned __in __bits(8) B=4;
unsigned __out __bits(8) H;
void main()
{
H=S/(0.5*(A+B));
}
Ответ =6;
задача о высоте трапеции
|
02.04.2009 23:22:11
Тема: Re:Вопросы по C-MPA
|
Александр Антоненко
Темы: 1
Сообщений: 14
Мой профиль
|
Андрей Новиков:
найдена ошибка!!!
unsigned __in __bits(16) S=12;
unsigned __in __bits(8) A=2;
unsigned __in __bits(8) B=4;
unsigned __out __bits(8) H;
void main()
{
H=S/((A+B)/2);
}
Ответ =4(правильный);
А при
unsigned __in __bits(16) S=12;
unsigned __in __bits(8) A=2;
unsigned __in __bits(8) B=4;
unsigned __out __bits(8) H;
void main()
{
H=S/(0.5*(A+B));
}
Ответ =6;
задача о высоте трапеции
хм... насколько я знаю Си:
H=S/((A+B)/2) - операция с целыми числами и результат на выходе целочисленный.
а вот H=S/(0.5*(A+B)) это уже операция с вещественными (за счет 0.5), результат впоследствии тоже вещественный. Ожидать же, что при занесении вещественного числа в целую переменную получится то чего ждешь, как минимум не обоснованно.
|
20.04.2009 17:28:20
Тема: Re:Вопросы по C-MPA
|
Ян Ганькин
Темы: 0
Сообщений: 37
Мой профиль
|
[Ошибка]src.mpc: внутренняя ошибка компилятора - Unsupported node type.
char IN1[128]="abcdef#";
char T[128];
char r='a';
unsigned __out __bits(16) out1;
void main()
{
int __bits(8) cnt=0;
for (int i = 0; IN1[i] != '#'; i++)
{
if (IN1[i]<97 ) T[i]=IN1[i]+32;
else T[i]=IN1[i]-32;
cnt++;
}
T[cnt]="#" ;
out1=T;
}
|
20.04.2009 17:38:19
Тема: Re:Вопросы по C-MPA
|
Ян Ганькин
Темы: 0
Сообщений: 37
Мой профиль
|
Лучшие 20 Обсудить задачу в форуме: Зачет\Контроль практики\Интегральный контроль\12\Программирование\4 - "Поменять регистры" 44325 Нина Бирич, ПОИТ-27, май 2006
В винторе ответ правильный, а тест не проходит.
char IN1[128];
char T[128];
unsigned __out __bits(16) out1;
void main()
{
int __bits(8) cnt=0;
for (int i = 0; IN1[i] != '#'; i++)
{
if (IN1[i]<97 ) T[i]=IN1[i]+32;
else T[i]=IN1[i]-32;
cnt++;
}
T[cnt]='#' ;
out1=T;
}
сначало думал что нехватает решетки в конце, после добавил и всеравно не проходит первый тест
|
|