Автор |
Сообщение |
20.12.2014 16:42:49
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Дмитрий Шакин:
Контрольные срезы\26 декабря\Программирование\Обработка строк (простая)\8 - "Максимальная последовательность символов" 10.05.2006 43957 Авсиевич Д., ПОИТ-12 , май 2006
http://dl.gsu.by/task.jsp?nid=1294136&cid=926
20.12 13:00 8. Максимальная последовательность символов 0 / 300 [TEST2]: Тест не прошел: res dec[2]: 9. src.mpc DelTA3 at DLServer Winter mpc
Моя программа на локальной машине дает правильный ответ 9
char A[90];
unsigned __out __bits(16) res;
void main()
{
int i;
int z;
int x=0;
int max=0;
if (A[0]=='#') res=0;
else
{
for (i=0;A[i]!='#';i++)
x++;
for (i=0;i<x-1;i++)
{
if (A[i]==A[i+1])
{
z++;
if (max<z)max=z;
}
else
{
if (max<z) max=z;
z=0;
}
}
if (max>1)
{
max++;
res=max;
}
else res=1;
}
}
Не инициализируется переменная z. Поэтому программа на одном тесте может выдавать разные ответы.
|
20.02.2015 13:00:32
Тема: Re:Вопросы по C-MPA
|
Станислав Свиридов
Темы: 8
Сообщений: 85
Мой профиль
|
Добрый день!
CMPA не правильно обрабатывает следующие конструкции, a[b[i]], a и b - массивы, i - переменная int.
Нерабочий код:
char in1[255];
char out1[255];
unsigned __bits(8) s[255];
int main() {
for(int i = 0; i < 255; i++) {
s[i] = 0;
}
int n = 0;
for(i = 0; in1[i] != '#'; i++) {
s[in1[i]]++; //проблема тут!
}
for(i = 0; in1[i] != '#'; i++) {
if (s[in1[i]] == 1) {
out1[n++] = in1[i]; //и тут!
}
}
out1[n] = '#';
}
А вот рабочий:
char in1[255];
char out1[255];
unsigned __bits(8) s[255];
int main() {
for(int i = 0; i < 255; i++) {
s[i] = 0;
}
int n = 0;
for(i = 0; in1[i] != '#'; i++) {
int x = in1[i];
s[x]++;
}
for(i = 0; in1[i] != '#'; i++) {
int x = in1[i];
if (s[x] == 1) {
out1[n++] = in1[i];
}
}
out1[n] = '#';
}
Задача: http://dl.gsu.by/task.jsp?nid=1391097&cid=947
|
20.02.2015 13:30:34
Тема: Re:Вопросы по C-MPA
|
Станислав Свиридов
Темы: 8
Сообщений: 85
Мой профиль
|
Какая-то ерунда с унарной операцией - и 0:
Нерабочий код:
#define i1 int __in __bits(8)
#define i2 int __in __bits(16)
#define o1 int __out __bits(8)
#define o2 int __out __bits(16)
#define uo1 unsigned __out __bits(8)
int __bits(8) x[10];
uo1 res;
int main() {
int p = 0, n = 0;
for(int i = 0; i < 10; i++) {
if (x[i] > 0) {
p += x[i];
} else {
n += -x[i];
}
}
res = p % n;
}
Рабочий код:
#define i1 int __in __bits(8)
#define i2 int __in __bits(16)
#define o1 int __out __bits(8)
#define o2 int __out __bits(16)
#define uo1 unsigned __out __bits(8)
int __bits(8) x[10];
uo1 res;
int main() {
int p = 0, n = 0;
for(int i = 0; i < 10; i++) {
if (x[i] >= 0) {
p += x[i];
} else {
n += -x[i];
}
}
res = p % n;
}
Задача:
http://dl.gsu.by/task.jsp?nid=1391149&cid=947
|
20.02.2015 16:04:47
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Станислав Свиридов:
CMPA не правильно обрабатывает следующие конструкции, a[b[i]], a и b - массивы, i - переменная int.
Это ограничение СМПА: при обращении к массиву индекс должен быть целочисленной переменной.
|
20.02.2015 16:07:24
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Станислав Свиридов:
Какая-то ерунда с унарной операцией - и 0:
Это будет исправлено в ближайшее время.
|
23.02.2015 19:12:50
Тема: Re:Вопросы по C-MPA
|
Михаил Долинский
(Online)
Темы: 2072
Сообщений: 49883
Мой профиль
|
23.02.2015 14:24:36 23.02.2015 14:24:53 Голуб, Юденко ПМ-41 Архитектура вычислительных систем (ПМ4) - 2015 ОС. Перевернуть и вставить пробелы 0 Внутренняя ошибка WChecker: не удается открыть report.txt src.mpc DelTA3 at NIT8
#define _U int
#define _I __in
#define _O __out
#define S __bits
char IN_STR[500];
char OUT_STR[1000];
void main () {
int i;
for (i=0; IN_STR[i] != '#'; i++);
for (int j = 0; j < i; j++) {
OUT_STR[j*2]=IN_STR[i-j-1];
OUT_STR[j*2+1]=' ';
}
OUT_STR[i*2]=0;
}
|
23.02.2015 19:18:44
Тема: Re:Вопросы по C-MPA
|
Павел Голуб
Темы: 5
Сообщений: 120
Мой профиль
|
Возник такой вопрос, как замедлить работу программы или иным спопсоб синхронизироваться с тестами. Поясню подробее. В задачах
Командные олимпиады\Особенности архитектуры МП Intel 80286\Контрольный срез (Пример 3)\Проектирование\ПА - "Две монетки" 54026
Командные олимпиады\Особенности архитектуры МП Intel 80286\Проектирование\4 - "Сложи, если сможешь (микропрограммно)" 131984
Необходимо реализовывать счётчик (т.е. постоянно увеличивать значение на сколько-там-надо) при этом программа на С-МПА работает быстрее чем 1000ps теста и запукается по 10 раз на тесте. В данных задач, что спасло, все входные данные различные и удалось привязаться к ним. Это единственный способ? или есть проще решения. При написании на обычном hlccad такой проблемы не было.
И ещё, как инициализировать глобальную переменную (типо памяти) каким-либо значением? (при написании в духе
int _memory = 0 то память постоянно установлена в 0)
удалось только написать костюль через установку в флаг случайного значения в начале программы (если в флаге не то - то 1 запуск) . Есть нормальное решение?
|
25.02.2015 13:08:59
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Михаил Долинский:
23.02.2015 14:24:36 23.02.2015 14:24:53 Голуб, Юденко ПМ-41 Архитектура вычислительных систем (ПМ4) - 2015 ОС. Перевернуть и вставить пробелы 0 Внутренняя ошибка WChecker: не удается открыть report.txt src.mpc DelTA3 at NIT8
#define _U int
#define _I __in
#define _O __out
#define S __bits
char IN_STR[500];
char OUT_STR[1000];
void main () {
int i;
for (i=0; IN_STR[i] != '#'; i++);
for (int j = 0; j < i; j++) {
OUT_STR[j*2]=IN_STR[i-j-1];
OUT_STR[j*2+1]=' ';
}
OUT_STR[i*2]=0;
}
Это связано с объявленными большими массивами.
Пока ошибка не исправлена нужно объявлять массивы не более 500 байт.
|
25.02.2015 13:17:22
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Павел Голуб:
Возник такой вопрос, как замедлить работу программы или иным спопсоб синхронизироваться с тестами. Поясню подробее. В задачах
Командные олимпиады\Особенности архитектуры МП Intel 80286\Контрольный срез (Пример 3)\Проектирование\ПА - "Две монетки" 54026
Командные олимпиады\Особенности архитектуры МП Intel 80286\Проектирование\4 - "Сложи, если сможешь (микропрограммно)" 131984
Необходимо реализовывать счётчик (т.е. постоянно увеличивать значение на сколько-там-надо) при этом программа на С-МПА работает быстрее чем 1000ps теста и запукается по 10 раз на тесте. В данных задач, что спасло, все входные данные различные и удалось привязаться к ним. Это единственный способ? или есть проще решения. При написании на обычном hlccad такой проблемы не было.
Задача поставлена некорректно и будет переделана.
Павел Голуб:
И ещё, как инициализировать глобальную переменную (типо памяти) каким-либо значением? (при написании в духе
int _memory = 0 то память постоянно установлена в 0)
удалось только написать костюль через установку в флаг случайного значения в начале программы (если в флаге не то - то 1 запуск) . Есть нормальное решение?
Тесты должны быть составлены так, чтобы подобные переменные можно было инициализировать информацией из теста.
|
27.02.2015 16:24:12
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Станислав Свиридов:
Какая-то ерунда с унарной операцией - и 0:
Ошибка исправлена.
|
16.03.2015 15:49:42
Тема: Re:Вопросы по C-MPA
|
Женя Юденко
Темы: 0
Сообщений: 29
Мой профиль
|
В задачах, где используются выходные переменные более 32 бит, не получается выводить чистыми методами c-mpa.
Решили проблему ручной склейкой вывода в HLCCAD, используя 2 выходные 32 бит переменные вместо 64 бит, после чего модифицировали сам проект.
|
16.03.2015 19:10:01
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Женя Юденко:
В задачах, где используются выходные переменные более 32 бит, не получается выводить чистыми методами c-mpa.
Решили проблему ручной склейкой вывода в HLCCAD, используя 2 выходные 32 бит переменные вместо 64 бит, после чего модифицировали сам проект.
Это происходило из-за неправильного объявления переменных:
_U S(64) T1=0,T2=0,T3=0,T4 = 0;
При таком объявлении 64-битной будет только T1. Остальные будут 32-битными.
Правильно так:
_U S(64) T1=0;
_U S(64) T2=0;
_U S(64) T3=0;
_U S(64) T4=0;
|
04.05.2015 19:17:52
Тема: Re:Вопросы по C-MPA
|
Владислав Булгаков
Темы: 0
Сообщений: 26
Мой профиль
|
Контрольные срезы\4 мая\Проектирование\Простые устройства с памятью\10 - "Оценка" 55765 Поляченко Татьяна, ПМ-45, май 2007
http://dl.gsu.by/task.jsp?nid=1409620&cid=948
Проходит тесты если их заносить вручную, а если подключать тесты то:
Ошибка: Несовпадение res:4=5 [2 ns]
Мой код:
int __in __bits(8) x;
int __in __bits(8) y;
unsigned __in __bits(16) z;
int __out __bits(32) res;
int k;
void main(){
if((x+y)>z){res=0;k=0;}
else if((x+y)==z){res=k;}
else if(z>(x+y) && (x+y)>0){res=(z/x)+(z/y);k=res;}
else if((x+y)==0){res=k;}
else if((x+y)<0){res=(x-y)*z;k=res;}
}
Но в сообщении от 20.12.2014 16:42:49 от wildcat было написано:
Не инициализируется переменная z. Поэтому программа на одном тесте может выдавать разные ответы.
Хотелось бы узнать чья тут ошибка и в чем.
|
08.05.2015 15:17:15
Тема: Re:Вопросы по C-MPA
|
Татьяна Коновалова
Темы: 0
Сообщений: 46
Мой профиль
|
Здравствуйте! Я можно увидеть секретный тест по этой задаче?
Зачет\Индивидуальные задания\Сконвертированные задания на программирование\Условные вычисления\16 - "Простые операции" 80909 Хруцкий Дмитрий, ПОИТ-27, май 2006
http://dl.gsu.by/task.jsp?nid=1390305&cid=947
|
08.05.2015 15:20:30
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Владислав Булгаков:
Контрольные срезы\4 мая\Проектирование\Простые устройства с памятью\10 - "Оценка" 55765 Поляченко Татьяна, ПМ-45, май 2007
http://dl.gsu.by/task.jsp?nid=1409620&cid=948
Проходит тесты если их заносить вручную, а если подключать тесты то:
Ошибка: Несовпадение res:4=5 [2 ns]
Мой код:
int __in __bits(8) x;
int __in __bits(8) y;
unsigned __in __bits(16) z;
int __out __bits(32) res;
int k;
void main(){
if((x+y)>z){res=0;k=0;}
else if((x+y)==z){res=k;}
else if(z>(x+y) && (x+y)>0){res=(z/x)+(z/y);k=res;}
else if((x+y)==0){res=k;}
else if((x+y)<0){res=(x-y)*z;k=res;}
}
Но в сообщении от 20.12.2014 16:42:49 от wildcat было написано:
Не инициализируется переменная z. Поэтому программа на одном тесте может выдавать разные ответы.
Хотелось бы узнать чья тут ошибка и в чем.
При решении задач с памятью нужно исключить гонки сигналов. В самом начале программы сохраняем все входные переменные в промежуточные (x1, y1, z1) и все дальнейшие вычисления производим только с ними.
Дело в том, что входные переменные могут измениться в то время когда программа вычисляет какое-либо выражение. И вычисленный результат может оказаться неверным. Это может привести к записи неправильного значения в память.
int __in __bits(8) x;
int __in __bits(8) y;
int __in __bits(16) z;
int __out __bits(32) res;
int k;
void main(){
int __bits(8) x1 = x;
int __bits(8) y1 = y;
int __bits(16) z1 = z;
if((x1+y1)>z1){res=0;k=0;}
else if((x1+y1)==z1){res=k;}
else if(z1>(x1+y1) && (x1+y1)>0){res=z1/x1+z1/y1;k=res;}
else if((x1+y1)==0){res=k;}
else if((x1+y1)<0){res=(x1-y1)*z;k=res;}
}
|
|