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

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

Мой профиль


Дмитрий Шакин:

Контрольные срезы\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. Поэтому программа на одном тесте может выдавать разные ответы.
Станислав Свиридов

Темы: 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
Станислав Свиридов

Темы: 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
Игорь Коршунов

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

Мой профиль


Станислав Свиридов:

CMPA не правильно обрабатывает следующие конструкции, a[b[i]], a и b - массивы, i - переменная int.
 

Это ограничение СМПА: при обращении к массиву индекс должен быть целочисленной переменной.
Игорь Коршунов

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

Мой профиль


Станислав Свиридов:

Какая-то ерунда с унарной операцией - и 0:
 

Это будет исправлено в ближайшее время.
Михаил Долинский

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

Мой профиль
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;
}

Павел Голуб

Темы: 5
Сообщений: 120

Мой профиль
Возник такой вопрос, как замедлить работу программы или иным спопсоб синхронизироваться с тестами. Поясню подробее. В задачах
Командные олимпиады\Особенности архитектуры МП Intel 80286\Контрольный срез (Пример 3)\Проектирование\ПА - "Две монетки" 54026
Командные олимпиады\Особенности архитектуры МП Intel 80286\Проектирование\4 - "Сложи, если сможешь (микропрограммно)" 131984

Необходимо реализовывать счётчик (т.е. постоянно увеличивать значение на сколько-там-надо) при этом программа на С-МПА работает быстрее чем 1000ps теста и запукается по 10 раз на тесте. В данных задач, что спасло, все входные данные различные и удалось привязаться к ним. Это единственный способ? или есть проще решения. При написании на обычном hlccad такой проблемы не было.


И ещё, как инициализировать глобальную переменную (типо памяти) каким-либо значением? (при написании в духе
int _memory = 0 то память постоянно установлена в 0)
удалось только написать костюль через установку в флаг случайного значения в начале программы (если в флаге не то - то 1 запуск) . Есть нормальное решение?
Игорь Коршунов

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

Мой профиль


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

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 байт.
Игорь Коршунов

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

Мой профиль


Павел Голуб:

Возник такой вопрос, как замедлить работу программы или иным спопсоб синхронизироваться с тестами. Поясню подробее. В задачах
Командные олимпиады\Особенности архитектуры МП Intel 80286\Контрольный срез (Пример 3)\Проектирование\ПА - "Две монетки" 54026
Командные олимпиады\Особенности архитектуры МП Intel 80286\Проектирование\4 - "Сложи, если сможешь (микропрограммно)" 131984

Необходимо реализовывать счётчик (т.е. постоянно увеличивать значение на сколько-там-надо) при этом программа на С-МПА работает быстрее чем 1000ps теста и запукается по 10 раз на тесте. В данных задач, что спасло, все входные данные различные и удалось привязаться к ним. Это единственный способ? или есть проще решения. При написании на обычном hlccad такой проблемы не было.
 

Задача поставлена некорректно и будет переделана.


Павел Голуб:

И ещё, как инициализировать глобальную переменную (типо памяти) каким-либо значением? (при написании в духе
int _memory = 0 то память постоянно установлена в 0)
удалось только написать костюль через установку в флаг случайного значения в начале программы (если в флаге не то - то 1 запуск) . Есть нормальное решение?
 

Тесты должны быть составлены так, чтобы подобные переменные можно было инициализировать информацией из теста.
Игорь Коршунов

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

Мой профиль


Станислав Свиридов:

Какая-то ерунда с унарной операцией - и 0:
 

Ошибка исправлена.
Женя Юденко

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

Мой профиль
В задачах, где используются выходные переменные более 32 бит, не получается выводить чистыми методами c-mpa.

Решили проблему ручной склейкой вывода в HLCCAD, используя 2 выходные 32 бит переменные вместо 64 бит, после чего модифицировали сам проект.
Игорь Коршунов

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

Мой профиль


Женя Юденко:

В задачах, где используются выходные переменные более 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;

Владислав Булгаков

Темы: 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. Поэтому программа на одном тесте может выдавать разные ответы.

Хотелось бы узнать чья тут ошибка и в чем.
Татьяна Коновалова

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

Мой профиль
Здравствуйте! Я можно увидеть секретный тест по этой задаче?

Зачет\Индивидуальные задания\Сконвертированные задания на программирование\Условные вычисления\16 - "Простые операции" 80909 Хруцкий Дмитрий, ПОИТ-27, май 2006

http://dl.gsu.by/task.jsp?nid=1390305&cid=947
Игорь Коршунов

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

Мой профиль


Владислав Булгаков:

Контрольные срезы\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;}
}

 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2, 3, ... 14, 15, 16, 17, 18, ... 24, 25, 26
Time:0,063