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

Задача

Автор Alex фс, 26 янв 2019, 11:17

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

Alex фс

Помогите тупому человеку это решить

Задача 1.

Объявлены две числовые переменные a и b. Необходимо сделать так, чтобы без объявления других переменных в результате работы алгоритма значения переменных поменялись местами. Например, если изначально a = 4, b = 5, то в результате алгоритма стало a = 5, b = 4. Применять можно только операции присваивания и арифметические операции с числами и значениями переменных.



Задача 2.

За один цикл вычислить значение функции F(n)
= 1!*2!*3!...*n!., где n! = 1*2*3*...*n.



Задача 3.

Убрать условный оператор «Если» из следующего блока (А может принимать значение 0 или 1):

Если (А = 0) Тогда
B = 2;
Иначе
В = 1;
КонецЕсли;

Не допускается использование ЛЮБЫХ других условных операторов (например, ?(А = 0;2;1))



Задача 4.

Имеются два массива данных А[а] и B[в] (а и в – количества элементов массива). Известно, что оба массива упорядочены по возрастанию. Необходимо написать алгоритм, проходящий по этим массивам за 1 цикл вида:

Для Сч = 1 По а + в Цикл

и выдающий значения обоих массивов в порядке возрастания т.е. как бы объединив оба массива и отсортировав их по возрастанию.



Задача 5.

Имеется неупорядоченный массив из n различных целых чисел от 0 до n (0,1,...,j-1,j+1,....,n). Необходимо за один цикл определить недостающее число j.

antoneus

1.

a = a + b;
b = a - b;
a = a - b;


2.

Результат = 1;
Для сч = 2 По n Цикл
   Результат = Результат * сч
КонецЦикла;


3.

B = 2 - A;

4.

поз1 = 0;
поз2 = 0;
Для сч = 1 по а + в Цикл
   Если поз1 = а Тогда
      Сообщить(б[поз2]);
      поз2 = поз2 + 1;
      Продолжить;
   КонецЕсли;
   Если поз2 = в Тогда
      Сообщить(а[поз1]);
      поз1 = поз1 + 1;
      Продолжить;
   КонецЕсли;
   Если а[поз1] <= в[поз2] Тогда
      Сообщить(а[поз1]);
      поз1 = поз1 + 1;
   Иначе
      Сообщить(б[поз2]);
      поз2 = поз2 + 1;     
   КонецЕсли;
КонецЦикла;


5.

СуммаЧисел = (n + 1) * (n + 2) / 2;
СуммаМассива = 0;
Для сч = 0 По n - 1 Цикл
    СуммаМассива = СуммаМассива + Массив[сч];
КонецЦикла;
Если СуммаЧисел <> СуммаМассива Тогда
    Сообщить(СуммаЧисел - СуммаМассива)
КонецЕсли;

Добавлено: 26 янв 2019, 17:59


В переменных запутался) Решение 4 выглядит так:

поз1 = 0;
поз2 = 0;
Для сч = 1 по а + в Цикл
   Если поз1 = а Тогда
      Сообщить(МассивВ[поз2]);
      поз2 = поз2 + 1;
      Продолжить;
   КонецЕсли;
   Если поз2 = в Тогда
      Сообщить(МассивА[поз1]);
      поз1 = поз1 + 1;
      Продолжить;
   КонецЕсли;
   Если МассивА[поз1] <= МассивВ[поз2] Тогда
      Сообщить(МассивА[поз1]);
      поз1 = поз1 + 1;
   Иначе
      Сообщить(МассивВ[поз2]);
      поз2 = поз2 + 1;     
   КонецЕсли;
КонецЦикла;

Alex фс

antoneus, Мне кажется тут не полные ответы на задачи

antoneus


Alex фс

antoneus, у меня при выполнении 4 задачи какие то ошибки

antoneus

Надо переменные МассивА и МассивВ проинициализировать. И переменные а и в тоже - это размеры массивов. Я привел алгоритм, не всё же за вас делать)

Alex фс



Перем  а;
Перем  в;
поз1 = 0; 
поз2 = 0;
МассивА = Новый Массив;
МассивВ = Новый Массив;

МассивА.Добавить(9);
МассивА.Добавить(18);
МассивА.Добавить(3);
МассивА.Добавить(21);
МассивА.Добавить(11);
МассивА.Добавить(8);
МассивА.Добавить(5);

МассивВ.Добавить(1);
МассивВ.Добавить(4);
МассивВ.Добавить(2);
МассивВ.Добавить(10);
МассивВ.Добавить(12);
МассивВ.Добавить(17);
МассивВ.Добавить(20);





Для сч = 1 по а + в Цикл
   Если поз1 = а Тогда
      Сообщить(МассивВ[поз2]);
      поз2 = поз2 + 1;
      Продолжить;
   КонецЕсли;
   Если поз2 = в Тогда
      Сообщить(МассивА[поз1]);
      поз1 = поз1 + 1;
      Продолжить;
   КонецЕсли;
   Если МассивА[поз1] <= МассивВ[поз2] Тогда
      Сообщить(МассивА[поз1]);
      поз1 = поз1 + 1;
   Иначе
      Сообщить(МассивВ[поз2]);
      поз2 = поз2 + 1;     
   КонецЕсли;
КонецЦикла;
КонецПроцедуры




Добавлено: 27 янв 2019, 18:53


antoneus, ,

antoneus

:) Нет, инициализация - это именно присвоение переменной значения. Перем а; - это объявление переменной, после которого в ней содержится неопределено и, соответственно на строке Для сч = 1 по а + в Цикл возникает ошибка. Нужно после заполнения массивов написать

а = МассивА.Количество();
в = МассивВ.Количество();

Добавлено: 28 янв 2019, 09:47


И пятую правильнее так:

СуммаЧисел = n * (n + 1) / 2;
СуммаМассива = 0;
Для сч = 0 По n - 1 Цикл
    СуммаМассива = СуммаМассива + Массив[сч];
КонецЦикла;
Если СуммаЧисел <> СуммаМассива Тогда//числа не хватает
    НедостающееЧисло = (n + 1) * (n + 2) / 2 - СуммаМассива;
    Сообщить("Недостающее число: " + НедостающееЧисло)
Иначе
    Сообщить("Все числа на месте.")
КонецЕсли;

Теги:

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

Рейтинг@Mail.ru

Поиск