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

Темы: 0
Сообщений: 27

Мой профиль
Задача 6 - "Абсолютная погрешность" 40136 Обловацкий Юрий, ПОИТ-26, март 2006

чекер снят по времени
мое решение:
unsigned __in __bits(8) a=35;
unsigned __in __bits(8) b=43;
unsigned __in __bits(8) c=32;
unsigned __in __bits(8) d=37;


unsigned __out __bits(8) e;

void main()
{
  unsigned n=0,sr=0;
  int e1=0,e2=0,e3=0,e4=0;
  sr=(a+b+c+d)/4;
  e1=a-sr;
  if (e1<0)	e1=e1*(-1);
  e2=b-sr;
  if (e2<0)	e2=e2*(-1);
  e3=c-sr;
  if (e1<0)	e3=e3*(-1);
  e4=d-sr;
  if (e4<0)	e4=e4*(-1);
  if ((e1>e2)&&(e1>e3)&&(e1>e4)) e=e1;
  if ((e2>e1)&&(e2>e3)&&(e2>e4)) e=e2;
  if ((e3>e2)&&(e3>e1)&&(e3>e4)) e=e3;
  if ((e4>e2)&&(e4>e3)&&(e4>e1)) e=e4;
}


______________________
Ваасили Пузан

Темы: 0
Сообщений: 27

Мой профиль
Выдается ошибка компилятора на задаче Экзамен\Контроль практики\Программирование\8\8 - "Среднее арифметическое" 42777 Фамина Ольга, ПОИТ-27, апрель 2006

int __bits(8) mas[5];

int __out __bits(8)	srd;

void main()
{
int i=0;
mas[0]=2;
mas[1]=5;
mas[2]=4;
mas[3]=3;
mas[4]=6;

int max=mas[0];
int min=mas[0];
 for (i==;i<5;i++)
 { if (max<mas[i] ) max=mas[i];
 if (min>mas[i] ) min=mas[i];
 }
 srd=(max+min)/2;
}


______________________
Владимир Тимошков

Темы: 1
Сообщений: 44

Мой профиль
Непонятно осуществляется работа с 64битными числами.

Отображение в Watch-е хромает, как мы поняли отображается по модулю 2^32. Однако, если с ним работать, работает адекватно. Вот пример кода, который работает.

unsigned __bits(64) a = 281479271743489;
	 a0 = x & 65535;
	 x  = x>>16;
	 a1 = x & 65535;
	 x  = x>>16;
	 a2 = x & 65535;
	 x  = x>>16;
	 a3 = x & 65535;

т.е. как и ожидалось в каждой а[0-3] будут единицы.

а вот увеличение(сдвиг вправо, умножение) не работает. Проблема как и у вотча(по модулю 2^32 выполняет)


	 unsigned __bits(64) f= 1;
	 for (int i = 0;i<64;i++) {
  		 f*=2;
         }



	 unsigned __bits(64) f= 1;
         f = f<<20;
         f = f<<15;


ADD: на уменьшение работает, а на увеличение нет. это до чего мы дошли эмпирическим путём.
Игорь Коршунов

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

Мой профиль


Владимир Тимошков:

Отображение в Watch-е хромает, как мы поняли отображается по модулю 2^32. 

Пока реализация позволяет отображать только 32-битные значения.


Владимир Тимошков:


Однако, если с ним работать, работает адекватно.
 

Все вычисления, кроме умножения и деления, производятся побитово, т.е. должны работать правильно для произвольных размерностей.


Владимир Тимошков:


а вот увеличение(сдвиг вправо, умножение) не работает. Проблема как и у вотча(по модулю 2^32 выполняет)
 

Умножение исправлено. Теперь умножение 64-битных чисел должно работать правильно.

Сдвиги должны работать правильно. Можно пример где бы сдвиг работал неправильно?

unsigned __bits(64) f= 1;
         f = f<<20;
         f = f<<15;

Здесь сдвиги работают правильно. В чем можно убедиться выполнив обратную операцию f = f >> 15;
Игорь Коршунов

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

Мой профиль
Примеры решения задачи с контактами большой размерности http://dl/task.jsp?nid=777314&cid=726

Вариант 1. Переменные получаем сдвигом вправо и побитовым И c 8-ю единицами (0xff).
unsigned __in  __bits(72) a;
unsigned __in  __bits(24) k;
unsigned __in  __bits(24) x;
unsigned __out __bits(24) y;

void main()
{

	unsigned __bits(8) x0 =  x        & 0xff;
	unsigned __bits(8) x1 = (x >>  8) & 0xff;
	unsigned __bits(8) x2 = (x >> 16) & 0xff;

	unsigned __bits(8) y0 = x0 * (a       & 0xff) + x1 * ((a >>  8) & 0xff) + x2 * ((a >> 16) & 0xff) +  k        & 0xff;
	unsigned __bits(8) y1 = x0 * (a >> 24 & 0xff) + x1 * ((a >> 32) & 0xff) + x2 * ((a >> 40) & 0xff) + (k >>  8) & 0xff;
	unsigned __bits(8) y2 = x0 * (a >> 48 & 0xff) + x1 * ((a >> 56) & 0xff) + x2 * ((a >> 64) & 0xff) + (k >> 16) & 0xff;
	
	y = y0 | (y1 << 8) | (y2 << 16);
}


Вариант 2. Переменные получаем просто сдвигом вправо на необходимое количество разрядов.
unsigned __in  __bits(72) a;
unsigned __in  __bits(24) k;
unsigned __in  __bits(24) x;
unsigned __out __bits(24) y;

void main()
{

	unsigned __bits(8) x0 = x;
	unsigned __bits(8) x1 = x >>  8;
	unsigned __bits(8) x2 = x >> 16;

	unsigned __bits(8) a00 = a;
	unsigned __bits(8) a01 = a >> 8;
	unsigned __bits(8) a02 = a >> 16;
	unsigned __bits(8) a10 = a >> 24;
	unsigned __bits(8) a11 = a >> 32;
	unsigned __bits(8) a12 = a >> 40;
	unsigned __bits(8) a20 = a >> 48;
	unsigned __bits(8) a21 = a >> 56;
	unsigned __bits(8) a22 = a >> 64;
	
	unsigned __bits(8) k0 = k;
	unsigned __bits(8) k1 = k >>  8;
	unsigned __bits(8) k2 = k >> 16;

	unsigned __bits(8) y0 = x0 * a00 + x1 * a01 + x2 * a02 + k0;
	unsigned __bits(8) y1 = x0 * a10 + x1 * a11 + x2 * a12 + k1;
	unsigned __bits(8) y2 = x0 * a20 + x1 * a21 + x2 * a22 + k2;
	
	y = y0 | (y1 << 8) | (y2 << 16);
}

Владимир Тимошков

Темы: 1
Сообщений: 44

Мой профиль
Не работает
 int j = 0;
 for (int i = 0; in1[i] !='#';i++) {
  out1[j++] = in1[i];
 }


Работает
 int j = 0;
 for (int i = 0; in1[i] !='#';i++) {
  out1[j] = in1[i];
  j++;
 }



Полный код
char in[100] = "asdffasd#";

char out[100];

void main()
{
 int j = 0;
 for (int i = 0; in[i] != '#';i++) {
   out[j++] = 5;
   out[j++] = in[i];
 }
 out[j] = '#';
}

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

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

Мой профиль
Демонстрационная программа показывающая конструкции языка С-МПА, которые можно использовать для синтеза HLCCAD-схем:

/*
Особености програмирования на CMPDL:

- для удобства работы контакты лучше объявлять как
  глобальные переменные

- программа никогда не завершается
  после завершения функция main начинает выполняться сначала
  Поэтому неправильно использовать выходной контакт для промежуточных 
  вычислений



Поддерживается:

- целые знаковые/беззнаковые типы произвольной размерности
- входные/выходные контакты
- арифметические (* / + -)и логические ( & | ^ ~) выражения  ~
- операторы:
	for
	if
	while
	do .. while
	switch
- функции
- директивы препроцессора
	#define
	#ifdef
	#elseif
	#endif
*/

int x = -1; // размерность по умолчанию 32 бита
unsigned __bits(8) z = 0x5; // шестнадцатеричная константа
unsigned __bits(8) y = 05; // восьмеричная константа  - префикс буква 'O'

// входные контакты
unsigned __in __bits(16) A;
unsigned __in __bits(16) B;

// выходной контакт
unsigned __out __bits(16) O;

// функция
unsigned __bits(16) foo(unsigned __bits(16) p1, unsigned __bits(16) p2)
{
	return (p1 + p2) * (p1 + p2);
}

// функция main
void main()
{

	// вызов функции
	unsigned __bits(16)	t = foo(A, B);

	unsigned __bits(8) i;

	// цикл for
	for (i = 0; i < 5; i++)
	{
		if (i == 3) continue;
		t *= A;
		if (t > A * 10) break;
	}

	// цикл do .. while
	do
	{
		t /= 2;
		if (t == 3 * A) break;
	} while (t > 10);

	// цикл while
	while(t < 10)
	{
		t += A - B + 1;
	}

	unsigned __bits(8) a = (A +	B) / 5;

	// оператор switch
	switch(a)
	{
		case 0:
			t -= 5;
			break;
		case 1:
			t += A * B;
			break;
		case 2:
			t = 100;
		default:
			t--;
	}

	// оператор ветвления if else
	if (A + B > t && t != 6) t = -t;
	else if (A + B == t || t < A) t -= A;
	else
	{
		t &= A | B;
		t = ~t;
	}

	// в конце результат подаем на выходной контакт
	O = t;
}

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

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

Мой профиль
Массивы нельзя использовать для синтеза схем, но можно для решения задач на программирование. Пример программы с массивами:

unsigned __bits(16) A[32];

unsigned __bits(32) O;

void main()
{
	unsigned __bits(8) i;
	unsigned __bits(32) s = 0;
	for (i = 0; i < 32; i++)
	{
		if (!A[i]) break;
		s += A[i];
	}
	O = s;
}

Сергей Лопухов

Темы: 0
Сообщений: 19

Мой профиль
Массивы нельзя использовать для синтеза схем, но можно для решения задач на программирование. Пример программы с массивами:  

unsigned __bits(16) A[32];

unsigned __bits(32) O;

void main()
{
	unsigned __bits(8) i;
	unsigned __bits(32) s = 0;
	for (i = 0; i < 32; i++)
	{
//		if (!A[i]) break;
//		s += A[i];
	}
	O = s;
}

Ваш пример работает, если нет обращения к элементам массива.
HLCCAD 4.3.0 (28.12.2010)
Игорь Коршунов

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

Мой профиль


Сергей Лопухов:

Массивы нельзя использовать для синтеза схем 


Ваш пример работает, если нет обращения к элементам массива.
HLCCAD 4.3.0 (28.12.2010) 


Еще раз:
Массивы нельзя использовать для синтеза схем 
Игорь Гулевич

Темы: 1
Сообщений: 20

Мой профиль
Экзамен\Индивидуальные задания\Сконвертированные задания на проектирование\Циклы и переменные\1 - "SQRT" 80615 Коржик Руслан, ПОИТ-26, март 2006
вот код:
unsigned __in __bits(16) x;

unsigned __out __bits(8) z;

void main()
{
for(int i=0;i<x;i++)
if ( (i*i<=x) && ((i+1)*(i+1)>x) ) {z=i;
break;}

}
в винтере тестил тесты проходит, в шлсикаде, что -то типа такого
Ошибка: Несовпадение z:2=16 [3,002 ps]
пробовал переписывать, и z в конце присваивал и через доп переменные и без брейка и не знаю, посоветуй-те что-нибудь
Игорь Коршунов

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

Мой профиль


Игорь Гулевич:

Экзамен\Индивидуальные задания\Сконвертированные задания на проектирование\Циклы и переменные\1 - "SQRT" 80615 Коржик Руслан, ПОИТ-26, март 2006
вот код:
unsigned __in __bits(16) x;

unsigned __out __bits(8) z;

void main()
{
for(int i=0;i<x;i++)
if ( (i*i<=x) && ((i+1)*(i+1)>x) ) {z=i;
break;}

}
в винтере тестил тесты проходит, в шлсикаде, что -то типа такого
Ошибка: Несовпадение z:2=16 [3,002 ps]
пробовал переписывать, и z в конце присваивал и через доп переменные и без брейка и не знаю, посоветуй-те что-нибудь 

Увеличил время задержки.

Но этот алгоритм все равно не будет проходить, т.к. очень медленный. Есть гораздо более эффективное решение.
Юрий Жердецкий

Темы: 0
Сообщений: 44

Мой профиль
Зачет\Контроль практики\Проектирование\5\Контрольный срез \C-МПА\4 - "Задача №4" 101447 Илясов Артем
Вот код:

unsigned __in __bits(16) a;
unsigned __in __bits(16) b;
unsigned __in __bits(8) c;
unsigned __in __bits(8) d;

unsigned __out __bits(16) RES;
unsigned __out __bits(16) b2;
unsigned __out __bits(16) c3;
unsigned __out __bits(16) c2;
unsigned __out __bits(16) d3;
unsigned __out __bits(16) a3;
unsigned __out __bits(16) q;
unsigned __out __bits(16) w;
unsigned __out __bits(16) e;
unsigned __out __bits(16) r;
unsigned __out __bits(16) t;
unsigned __out __bits(16) y;
unsigned __out __bits(16) u;
unsigned __out __bits(16) i;


void main()
{
b2=b*b;
c3=c*c*c;
c2=c*c;
d3=d*d*d;
a3=a*a*a;
q=a*b2*c3;
w=b*c2*d3;
e=(a3/b2)/c;
r=c*d;
t=a+b;
y=a-b;
u=t+r;
i=y-r;

if ((a>-2) && (a<5)) RES = q+w-e;
else RES = u/i;

При подстановки чисел:
a= 3 a= 6
b=-3 b= 1
c= 1 c= 1
d= 4 d= 2
RES=-168 RES=3
При выполнении первой подстановки w=65344, а должно 192.

По протоколу ошибка [test 1]: Тест не прошел: res hex[2]: 0FF88.

Отправлял программу и в таком виде:
unsigned __in __bits(16) a;
unsigned __in __bits(16) b;
unsigned __in __bits(8) c;
unsigned __in __bits(8) d;

unsigned __out __bits(16) RES;


void main()
{
if ((a>-2) & (a<5)) RES = (a*(b*b)*(c*c*c))+(b*(c*c)*(d*d*d))-(((a*a*a)/(b*b))/c);
else RES = (a+b+(c*d))/(a-b-(c*d));

}

Выдает туже ошибку.
Игорь Коршунов

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

Мой профиль


Юрий Жердецкий:

Отправлял программу и в таком виде:
unsigned __in __bits(16) a;
unsigned __in __bits(16) b;
unsigned __in __bits(8) c;
unsigned __in __bits(8) d;

unsigned __out __bits(16) RES;


void main()
{
if ((a>-2) & (a<5)) RES = (a*(b*b)*(c*c*c))+(b*(c*c)*(d*d*d))-(((a*a*a)/(b*b))/c);
else RES = (a+b+(c*d))/(a-b-(c*d));

}

Выдает ту же ошибку.
 

В этой задаче переменные нужно объявлять знаковыми, т.е.
int __in __bits(16) a;
int __in __bits(16) b;
int __in __bits(8) c;
int __in __bits(8) d;

int __out __bits(16) RES;

Михаил Долинский

Темы: 1984
Сообщений: 47256

Мой профиль
06.09.2011, 09:05, "Michael Dolinsky"
> У студента на буке английская версия Windows
> Он запустил Winter и видит кракозябры вместо пунктов меню и сообщений.
> Мы не смогли переключиться на английский язык в Winter
> Есть такая возможность?
> КАК?
> Спасибо 

Ответы Игоря Викторовича Коршунова

Можно запустить так:
WInter.exe --student --language English 

Изнутри можно переключать языки через меню:
вид->язык (view->language). 
 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2, 3, 4, 5, 6, 7, 8, ... 24, 25, 26
Time:0,048