Загрузка данных
Задачи 4–8. Полные коды
---
Задача 4. Два времени с шагом 15 минут
Условие: два значения времени, первое раньше второго. Вывести время от начального до конечного с шагом 15 минут в формате ЧЧ:мм.
```1С
Время1 = Дата(1, 1, 1);
Время2 = Дата(1, 1, 1);
ВвестиДату(Время1, "Введите время начала", ЧастьДаты.Время);
ВвестиДату(Время2, "Введите время окончания", ЧастьДаты.Время);
Если Время1 > Время2 Тогда
Сообщить("Ошибка: первое время должно быть раньше второго");
Иначе
ТекВремя = Время1;
Шаг = 15 * 60; // 15 минут в секундах
Пока ТекВремя <= Время2 Цикл
Сообщить(Формат(ТекВремя, "ДФ=""ЧЧ:мм"""));
ТекВремя = ТекВремя + Шаг; // рекурсия
КонецЦикла;
КонецЕсли;
```
Пример для 08:00 – 09:00:
```
08:00
08:15
08:30
08:45
09:00
```
---
Задача 5. Дни интервала с режимом работы
Условие: две даты (первая раньше). Вывести каждый день в формате дд/ММ/гггг режим работы с ЧЧ-00 по ЧЧ-00. Для субботы и воскресенья — с 08-00 по 16-00, для будней — с 08-00 по 18-00.
```1С
Дата1 = Дата(1, 1, 1);
Дата2 = Дата(1, 1, 1);
ВвестиДату(Дата1, "Введите первую дату", ЧастьДаты.Дата);
ВвестиДату(Дата2, "Введите вторую дату", ЧастьДаты.Дата);
Если Дата1 > Дата2 Тогда
Сообщить("Ошибка: первая дата должна быть раньше второй");
Иначе
ТекДата = НачалоДня(Дата1);
КонецИнтервала = НачалоДня(Дата2);
Пока ТекДата <= КонецИнтервала Цикл
НомерДня = ДеньНедели(ТекДата);
ДатаСтр = Формат(ТекДата, "ДФ=""дд/ММ/гггг""");
Если НомерДня = 6 ИЛИ НомерДня = 7 Тогда
Сообщить(ДатаСтр + " режим работы с 08-00 по 16-00");
Иначе
Сообщить(ДатаСтр + " режим работы с 08-00 по 18-00");
КонецЕсли;
ТекДата = ТекДата + 86400; // +1 день
КонецЦикла;
КонецЕсли;
```
Пример для 01.10.2012 – 08.10.2012:
```
01/10/2012 режим работы с 08-00 по 18-00
02/10/2012 режим работы с 08-00 по 18-00
03/10/2012 режим работы с 08-00 по 18-00
04/10/2012 режим работы с 08-00 по 18-00
05/10/2012 режим работы с 08-00 по 18-00
06/10/2012 режим работы с 08-00 по 16-00 ← суббота
07/10/2012 режим работы с 08-00 по 16-00 ← воскресенье
08/10/2012 режим работы с 08-00 по 18-00
```
---
Задача 6. Месяцы от первого числа до второго
Условие: ввести два целых числа от 1 до 12, первое должно быть меньше второго. Вывести названия месяцев от первого до второго.
```1С
М1 = 0; М2 = 0;
ВвестиЧисло(М1, "Введите первый месяц (1-12)", 2, 0);
ВвестиЧисло(М2, "Введите второй месяц (1-12)", 2, 0);
Если М1 < 1 ИЛИ М1 > 12 ИЛИ М2 < 1 ИЛИ М2 > 12 Тогда
Сообщить("Ошибка: месяц должен быть от 1 до 12");
ИначеЕсли М1 >= М2 Тогда
Сообщить("Ошибка: первый месяц должен быть меньше второго");
Иначе
М = М1;
Пока М <= М2 Цикл
ДемоДата = Дата(2026, М, 1);
Сообщить(Формат(ДемоДата, "ДФ=""ММММ"""));
М = М + 1;
КонецЦикла;
КонецЕсли;
```
Пример для 3 и 7:
```
март
апрель
май
июнь
июль
```
---
Задача 7. Уменьшение двух слов
Условие: ввести слово. Вывести ряд: первое слово уменьшается на 1 букву слева, второе — на 1 букву справа, пока не останется по одной букве.
Трактовка A: два слова рядом — левая часть от начала, правая от конца
```1С
Слово = "";
ВвестиСтроку(Слово, "Введите слово", 50);
Слово = СокрЛП(Слово);
Длина = СтрДлина(Слово);
// Первое слово уменьшается слева (растёт от 1 до середины)
// Второе уменьшается справа (уменьшается от длины до середины)
i = 1;
Пока i <= Длина - i + 1 Цикл
Часть1 = Лев(Слово, i); // растёт: 1, 2, 3, …
Часть2 = Прав(Слово, Длина - i + 1); // уменьшается: вся, вся−1, …
Сообщить(Часть1 + " " + Часть2);
i = i + 1;
КонецЦикла;
```
Для слова Программирование (16 букв):
```
П Программирование
Пр Программировани
Про Программирован
...
```
Трактовка B: слово уменьшается с двух сторон, остаётся середина
```1С
Слово = "";
ВвестиСтроку(Слово, "Введите слово", 50);
Слово = СокрЛП(Слово);
Левый = 1;
Правый = СтрДлина(Слово);
Пока Левый <= Правый Цикл
Часть = Сред(Слово, Левый, Правый - Левый + 1);
Сообщить(Часть);
Левый = Левый + 1;
Правый = Правый - 1;
КонецЦикла;
```
Для слова Программирование:
```
Программирование
рограммировани
ограммирован
граммирова
раммиров
аммиро
ммир
ми
```
---
Задача 8. Уменьшение предложения по одному слову
Условие: ввести предложение. Вывести ряд, где каждый последующий элемент уменьшается на одно слово (убирается последнее слово).
```
Программировать очень интересно и занимательно
Программировать очень интересно и
Программировать очень интересно
Программировать очень
Программировать
```
```1С
Предложение = "";
ВвестиСтроку(Предложение, "Введите предложение", 200);
Предложение = СокрЛП(Предложение);
Пока НЕ ПустаяСтрока(Предложение) Цикл
Сообщить(Предложение);
// Находим последний пробел
ПослПробел = 0;
Для Сч = 1 По СтрДлина(Предложение) Цикл
Если Сред(Предложение, Сч, 1) = " " Тогда
ПослПробел = Сч;
КонецЕсли;
КонецЦикла;
Если ПослПробел = 0 Тогда
Прервать; // больше нет слов
Иначе
Предложение = СокрЛП(Лев(Предложение, ПослПробел - 1));
КонецЕсли;
КонецЦикла;
```
Как работает:
1. Выводим всё предложение
2. Находим последний пробел (перебором всего предложения)
3. Обрезаем всё после него — теряется последнее слово
4. Повторяем, пока строка не станет пустой
Обратите внимание: цикл Для внутри Пока — это нормально. Внешний Пока уменьшает предложение, внутренний Для ищет последний пробел.
---
Ключевые приёмы в задачах 4–8
Приём Где применяется
Пока … Цикл Все задачи
Рекурсия переменной X = X + шаг Задачи 4, 5
+ 86400 — +1 день Задача 5
+ 15 * 60 — +15 минут Задача 4
ДеньНедели(Дата) Задача 5
Формат(Дата, "ДФ=""…""") Задачи 4, 5, 6
Формат(Дата, "ДФ=""ММММ""") Задача 6
Работа со строками: Лев, Прав, Сред Задачи 7, 8
Поиск последнего пробела Задача 8
Прервать Задача 8
Важные числа
Число Смысл
86400 секунд в сутках (1 день)
15 * 60 = 900 15 минут в секундах
1 в ДеньНедели понедельник
6 суббота
7 воскресенье
Что важно понять
1. Внутри Пока обязательно менять переменную условия — иначе вечный цикл
2. Условие проверяется до тела — тело может не выполниться ни разу
3. Для дат +86400 = следующий день, +900 = +15 минут
4. ДеньНедели возвращает 1=Пн, …, 7=Вс
5. Задача 8 — классический пример вложенного цикла (Для внутри Пока)