Автор |
Сообщение |
14.10.2010 13:00:47
Тема: Re:Вопросы по C-MPA
|
Ваасили Пузан
Темы: 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;
}
______________________
|
04.11.2010 12:16:20
Тема: Re:Вопросы по C-MPA
|
Ваасили Пузан
Темы: 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;
}
______________________
|
11.11.2010 17:31:36
Тема: Re:Вопросы по C-MPA
|
Владимир Тимошков
Темы: 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: на уменьшение работает, а на увеличение нет. это до чего мы дошли эмпирическим путём.
|
16.11.2010 10:51:12
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Владимир Тимошков:
Отображение в Watch-е хромает, как мы поняли отображается по модулю 2^32.
Пока реализация позволяет отображать только 32-битные значения.
Владимир Тимошков:
Однако, если с ним работать, работает адекватно.
Все вычисления, кроме умножения и деления, производятся побитово, т.е. должны работать правильно для произвольных размерностей.
Владимир Тимошков:
а вот увеличение(сдвиг вправо, умножение) не работает. Проблема как и у вотча(по модулю 2^32 выполняет)
Умножение исправлено. Теперь умножение 64-битных чисел должно работать правильно.
Сдвиги должны работать правильно. Можно пример где бы сдвиг работал неправильно?
unsigned __bits(64) f= 1;
f = f<<20;
f = f<<15;
Здесь сдвиги работают правильно. В чем можно убедиться выполнив обратную операцию f = f >> 15;
|
07.12.2010 11:42:57
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Примеры решения задачи с контактами большой размерности 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);
}
|
23.12.2010 12:18:56
Тема: Re:Вопросы по C-MPA
|
Владимир Тимошков
Темы: 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] = '#';
}
|
15.02.2011 12:55:27
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Демонстрационная программа показывающая конструкции языка С-МПА, которые можно использовать для синтеза 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;
}
|
15.02.2011 13:06:42
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Массивы нельзя использовать для синтеза схем, но можно для решения задач на программирование. Пример программы с массивами:
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;
}
|
21.02.2011 12:40:50
Тема: Re:Вопросы по C-MPA
|
Сергей Лопухов
Темы: 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)
|
21.02.2011 14:31:22
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Сергей Лопухов:
Массивы нельзя использовать для синтеза схем
Ваш пример работает, если нет обращения к элементам массива.
HLCCAD 4.3.0 (28.12.2010)
Еще раз:
Массивы нельзя использовать для синтеза схем
|
21.02.2011 21:26:31
Тема: Re:Вопросы по C-MPA
|
Игорь Гулевич
Темы: 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 в конце присваивал и через доп переменные и без брейка и не знаю, посоветуй-те что-нибудь
|
22.02.2011 10:45:13
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Игорь Гулевич:
Экзамен\Индивидуальные задания\Сконвертированные задания на проектирование\Циклы и переменные\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 в конце присваивал и через доп переменные и без брейка и не знаю, посоветуй-те что-нибудь
Увеличил время задержки.
Но этот алгоритм все равно не будет проходить, т.к. очень медленный. Есть гораздо более эффективное решение.
|
10.03.2011 09:50:48
Тема: Re:Вопросы по C-MPA
|
Юрий Жердецкий
Темы: 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));
}
Выдает туже ошибку.
|
10.03.2011 10:19:50
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Юрий Жердецкий:
Отправлял программу и в таком виде:
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;
|
06.09.2011 18:45:22
Тема: Re:Вопросы по C-MPA
|
Михаил Долинский
(Online)
Темы: 2072
Сообщений: 49883
Мой профиль
|
06.09.2011, 09:05, "Michael Dolinsky"
> У студента на буке английская версия Windows
> Он запустил Winter и видит кракозябры вместо пунктов меню и сообщений.
> Мы не смогли переключиться на английский язык в Winter
> Есть такая возможность?
> КАК?
> Спасибо
Ответы Игоря Викторовича Коршунова
Можно запустить так:
WInter.exe --student --language English
Изнутри можно переключать языки через меню:
вид->язык (view->language).
|
|