Минимум и максимум элементов массива 1С
Вставка
- Опубліковано 25 тра 2017
- Как найти среднее арифметическое всех числовых элементов в массиве. Как найти минимальное и максимальное значение
Читайте статьи по 1С на нашем сайте:
programmist1s.ru/materialyi-po...
Все на столько хорошо и понятно объяснено, что даже нет вопросов!)
Максимально приятно, спасибо! Нравится - будем делать еще больше и еще лучше! :)
Если внимательно и вдумчиво все смотреть и проделывать на практике-все получается. Урок понятен. Спасибо за проделанную работу и за Ваш труд!
Спасибо Вам большое за ваш труд. ОООчень полезно.)
Очень грамотно Всё рассказано, класс
Хороший урок! Спасибо!
Что-бы в массиве были и отрицательные числа можно сделать так:
*М.Добавить(100 - Генератор.СлучайноеЧисло(0,200));* - так диапазон случайных чисел станет от -100 до 100, для тестов максимум/минимум очень удобно и наглядно.
Не забываем, что порядковый номер элемента массива заключается в квадратные скобки (не круглые).
Максимум = Массив[0];
На видео это плохо различимо.
Спасибо! А то я думаю, чё за фигня, вроде как в видео сделал!
Интересная аналогия. С каждым роликом все меньше и меньше лайков. Ряды рядели с каждым уроком )) Пройду этот курс, переду на ваш основной канал. Спасибо за уроки
Я на самом деле часть функций писал еще до того как Леонтев показал как это делать, часть конечно подсмотрел, но реально это все очень легко и надеюсь что же как по маслу будет идти остальное обучение ! =)
спасибо!
Неплохо было бы здесь разобрать и Округление. Если, скажем, брать Среднее значение от 7-ми элементов, то получится бесконечный остаток. А так да, Илья молодец. Позитивный и толково объясняет
Минимум написал сам и это первое "Сам" за 16 уроков) Ну, хоть какой-то прогресс)
Очень мешает ссылки в конце, закрывают экран с кодом
Там же нет кода в этот раз. Да и если Вы все повторяете - по своим записям догадаться не трудно. Как, кстати, успехи? Три недели комменту, освоили курс?)
@@user-rd2qs6ek1u 4 года комменту, а вы?)
Выручил
Благодарю Вас за проделанную такую огромную работу.
Только тот, кто хотя бы раз попытался записать подобный видеоурок, знает, насколько это трудно.
Старательно изучаю Ваши уроки с нуля. Но вот налетел на такую ситуацию из которой никак не могу выбраться.
Всё шло нормально до написания этой функции:
Функция МаксимумМассива(Массив)
Если Массив.Количество() = 0 Тогда
Возврат Неопределено;
КонецЕсли;
Максимум = Массив(0);
Для Каждого Элемент Из Массив Цикл
Если Элемент > Максимум Тогда
Максимум = Элемент;
КонецЕсли;
КонецЦикла;
Возврат Максимум;
КонецФункции
{ВнешняяОбработка.РаботаСЦиклами.Форма.Форма.Форма(249,13)}: Процедура или функция с указанным именем не определена (Массив)
Максимум =
Если не ошибаюсь скобки должны быть квадратными [ ], т.е. должно быть так: Максимум = Массив [0]
Мария, благодарю Вас за подсказку. Действительно помогла, но тут же вылетела новая ошибка. Счастья Вам и удачи!!!
С уважением, Тимофеич
Такая же проблема.
Как найти среднее арифметическое всех числовых элементов в массиве. Как найти минимальное и максимальное значение
Услуги 1С программиста в Москве:
1cproger.ru/
Читайте статьи по 1С на нашем сайте:
programmist1s.ru/materialyi-po-1s/
Функция СоздатьМассив(кол_елем_в_массиве)
Array = Новый Массив();
Генератор = Новый ГенераторСлучайныхЧисел;
Для Индекс = 1 По кол_елем_в_массиве Цикл
случ_число = Генератор.СлучайноеЧисло(1, 10);
Array.Добавить(случ_число);
КонецЦикла;
Возврат Array;
КонецФункции
Процедура ВывестиМассив(Array)
Сообщить("Вывод Массива: ");
Для Каждого elem Из Array Цикл
Сообщить(elem);
КонецЦикла;
КонецПроцедуры
функция СуммаЕлементовМассива(Array)
сумма = 0;
Для Каждого elem из Array Цикл
сумма = сумма + elem;
КонецЦикла;
Возврат сумма;
Конецфункции
функция СреднееКоличествоМассива(Array, Sum )
количество = Array.Количество();
Если количество > 0 Тогда
Возврат Sum / количество;
Иначе
Возврат "Значение не определено";
КонецЕсли
Конецфункции
функция МаксимумИзМассива(Array)
промежуточная_перем = -1;
Для каждого elem из Array Цикл
Если elem > промежуточная_перем Тогда
промежуточная_перем = elem;
КонецЕсли;
КонецЦикла;
Возврат промежуточная_перем;
Конецфункции
функция МинимумИзМассива(Array)
промежуточная_перем = МаксимумИзМассива(Array);
Для каждого elem из Array Цикл
Если elem < промежуточная_перем Тогда
промежуточная_перем = elem;
КонецЕсли;
КонецЦикла;
Возврат промежуточная_перем;
Конецфункции
Процедура КнопкаВыполнитьНажатие(Кнопка)
Array = СоздатьМассив(5);
ВывестиМассив(Array);
Сообщить( "Сумма елементов массива = " + СуммаЕлементовМассива(Array) );
сумма = СуммаЕлементовМассива(Array);
Сообщить("Среднеее число = " + СреднееКоличествоМассива(Array, сумма));
Сообщить("Максимальное число = " + МаксимумИзМассива(Array));
Сообщить("Максимальное число = " + МинимумИзМассива(Array));
Сообщить(" ");
///
КонецПроцедуры
А я Переменную Сумма = "функцию" СуммаМассива. И Количество = Массив.Количество - делил одно на другое вот. Не знаю на сколько органично но все работает =))))
круто
В функции "СреднееЗначениеМассива_2" в строке "Возврат СуммаМассива(Массив)/Массив.Количество;" отсутствует поле объекта, т.е. "( )".
Правильным код будет вот такой:
Функция СреднееЗначениеМассива_2(Массив)
Количество = Массив.Количество();
Если Количество > 0 Тогда
Возврат СуммаМассива(Массив)/Массив.Количество();
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Илья ,здравствуйте .Подскажите пожалуйста :когда начал искать максимум ,все элементы массива были равны одинаковому числу (4),в связи с этим при нажатие на кнопку" выполнить" , команда" Максимум" не сработала.как это исправить?
Растянуть 10мин видео на пару часов втыкания в монитор :D
А есть задачник как у C/C++
Привет у меня среднее получается с большим количеством знаков после запятой, почему так, все так же делаю
Уважаемый Илья, большое Вам спасибо. Думаю, что я не первый, да и вы несомненно знаете, что так, мне кажется, лаконичней: Минимум = ?( Минимум < Элемент, Минимум, Элемент);.
Массив.Количество() - Когда необходимо ставить скобки после метода, а когда нет? А то, то возникает ошибка, что поле объекта не обнаружено, то нет.
Когда метод надо, когда переменная нет.
Скобки ставим после методов, то есть после таких штук, которые надо вычислять. Количество() - это метод массива, который ВЫЧИСЛЯЕТ количество его элементов при его вызове. Поэтому мы ставим скобки.
Функция СреднееЗначениеЭлементов(Массив);
Сумма = 0; Количество = 0;
Для Каждого элемента из Массив цикл
Сумма = Сумма + элемента;
Количество = Количество + 1;
КонецЦикла;
Если Количество > 0 Тогда
Сообщить("Среднее Значние чисел массива = " + (Вычислить("Сумма / Количество")));
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Мне кажется методологически неправильным для пустого массива среднее значение = НЕОПРЕДЕЛЕНО в то время как сумма для такого массива принимается равной нулю. Тут надо либо оба значения (сумму и среднее) считать неопределенными, либо оба нулевыми.
У меня возник вопрос. Касающийся Функции СреднееЗначениеМассива_2(Массив)
А нельзя ли в проверке на количество массива(чтобы не было нуля) не создавать новую переменну "Количество",
а поступить вот так "Если Массив.Количество()>0 Тогда" ?
Можно сделать, но обращения к процедуре Массив.Количество будет больше, что съест килобайты или айты, но мы же профи, над нужно как можно меньше расходовать памяти и ресурсов.
Функция ВычислениеСреднегоЗначенияМассива_2 (Массив)
Количество = Массив.Количество();
//Если Количество > 0 Тогда
Если Массив.Количество() > 0 Тогда
Возврат ПодсчетСуммыМассива(Массив) / Массив.Количество();
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
10:01 автор голоден) аххаха
В хороших наушниках слышно 😃
подскажите пожалуйста, делаю работу как на видео , но все равно выдаётся ошибка : определения процедур и функций должны размещаться перед операторами тела модуля
Если правильно понял, функция не должна отсекаться точкой с запятой в конце: ищите у себя КонецФункции в коде и убирайте ненужное ";"
Подскажите почему в функции СреднееЧисло_2 в конце не было возврата функции?
Там есть возврат в "Если....тогда...."
Не получилось сделать с Максимумом и Минимумом, делал как у автора но не выводит значение, в чем проблема?
Пишу уже код впереди автора, правда дебажить прихдится. Непривычный язык, но ничо, прорвемся)))
А я поставил возврат! Спасибо, теперь я программист 1с))
Стоит вообще этого Радченко читать после данных курсов?
после 18го видео будешь еще снимать?
да
При выполнении, выдаёт ошибку метод объекта не обнаружен Массив. Количество(). ЧЕ делать?
В вашем случае в переменной Массив почему-то не массив. Подумайте, почему такое могло произойти.
4:20 😁
подскажите как заставить Среднее значение считаться по флагу? Если поставить флаг чтобы считал ,а если не стоит не считал!
Всем добрый день. Может кто-то подсказать , почему при вычислении максимум (все делала по видео) у меня выходит минимальное число? Меняю знак неравенства , как для мин, считает максимум тогда.
Надо смотреть код
А если элементы все элементы массива все будут ниже -1, то возврат будет -1
1:07 - а тупо вызвать после суммирования перед возвратом Массив.Количество() нельзя что ли? и написать Сумма=Сумма/Массив.Количество(); Хотя я наверное спешу и там уже рассмотрен это вариант. 2:07 - Если лучше делать выражением Массив.Количество()=0 - тогда будет однозначно что массив пустой. я бы даже больше сказал - эту проверку можно в самое начало функции поставить - выходить сразу если массив нулевой.
Я тоже не понял почему количество элементов в массиве (при расчете средней) определяется циклом, а не методом Количество
Круто, а как мне максимальное и минимальное местами поменять и вывести ?
Порядок вывода изменится, если поменяй местами "Сообщить"
Здравствуйте. Подскажите пожалуйста. Выдаёт ошибку при расчёте Среднего значения 2м способом.
Функция СоздатьМассив(КолличествоЭлементов)
М = Новый Массив;
Генератор = Новый ГенераторСлучайныхЧисел;
Для Индекс = 1 По КолличествоЭлементов Цикл
СлучЧисло = Генератор.СлучайноеЧисло(1, 10);
М.Добавить(СлучЧисло);
КонецЦикла;
Возврат М;
КонецФункции
Процедура ВывестиМассив(Массив)
Сообщить("Массив:");
Для Каждого Элемент Из Массив Цикл
Сообщить(Элемент);
КонецЦикла;
Сообщить(" ");
КонецПроцедуры
Функция СуммаМассива(Массив)
Сумма = 0;
Для Каждого Элемент Из Массив Цикл
Сумма = Сумма + Элемент;
КонецЦикла;
Возврат Сумма;
КонецФункции
Функция СреднееЗначениеМассива(Массив)
Сумма = 0; Колличество = 0;
Для Каждого Элемент Из Массив Цикл
Сумма = Сумма + Элемент;
Колличество = Колличество + 1;
КонецЦикла;
Если Колличество > 0 Тогда
Возврат Сумма / Колличество;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Функция СреднееЗначениеМассива_2(Массив)
Колличество = Массив.Колличество();
Если Колличество > 0 Тогда
Возврат СуммаМассива(Массив)/Колличество;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Процедура КнопкаВыполнитьНажатие(Кнопка)
М = СоздатьМассив(5);
ВывестиМассив(М);
Сообщить("Сумма массива = " + СуммаМассива(М));
Сообщить("Среднее значение массива = " + СреднееЗначениеМассива(М));
Сообщить("Среднее значение массива = " + СреднееЗначениеМассива_2(М));
КонецПроцедуры
Метод объекта не обнаружен (Колличество)
{ВнешняяОбработка.РаботаСЦиклами.Форма.Форма.Форма(64)}: Колличество = Массив.Колличество();
{ВнешняяОбработка.РаботаСЦиклами.Форма.Форма.Форма(83)}: Сообщить("Среднее значение массива = " + СреднееЗначениеМассива_2(М));
У тебя неправильно указан метод массива - "Количество". Должно быть "Массив.Количество();" А у тебя "Массив.КоЛЛичество();". Два ЛЛ. И поэтому программа видит не массив а переменную.
{ВнешняяОбработка.Работасциклами.Форма.Форма.Форма(52,22)}: Ожидается символ '='
Для Каждого Элемент >< Максимум Цикл (Проверка: Толстый клиент (обычное приложение))
У кого-нибудь была такая ошибка? Ругается на Элемент>Максимума?
так написано же "Ожидается символ '='"
я всё понимаю пока, подозрительно...
как успехи?стал спецом 1с?
@@exex5536 нет, запутался потом в конце, и понял что сам не розберусь, закинул
Ребят, подскажите, кто нибудь сталкивался с проблемой: "Итрератор значения не определен"? Периодически выскакивает. Копирую код, удаляю форму, создаю новую, вставляю скопированный код, после этого все работает. Что это за дичь? И кто нибудь пользуется учебной версией?
Было бы лучше, если бы вы привели программный код, в котором возникает ошибка.
Возник вопрос Массив.Количество() = 0 это ведь присвоение, но в данном случае почеему-то работает как равенство , как в 1с написать А == В ?
Для проверки равенства нужно использовать логический оператор ЕСЛИ Количество = 0 ТОГДА
А можно вообще переключить этот "язык программирования" в английский вариант?
да
С 7:18 по 7:36 не очень понял автора, также фразу "и не надо знать положительные там числа или отрицательные":
Зачем в качестве инициализации брать оторванные (рандомные) такие как 0 и -1 числа которые могут и не входить в массив
когда можно взять любое число из массива и относительно него и плясать (так и было сделанно в коде, код верный). А к чему зарисовка и
тезис про минус -1 был, непонятно.
"-1" взял потому что в его примере массива первым элементом был "-1". Ноль брал видимо просто чтобы показать с какими проблемами можно столкнуться.
Почему если есть функция суммы элементов массива мы должны копировать ее содержимое в другую функцию, вместо того чтобы ее вызвать?
Он далее показал другой вариант тоже
@@user-xf7gd7lb4k Тогда прошу прощения, первая попытка посмотреть ролик на сим закончилась.
Максимум - неправильно, а если все числа отрицательные? Брать надо первое число из массива.
Если количество элементов в массиве равно нулю, необходимо вывести об этом сообщение
Для новеньких и слепеньких, и тупеньких как я - Минимум = Массив[0]; скобки КВАДРАТНЫЕ
Не понимаю что обозначают:
1) Минимум = Массив[0];
2) Массив.Количество() - когда ставится точка и зачем она нужна и когда ставятся скобки;
3) Для чего нужен возврат и почему он применяется только в функциях. Как понять что можно делить в самом возврате :
Возврат СуммаМассива(Массив) / Массив.Количество ();
Вернитесь на несколько уроков, где начинаются массивы. Делайте тоже. Желательно, не смотря ролик, а на опережение. Тогда понятно будет. Но и новые вопросы тоже появятся)
Если указать неправильно метод - ну например - Количество = Массив.Колличество(), то проверка синтаксиса в1С не выявляет ошибки, что на мой взгляд - довольно странно.
А у меня после
Сообщить ("")
КонецПроцедуры
Не видит синиаксический контроль никаких ошибок, а я не поставила точку с запятой
В результате функция в этих скобочках при запуске программы не работает
Что тоже очень странно) не такой этот контроль и идеальный)
@@user-il2ii9qf6n перед "КонецЕсли", "КонецЦикла", "КонецПроцедуры" и "КонецФункции" можно точку с запятой не ставить, это не является ошибкой.
Для вычисления минимума и максимума есть одноименные функции Мин(), Макс(). По моему правильнее будет через них;
Это ж нужно для обучения в первую очередь
я не понял одно, зачем нужно нам задавать "Максимум = Массив [0]", и проверять его, если элементы массива всегда начинается 1 и заканчиваются на 10
Это не значение "0", а порядковый номер первого элемента в массиве.
хм.. очень сложно сделано) в духе програмистов) Сумму всех значений я вписал в функцию вывестимассив..
тут дальше вводите перем Количество - а какой смысл если 5 входов можем быть.. мы и так это знаем так как СоздатьМассив(5)..
просчет среднего тоже в в функцию вывестимассив..
Процедура ВывестиМассив(масив)
Гл_СуммаСлучЧисел = 0;
Среднее=0;
Для каждого ЭлементМассива из масив Цикл
Сообщить(ЭлементМассива);
Гл_СуммаСлучЧисел=Гл_СуммаСлучЧисел+ЭлементМассива;
КонецЦикла;
Сообщить("Сумма всех = "+Гл_СуммаСлучЧисел);
Среднее=Гл_СуммаСлучЧисел/КолЗнач;
Сообщить(Среднее);
КонецПроцедуры
Не пойму строчку количество =количество +1 почему +1 ? Добрые люди объясните на пальцах
Может поздно конечно, но все же ...... Это операция накопления в цикле счетчика "Количество", по другому - каждое повторение цикла мы считаем, добавляя по единичке, количество элементов массива. Нам количество элементов нужно для получения среднего значения. Начните смотреть несколько уроков назад, там Илья подробно объясняет подобное выражение. Сначала определяем переменную а=0, а затем каждое повторение цикла накапливает выражением а=а+1 в "а" эти самые повторения.
@@user-ml3pu5lo1p мне кажется он путает переменнуб "Количество" с методом "Количество" у массива.
Тема сисек не раскрыта. Сразу напрашивается вопрос, как сделать отрицательные значения, если у генератора условие - минимальное значение не может быть меньше нуля.
Массив.Добавить(Генератор.СлучайноеЧисло(0, 20) - 10); // Будет от -10 до 10
хм.. очень сложно сделано) в духе програмистов) Сумму всех значений я вписал в функцию вывестимассив..
тут дальше вводите перем Количество - а какой смысл если 5 входов можем быть.. мы и так это знаем так как СоздатьМассив(5)..
просчет среднего тоже в в функцию вывестимассив..
Процедура ВывестиМассив(масив)
Гл_СуммаСлучЧисел = 0;
Среднее=0;
Для каждого ЭлементМассива из масив Цикл
Сообщить(ЭлементМассива);
Гл_СуммаСлучЧисел=Гл_СуммаСлучЧисел+ЭлементМассива;
КонецЦикла;
Сообщить("Сумма всех = "+Гл_СуммаСлучЧисел);
Среднее=Гл_СуммаСлучЧисел/КолЗнач;
Сообщить(Среднее);
КонецПроцедуры
Вот поэтому-то 1С и не любят. С чего бы это вдруг процедура вывода должна что-то считать? Это безбожно :(