[Logo] Форум DL
  [DL]  На главную страницу 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2, 3, 4, 5, 6, ... 24, 25, 26
Автор Сообщение
Игорь Коршунов

Темы: 7
Сообщений: 2186

Мой профиль


Дмитрий Глусцов:

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;
}
 

В данный момент массивы для синтеза схем использовать нельзя.
Игорь Коршунов

Темы: 7
Сообщений: 2186

Мой профиль


Максим Аксютик:

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;
}


в Винтере все тесты проходят ... а вот схема не проходит 

Здесь проблема в том, что в тестах недостаточные паузы между тестами (алгоритм не успевает отработать). Тесты будут исправлены через пару дней.
Слава Коноплев

Темы: 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). В первоначальном варианте сдвигал не на переменную, а на число. По чекеру не снимало, но тесты не проходила. В винтере тесты проходят в обоих случаях.
Игорь Коршунов

Темы: 7
Сообщений: 2186

Мой профиль


Слава Коноплев:

Зачет\Индивидуальные задания\Проектирование цифровых устройств\Подсчет количества битов\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;
}

Игорь Коршунов

Темы: 7
Сообщений: 2186

Мой профиль


Максим Аксютик:

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;
}


в Винтере все тесты проходят ... а вот схема не проходит 

Здесь проблема в том, что используются большие значения в тестах и нужна слишком большая задержка между тестами, чтобы схема успевала отработать. Я подумаю, что можно сделать с этой проблемой.
Игорь Коршунов

Темы: 7
Сообщений: 2186

Мой профиль


Дмитрий Глусцов:

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;
 }
}
 

Пока нельзя использовать массивы для синтеза схем. При построении схемы ведь выдается сообщение об ошибке.
Михаил Долинский

Темы: 1985
Сообщений: 47296

Мой профиль
1) “Пока нельзя использовать массивы для синтеза схем. При построении схемы ведь выдается сообщение об ошибке” 
Схема генерируется? Нужно чтобы НЕ ГЕНЕРИРОВАЛАСЬ – чтобы НЕЧЕГО было отсылать на тестирование.
Поскольку проект делается вручную – ЗАПИСАТЬ В САМ проект что-то где-то так, чтобы ВО ВРЕМЯ ТЕСТИРОВАНИЯ на DL можно было в протокол занести то же самое сообщение типа Схема НЕ СГЕНЕРИРОВАНА, поскольку была использована не синтезируемая конструкция – (массивы, сдвиг на переменное число разрядов и т.д. – желательно и строку эту привести и ее номер в программе)

2) Как нам ДИАГНОСТИРОВАТЬ, что микропрограмма не успела?
Можно завести признак (или он уже есть?) – микропрограмма доработала до конца
- и если тест проверяется, когда этот признак не выставлен – ВЫДАВАТЬ СООБЩЕНИЕ микропрограмма НЕ УСПЕВАЕТ отработать за время, отведенное на тест (и привести и тест, и время)

3) Схема не успевает скомпилироваться (Чекер снят по времени (>69 sec)
Предлагаю, чтобы САМ HLCCAD выдавал сообщение – слишком сложная схема – не могу скомпилировать. Надо найти и проанализировать все такие схемы – чтобы ПОКА предъявить студентам такие конструкции и по возможности выдавать «БЛОКИРУЮЩИЕ» сообщения на этапе синтеза и ЗАПИСЫВАТЬ их же в проект – для выдачи в комментариях на DL.

4) Есть еще варианты несовпадения Winter и HLCCAD результатов?

5) Надо завести УЧЕТ ответов – студенты ЖАЛУЮТСЯ, что мы подолгу не отвечаем …
Что- типа

15.02 Ушанов – 22.02
16.02 Шруб - 23.02


Так сложилось что у нас две темы
- ошибочные задачи
- вопросы по С-МПА
Михаил Долинский

Темы: 1985
Сообщений: 47296

Мой профиль
Временная инструкция для студентов

"Решение проходит в Winter-е, но не проходит в HLCCAD":

1. Возьмите тесты из HLCCAD и подключите в Winter - прогоните программу на них.
2. Подключите тесты к сгенерированному проекту в HLCCAD - прогоните схему на них

Это позволит Вам диагностировать ситуацию:

Перечень возможных причин ситуации
1. Время, установленное в тесте для HLCCAD, недостаточно для выполнения микропрограммы.
- по истории изменения значений во время моделирования можно установить, в какое время на выходах Вашей схемы появляются правильные значения. И сравнить его со временем контроля этих же значений в тесте.

2. В программе используются не синтезируемые (на текущий момент) конструкции:
- массивы
об этом выдается ПРЕДУПРЕЖДЕНИЕ во время синтеза - будьте внимательны!

3. В программе используются конструкции, которые требуют для обработки (генерации схемы) существенно больше времени, чем СЕЙЧАС отводится:
- сдвиг на переменное число разрядов
такие ситуации описываются в форуме, возможно в скором будущем они также будут протоколироваться во время синтеза

4. Неоднократное занесение значений на выходные контакты.
5. Асинхронная работа с входными контактами
в форуме есть примеры таких "плохих"(для генерации схем) программ для случаев 4. и 5.

6. Ошибка в тестах
- если Вы это обнаружите и докажете, мы исправим

7. Ошибка в Вашей программе
Да, бывает и такое
Пользуйтесь отладчиком и режимами автоматического прогона ВСЕХ тестов!
Игорь Коршунов

Темы: 7
Сообщений: 2186

Мой профиль


Игорь Коршунов:


Максим Аксютик:

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.
Алексей Голубев

Темы: 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;
не работает как должна.
Михаил Долинский

Темы: 1985
Сообщений: 47296

Мой профиль
unsigned __bits(8) k1; 

Так k1 же объявлена как беззнаковая - она и не может быть меньше 0!
Андрей Новиков

Темы: 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;
задача о высоте трапеции
Александр Антоненко

Темы: 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), результат впоследствии тоже вещественный. Ожидать же, что при занесении вещественного числа в целую переменную получится то чего ждешь, как минимум не обоснованно.
Ян Ганькин

Темы: 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;
}

Ян Ганькин

Темы: 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;
}

сначало думал что нехватает решетки в конце, после добавил и всеравно не проходит первый тест
 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2, 3, 4, 5, 6, ... 24, 25, 26
Time:0,042