Работа с Массивами. Учебник "Программирование для начинающих"

1. Vladimir99 12.05.22 23:05 Сейчас в теме
Всем привет. Я тут сейчас изучаю учебник "Программирование для начинающих" Радченко, сделал задание из учебника и хотелось бы попросить оценки моего кода.

Задание 3.39
Создайте массив и заполните его названиями дней недели по порядку. С помощью
операции [...] к выходным дням допишите « вых.». Чтобы, например, вместо
«Суббота» получилось «Суббота вых.».

Первый скриншот моё решение, второй - решение автора.
Прикрепленные файлы:
Найденные решения
3. user1203706 13 13.05.22 01:13 Сейчас в теме
(1)
на вот, для коллекции

	МассивДней = Новый Массив;
	Для НомерДняНедели = 0 По 6 Цикл
		МассивДней.Добавить(ТРег(Формат(НачалоНедели(ТекущаяДата())+НомерДняНедели*86400,"ДФ=дддд")));
		Если НомерДняНедели>=5 Тогда
			МассивДней[НомерДняНедели] = МассивДней[НомерДняНедели] + " вых";
		КонецЕсли;
	КонецЦикла;
Vladimir99; +1 Ответить
4. laperuz 46 13.05.22 03:36 Сейчас в теме
(1)У вас, как минимум, не выполнено условие задания по использованию операции [...].
Вариант без использования циклов:

СтрокаДней = "Понедельник,Вторник,Среда,Четверг,Пятница,Суббота,Воскресенье";
МассивДней = СтрРазделить(СтрокаДней, ",");
МассивДней[5] = МассивДней[5] + "вых.";
МассивДней[6] = МассивДней[6] + "вых.";
Vladimir99; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. laperuz 46 13.05.22 03:36 Сейчас в теме
(1)У вас, как минимум, не выполнено условие задания по использованию операции [...].
Вариант без использования циклов:

СтрокаДней = "Понедельник,Вторник,Среда,Четверг,Пятница,Суббота,Воскресенье";
МассивДней = СтрРазделить(СтрокаДней, ",");
МассивДней[5] = МассивДней[5] + "вых.";
МассивДней[6] = МассивДней[6] + "вых.";
Vladimir99; +1 Ответить
5. lmnlmn 69 13.05.22 08:52 Сейчас в теме
(1) Уж не знаю зачем вам именно оценка, но пожалуйста - говнокод это на устоявшимся жаргоне называется.

Теперь по сути. Даже если отвлечься от того что решение избыточно и не соответствует поставленному заданию, есть пара проблем в вашей реализации:
1. Весь этот цикл не нужен - смысл перебирать если вы и так индексы элементов знаете.
2. Удалить/Вставить - ненужно. Загромождает код и, вероятно, требует больших вычислительных затрат чем просто ДниНедели[Суббота] = ...
3. У вас в массиве уже есть название дня недели, а вы его заменяете строкой содержащей его же. В итоге такой код занимает больше памяти. Ну и представьте что у вас было бы не 2 дня, а 15000 элементов на замену. Так же реализовали бы?

Успехов в освоении программирования, но почитайте что-то не из мира 1С про алгоритмы и структуры данных, комбинаторику.
Vladimir99; +1 Ответить
6. starik-2005 3043 13.05.22 11:23 Сейчас в теме
(1)
хотелось бы попросить оценки моего кода
Код хороший уже только потому, что он работает. В программировании это является практически основным фактором. Да, производительность и эффективность кода вообще безусловно важна, но т.к. программистов в принципе мало, то это все уходит на второй план, и плохой код, который работает, лучше идеального, но не работающего, кода, т.к. его тупо некому написать.

Массив - это коллекция значений, в 1С эти значения могут быть любого типа, хотя, обычно, в массиве хранятся однотипные значения (или только строки, или только числа, или еще что-то типа ссылок на документы одного типа). Работа с коллекциями: обход и управление (перестановки, сортировка, ...) - это важные навыки. Суть 2-го решения в том, что к элементам коллекции обращаются через [], при этом просто к пятому и шестому добавляют " вых". Код в принципе ошибочен, т.к. предполагает, что суббота и воскресение находятся именно в этих пятом и шестом элементах. Хотя в условиях задачи и сказано, что дни недели надо заполнить по порядку, а в жизни такое вовсе необязательно. С другой стороны, если программа ожидает массива со всеми заполненными днями недели, то нет смысла проверять, заполнены ли пятый и шестой элементы.

Ну и учебник видимо устарел, т.к. заполнять массив строковыми константами лучше функцией СтрРазделить. В итоге код действительно сводится к условно трем строчкам.
user1706724; muskul; Vladimir99; +3 Ответить
2. user1203706 13 13.05.22 01:00 Сейчас в теме
выкинуть условие и выкинуть нелепый цикл и будет норм
Vladimir99; +1 Ответить
3. user1203706 13 13.05.22 01:13 Сейчас в теме
(1)
на вот, для коллекции

	МассивДней = Новый Массив;
	Для НомерДняНедели = 0 По 6 Цикл
		МассивДней.Добавить(ТРег(Формат(НачалоНедели(ТекущаяДата())+НомерДняНедели*86400,"ДФ=дддд")));
		Если НомерДняНедели>=5 Тогда
			МассивДней[НомерДняНедели] = МассивДней[НомерДняНедели] + " вых";
		КонецЕсли;
	КонецЦикла;
Vladimir99; +1 Ответить
7. Vladimir99 13.05.22 19:38 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот