Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 дек 2024, 15:27

Задача не могу перевести из паскаля в 1с

Автор aydar, 23 ноя 2011, 22:00

0 Пользователей и 1 гость просматривают эту тему.

aydar

вообщем дали мне задачу сделать
В массиве Z(m) найти число чередований знака, то есть число переходов с минуса на плюс или с плюса на минус. Например, в последовательности 0, -2, 0, -1, 0, 2, -1, 0, 0, 3, 2, -3 четыре чередования (как известно, нуль не имеет знака).

я сделал заполнение массива, но никак не могу переделать код из паскаля в 1с

Цитировать{ищем первый не ноль}
if a[1]<>0 then
begin
  if a[1]>0 then x:=1 else x:=-1;{его знак}
  j:=1;
end
else
begin
  i:=1;
  while a=0 do
  inc(i);
  if a>0 then x:=1 else x:=-1;
  j:=i;
end;
{ищем смены знака}
k:=0;
i:=j+1;
while i<=n do
if (a=0)or(x*a>0) then inc(i){если ноль или одного знака, вперед}
else{иначе}
begin
  k:=k+1;{считаем смену}
  x:=-x;{меняем знак проверки}
end;
write('Число смен знака=',k);
readln
end.

вот что я сделал но думаю не правильно саецы посмотрите плиз
Цитировать{ищем первый не ноль}
если мас[1]<>0 Тогда
если мас[1]>0 Тогда x=1 иначе
x=-1;{его знак}
j=1;
КонецЕсли; {это конец 2 если}
иначе
i=1;
Пока мас=0 Цикл
i=i+1;
КонецЦикла;
  если мас>0 Тогда x=1 иначе x=-1;
КонецЕсли;
  j=i;
КонецЕсли;
{ищем смены знака}
k=0;
i=j+1;
Пока i<=n Цикл
если (мас=0)или(x*мас>0) Тогда i=i+1{если ноль или одного знака, вперед}
иначе
  k=k+1;{считаем смену}
  x=-x;{меняем знак проверки}
КонецЕсли;
сообщить('Число смен знака=',k);

sergejK74

Это что-то навроде домашнего задания? Сравнение языков с академической точки зрения?
Совсем один в один сделать не получилось. Уж больно код на Паскале не понравился. На 1С вышел такой же говнокод
a = Новый Массив();
a.Добавить(0);
a.Добавить(-2);
a.Добавить(0);
a.Добавить(-1);
a.Добавить(0);
a.Добавить(2);
a.Добавить(-1);
a.Добавить(0);
a.Добавить(0);
a.Добавить(3);
a.Добавить(2);
a.Добавить(-3);

x=0;
k=0;

n = a.ВГраница();


Для i = 0 по  n Цикл
Если a[i] <> 0 Тогда
x = ?(a[i]>0,1,-1);
j = i+1;
прервать;
Иначе
продолжить;
КонецЕсли;
КонецЦикла;


Для i = j по  n Цикл

если (a[i]=0) или (a[i]*x>0) тогда
продолжить;
Иначе
k = k+1;
x = -x;
КонецЕсли;

КонецЦикла;

сообщить("Число смен знака="+k);

Доделай до полной идентичности сам.
Кнопочка Спасибо - слева!

chuevsf

Все хорошо, но только после объявления массива рекомендуется его сначала очистить и только потом заполнять!
А то могут появится интересные, но не очень приятные сюрпризы, особенно когда обработку будешь запускать несколько раз подряд.

sergejK74

Приму к сведению. Эту восьмерку я наверное никогда не освою.
Кнопочка Спасибо - слева!

Dethmontt

chuevsf, почему нужно очищать массив???
Он же конструктор массива вызывает который создает каждый раз новый (уникальный массив)...????
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск