Добавил:
BST1852
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:5 Вариант / Листинг ТП 5 вар
.txt //Генерирует массив из 30 элементов случайных чисел
Функция Генератор()
Генератор = Новый ГенераторСлучайныхЧисел();
БулеваГенератор = Новый ГенераторСлучайныхЧисел();
Массив = Новый Массив;
Для Чис = 1 По 30 Цикл
Полученное = Генератор.СлучайноеЧисло(0,255);
БудетЛиОтрицательным = БулеваГенератор.СлучайноеЧисло(0,1);
Если БудетЛиОтрицательным = 1 Тогда
Полученное = Полученное * -1;
КонецЕсли;
Массив.Добавить(Полученное);
КонецЦикла;
Возврат Массив;
КонецФункции
Функция ПроверитьЧетноеЧисло(ПроверяемоеЧисло)
Число = ПроверяемоеЧисло%2=0;
Возврат Число;
КонецФункции
Функция ПолучитьМассивСтрокой(Массив)
СтрокаСМассивом = "";
Для Чис = 0 По 29 Цикл
СтрокаСМассивом = СтрокаСМассивом + Массив[Чис] + " , ";
КонецЦикла;
Возврат СтрокаСМассивом;
КонецФункции
Функция ПроверкаДеленияНа5(ПроверяемоеЧисло)
Число = ПроверяемоеЧисло%5=0;
Возврат Число;
КонецФункции
Функция ПроверкаДеленияНа7(ПроверяемоеЧисло)
Число = ПроверяемоеЧисло%7=0;
Возврат Число;
КонецФункции
//B4. Найти количество попарно различных элементов массива, меньших
//числа M.
&НаКлиенте
Процедура В4(Команда)
Если ЗначениеЗаполнено(ЭтаФорма.ЧислоМ) Тогда
СгенерированныйМассив = Генератор();
СтрокаДляОтображенияЭлементовМассива = ПолучитьМассивСтрокой(СгенерированныйМассив);
Сообщить("Массив из 30 элементов: " + СтрокаДляОтображенияЭлементовМассива);
Ответ = 0;
Для Чис = 0 По 29 Цикл
Если Чис < 28 Тогда
Значение1 = СгенерированныйМассив[Чис];
Значение2 = СгенерированныйМассив[Чис + 1];
Иначе
Возврат;
КонецЕсли;
Если Значение1 <> Значение2 И Значение1 < ЭтаФорма.ЧислоМ И Значение2 < ЭтаФорма.ЧислоМ Тогда
Ответ = Ответ +1;
КонецЕсли;
КонецЦикла;
Сообщить("Ответ: " + Строка(Ответ));
Иначе
Сообщить("Вы не заполнили число М");
КонецЕсли;
КонецПроцедуры
// B7. Напечатать все те элементы массива, сумма цифр в которых находится
//в интервале от L до R.
&НаКлиенте
Процедура В7(Команда)
Если ЗначениеЗаполнено(ЭтаФорма.ЧислоL) И ЗначениеЗаполнено(ЭтаФорма.ЧислоR) Тогда
СгенерированныйМассив = Генератор();
СтрокаДляОтображенияЭлементовМассива = ПолучитьМассивСтрокой(СгенерированныйМассив);
Сообщить("Массив из 30 элементов: " + СтрокаДляОтображенияЭлементовМассива);
Ответ = 0;
СуммаВыделенныхЗначений = 0;
Для Каждого Элемент Из СгенерированныйМассив Цикл
СтроковоеПредставлениеЧисла = Строка(Элемент);
Если Лев(СтроковоеПредставлениеЧисла,1) = "-" Тогда
СтроковоеПредставлениеЧисла = СтрЗаменить(СтроковоеПредставлениеЧисла,"-","");
КонецЕсли;
КолВоЗначенийВЭлементе = СтрДлина(СтроковоеПредставлениеЧисла);
Для Чис = 1 По КолВоЗначенийВЭлементе Цикл
СуммаВыделенныхЗначений = СуммаВыделенныхЗначений + Число(Сред(СтроковоеПредставлениеЧисла,Чис,1));
КонецЦикла;
Если СуммаВыделенныхЗначений > ЭтаФорма.ЧислоR И СуммаВыделенныхЗначений < ЭтаФорма.ЧислоL Тогда
Сообщить(Элемент);
КонецЕсли;
СуммаВыделенныхЗначений = 0;
КонецЦикла;
Иначе
Сообщить("Заполните число L И R");
КонецЕсли;
КонецПроцедуры
//B9. Подсчитать количество элементов в массиве, являющихся точным
//квадратом другого элемента в этом массиве.
&НаКлиенте
Процедура B9(Команда)
СгенерированныйМассив = Генератор();
СтрокаДляОтображенияЭлементовМассива = ПолучитьМассивСтрокой(СгенерированныйМассив);
Сообщить("Массив из 30 элементов: " + СтрокаДляОтображенияЭлементовМассива);
Ответ = 0;
КолВоЗначений = 0;
Для Каждого Элемент из СгенерированныйМассив Цикл
Если Элемент > 1 Тогда
Квадрат = Элемент * Элемент;
Ответ = СгенерированныйМассив.Найти(Квадрат);
Если ЗначениеЗаполнено(Ответ) Тогда
СтрокаОтвета = Строка("Для числа: "+ Элемент + " Найден квадрат в сгенерированном массиве, его индекс :" + Ответ);
Сообщить(СтрокаОтвета);
КолВоЗначений = КолВоЗначений + 1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(КолВоЗначений) Тогда
Сообщить("Мы нашли " + КолВоЗначений + " значений.");
Иначе
Сообщить("Ничего не найдено");
КонецЕсли;
КонецПроцедуры
// A7. Вычислить среднее арифметическое чисел, содержащих только четные
//цифры.
&НаКлиенте
Процедура А7(Команда)
СгенерированныйМассив = Генератор();
СтрокаДляОтображенияЭлементовМассива = ПолучитьМассивСтрокой(СгенерированныйМассив);
Сообщить("Массив из 30 элементов: " + СтрокаДляОтображенияЭлементовМассива);
СуммаЧисел = 0;
КолвоЧисел = 0;
Для Каждого Элемент из СгенерированныйМассив Цикл
Если Элемент <> 0 И ПроверитьЧетноеЧисло(Элемент) Тогда
СуммаЧисел = СуммаЧисел + Элемент;
КолвоЧисел = КолвоЧисел + 1;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(СуммаЧисел) Тогда
Ответ = СуммаЧисел/КолвоЧисел;
Сообщить(Ответ);
Иначе
Сообщить("Неудача");
КонецЕсли;
КонецПроцедуры
//A6. Вычислить сумму только симметричных элементов массива.
&НаКлиенте
Процедура А6(Команда)
СгенерированныйМассив = Генератор();
СтрокаДляОтображенияЭлементовМассива = ПолучитьМассивСтрокой(СгенерированныйМассив);
Сообщить("Массив из 30 элементов: " + СтрокаДляОтображенияЭлементовМассива);
Ответ = 0;
Для Каждого Элемент Из СгенерированныйМассив Цикл
СтроковоеПредставлениеЧисла = Строка(Элемент);
Если Лев(СтроковоеПредставлениеЧисла,1) = "-" Тогда
СтроковоеПредставлениеЧисла = СтрЗаменить(СтроковоеПредставлениеЧисла,"-","");
КонецЕсли;
ЗначениеСимметрии = Лев(СтроковоеПредставлениеЧисла,1);
КолВоЗначенийВЭлементе = СтрДлина(СтроковоеПредставлениеЧисла);
Если КолВоЗначенийВЭлементе > 1 Тогда
Если КолВоЗначенийВЭлементе = 3 И ЗначениеСимметрии = Сред(СтроковоеПредставлениеЧисла,2,1) И ЗначениеСимметрии = Сред(СтроковоеПредставлениеЧисла,3,1) ИЛИ КолВоЗначенийВЭлементе = 2 И ЗначениеСимметрии = Сред(СтроковоеПредставлениеЧисла,2,1) Тогда
Сообщить("Симметричный элемент: " + Элемент);
Ответ = Ответ + Число(Элемент);
КонецЕсли;
Иначе
Сообщить("Симметричный элемент: " + Элемент);
Ответ = Ответ + Элемент;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(Ответ) Тогда
Сообщить("Сумма всех чисел: " + Ответ);
Иначе
Сообщить("Симметричных чисел нет");
КонецЕсли;
КонецПроцедуры
// A2. Найти количество и сумму тех элементов массива, которые делятся на
//5 и не делятся на 7. Вывести все содержащиеся в данном массиве четные
//числа в порядке убывания их индексов, а также их количество.
&НаКлиенте
Процедура А2(Команда)
СгенерированныйМассив = Генератор();
СтрокаДляОтображенияЭлементовМассива = ПолучитьМассивСтрокой(СгенерированныйМассив);
Сообщить("Массив из 30 элементов: " + СтрокаДляОтображенияЭлементовМассива);
СписокИндексов = "";
Для Каждого Элемент из СгенерированныйМассив Цикл
Если ПроверкаДеленияНа5(Элемент) ИЛИ НЕ ПроверкаДеленияНа7(Элемент) Тогда
Если ПроверитьЧетноеЧисло(Элемент) Тогда
Индекс = СгенерированныйМассив.Найти(Элемент);
СписокИндексов = СписокИндексов + Индекс + " , ";
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(СписокИндексов) Тогда
Сообщить(СписокИндексов);
Иначе
Сообщить("Таких чисел не найдено");
КонецЕсли;
КонецПроцедуры
Функция Генератор()
Генератор = Новый ГенераторСлучайныхЧисел();
БулеваГенератор = Новый ГенераторСлучайныхЧисел();
Массив = Новый Массив;
Для Чис = 1 По 30 Цикл
Полученное = Генератор.СлучайноеЧисло(0,255);
БудетЛиОтрицательным = БулеваГенератор.СлучайноеЧисло(0,1);
Если БудетЛиОтрицательным = 1 Тогда
Полученное = Полученное * -1;
КонецЕсли;
Массив.Добавить(Полученное);
КонецЦикла;
Возврат Массив;
КонецФункции
Функция ПроверитьЧетноеЧисло(ПроверяемоеЧисло)
Число = ПроверяемоеЧисло%2=0;
Возврат Число;
КонецФункции
Функция ПолучитьМассивСтрокой(Массив)
СтрокаСМассивом = "";
Для Чис = 0 По 29 Цикл
СтрокаСМассивом = СтрокаСМассивом + Массив[Чис] + " , ";
КонецЦикла;
Возврат СтрокаСМассивом;
КонецФункции
Функция ПроверкаДеленияНа5(ПроверяемоеЧисло)
Число = ПроверяемоеЧисло%5=0;
Возврат Число;
КонецФункции
Функция ПроверкаДеленияНа7(ПроверяемоеЧисло)
Число = ПроверяемоеЧисло%7=0;
Возврат Число;
КонецФункции
//B4. Найти количество попарно различных элементов массива, меньших
//числа M.
&НаКлиенте
Процедура В4(Команда)
Если ЗначениеЗаполнено(ЭтаФорма.ЧислоМ) Тогда
СгенерированныйМассив = Генератор();
СтрокаДляОтображенияЭлементовМассива = ПолучитьМассивСтрокой(СгенерированныйМассив);
Сообщить("Массив из 30 элементов: " + СтрокаДляОтображенияЭлементовМассива);
Ответ = 0;
Для Чис = 0 По 29 Цикл
Если Чис < 28 Тогда
Значение1 = СгенерированныйМассив[Чис];
Значение2 = СгенерированныйМассив[Чис + 1];
Иначе
Возврат;
КонецЕсли;
Если Значение1 <> Значение2 И Значение1 < ЭтаФорма.ЧислоМ И Значение2 < ЭтаФорма.ЧислоМ Тогда
Ответ = Ответ +1;
КонецЕсли;
КонецЦикла;
Сообщить("Ответ: " + Строка(Ответ));
Иначе
Сообщить("Вы не заполнили число М");
КонецЕсли;
КонецПроцедуры
// B7. Напечатать все те элементы массива, сумма цифр в которых находится
//в интервале от L до R.
&НаКлиенте
Процедура В7(Команда)
Если ЗначениеЗаполнено(ЭтаФорма.ЧислоL) И ЗначениеЗаполнено(ЭтаФорма.ЧислоR) Тогда
СгенерированныйМассив = Генератор();
СтрокаДляОтображенияЭлементовМассива = ПолучитьМассивСтрокой(СгенерированныйМассив);
Сообщить("Массив из 30 элементов: " + СтрокаДляОтображенияЭлементовМассива);
Ответ = 0;
СуммаВыделенныхЗначений = 0;
Для Каждого Элемент Из СгенерированныйМассив Цикл
СтроковоеПредставлениеЧисла = Строка(Элемент);
Если Лев(СтроковоеПредставлениеЧисла,1) = "-" Тогда
СтроковоеПредставлениеЧисла = СтрЗаменить(СтроковоеПредставлениеЧисла,"-","");
КонецЕсли;
КолВоЗначенийВЭлементе = СтрДлина(СтроковоеПредставлениеЧисла);
Для Чис = 1 По КолВоЗначенийВЭлементе Цикл
СуммаВыделенныхЗначений = СуммаВыделенныхЗначений + Число(Сред(СтроковоеПредставлениеЧисла,Чис,1));
КонецЦикла;
Если СуммаВыделенныхЗначений > ЭтаФорма.ЧислоR И СуммаВыделенныхЗначений < ЭтаФорма.ЧислоL Тогда
Сообщить(Элемент);
КонецЕсли;
СуммаВыделенныхЗначений = 0;
КонецЦикла;
Иначе
Сообщить("Заполните число L И R");
КонецЕсли;
КонецПроцедуры
//B9. Подсчитать количество элементов в массиве, являющихся точным
//квадратом другого элемента в этом массиве.
&НаКлиенте
Процедура B9(Команда)
СгенерированныйМассив = Генератор();
СтрокаДляОтображенияЭлементовМассива = ПолучитьМассивСтрокой(СгенерированныйМассив);
Сообщить("Массив из 30 элементов: " + СтрокаДляОтображенияЭлементовМассива);
Ответ = 0;
КолВоЗначений = 0;
Для Каждого Элемент из СгенерированныйМассив Цикл
Если Элемент > 1 Тогда
Квадрат = Элемент * Элемент;
Ответ = СгенерированныйМассив.Найти(Квадрат);
Если ЗначениеЗаполнено(Ответ) Тогда
СтрокаОтвета = Строка("Для числа: "+ Элемент + " Найден квадрат в сгенерированном массиве, его индекс :" + Ответ);
Сообщить(СтрокаОтвета);
КолВоЗначений = КолВоЗначений + 1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(КолВоЗначений) Тогда
Сообщить("Мы нашли " + КолВоЗначений + " значений.");
Иначе
Сообщить("Ничего не найдено");
КонецЕсли;
КонецПроцедуры
// A7. Вычислить среднее арифметическое чисел, содержащих только четные
//цифры.
&НаКлиенте
Процедура А7(Команда)
СгенерированныйМассив = Генератор();
СтрокаДляОтображенияЭлементовМассива = ПолучитьМассивСтрокой(СгенерированныйМассив);
Сообщить("Массив из 30 элементов: " + СтрокаДляОтображенияЭлементовМассива);
СуммаЧисел = 0;
КолвоЧисел = 0;
Для Каждого Элемент из СгенерированныйМассив Цикл
Если Элемент <> 0 И ПроверитьЧетноеЧисло(Элемент) Тогда
СуммаЧисел = СуммаЧисел + Элемент;
КолвоЧисел = КолвоЧисел + 1;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(СуммаЧисел) Тогда
Ответ = СуммаЧисел/КолвоЧисел;
Сообщить(Ответ);
Иначе
Сообщить("Неудача");
КонецЕсли;
КонецПроцедуры
//A6. Вычислить сумму только симметричных элементов массива.
&НаКлиенте
Процедура А6(Команда)
СгенерированныйМассив = Генератор();
СтрокаДляОтображенияЭлементовМассива = ПолучитьМассивСтрокой(СгенерированныйМассив);
Сообщить("Массив из 30 элементов: " + СтрокаДляОтображенияЭлементовМассива);
Ответ = 0;
Для Каждого Элемент Из СгенерированныйМассив Цикл
СтроковоеПредставлениеЧисла = Строка(Элемент);
Если Лев(СтроковоеПредставлениеЧисла,1) = "-" Тогда
СтроковоеПредставлениеЧисла = СтрЗаменить(СтроковоеПредставлениеЧисла,"-","");
КонецЕсли;
ЗначениеСимметрии = Лев(СтроковоеПредставлениеЧисла,1);
КолВоЗначенийВЭлементе = СтрДлина(СтроковоеПредставлениеЧисла);
Если КолВоЗначенийВЭлементе > 1 Тогда
Если КолВоЗначенийВЭлементе = 3 И ЗначениеСимметрии = Сред(СтроковоеПредставлениеЧисла,2,1) И ЗначениеСимметрии = Сред(СтроковоеПредставлениеЧисла,3,1) ИЛИ КолВоЗначенийВЭлементе = 2 И ЗначениеСимметрии = Сред(СтроковоеПредставлениеЧисла,2,1) Тогда
Сообщить("Симметричный элемент: " + Элемент);
Ответ = Ответ + Число(Элемент);
КонецЕсли;
Иначе
Сообщить("Симметричный элемент: " + Элемент);
Ответ = Ответ + Элемент;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(Ответ) Тогда
Сообщить("Сумма всех чисел: " + Ответ);
Иначе
Сообщить("Симметричных чисел нет");
КонецЕсли;
КонецПроцедуры
// A2. Найти количество и сумму тех элементов массива, которые делятся на
//5 и не делятся на 7. Вывести все содержащиеся в данном массиве четные
//числа в порядке убывания их индексов, а также их количество.
&НаКлиенте
Процедура А2(Команда)
СгенерированныйМассив = Генератор();
СтрокаДляОтображенияЭлементовМассива = ПолучитьМассивСтрокой(СгенерированныйМассив);
Сообщить("Массив из 30 элементов: " + СтрокаДляОтображенияЭлементовМассива);
СписокИндексов = "";
Для Каждого Элемент из СгенерированныйМассив Цикл
Если ПроверкаДеленияНа5(Элемент) ИЛИ НЕ ПроверкаДеленияНа7(Элемент) Тогда
Если ПроверитьЧетноеЧисло(Элемент) Тогда
Индекс = СгенерированныйМассив.Найти(Элемент);
СписокИндексов = СписокИндексов + Индекс + " , ";
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(СписокИндексов) Тогда
Сообщить(СписокИндексов);
Иначе
Сообщить("Таких чисел не найдено");
КонецЕсли;
КонецПроцедуры