Главная » Просмотр файлов » Лекция 9. Матрицы и итерационные циклы

Лекция 9. Матрицы и итерационные циклы (1152912), страница 2

Файл №1152912 Лекция 9. Матрицы и итерационные циклы (Воробьева И.А. «Информатика. Язык Питон» (2016)) 2 страницаЛекция 9. Матрицы и итерационные циклы (1152912) страница 22019-09-06СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

≥ 0)» – это, по сути, найти хотя бы одиннеотрицательный (≥ 0) элемент (задача 1) или проверить, что всеэлементы отрицательны (< 0) (задача 2).Рекомендация. Переформулируйте задачу так, как лично вамудобнее ее решать. Избавляйтесь от отрицаний, особенно двойных. Нобудьте аккуратны, чтобы не совершить ошибку на этом этапе иначебудете сразу решать какую-то другую задачу. Не ту, что была задана.Протестируйте себя на реальном примере, что «новая формулировка»после поиска и установки флага-условия, приводит к тому же результату,что и исходная. Не забывайте, что формулировки «задачи_1» и«задачи_2» – являются взаимообратными.

Это означает, что если взадаче_1 положительный ответ приводит к действию_1, аотрицательный – к действию_2, то в задаче_2 положительный ответприводит к действию_2, а отрицательный – к действию_1.2Вопрос «строго или не строго упорядочены», т.е. если элементы равны – считаем ли мы их упорядоченными илинет.3Вопрос «интервал (y, z) или отрезок [y, z]», т.е. строгое или не строгое будет сравнение.10Воробьева И.А. «Информатика. Язык Питон»Продемонстрируем сказанное для задачи из примера 6.3.ИСХОДНАЯ ЗАДАЧА-«нет ≥ 0»+ДЕЙСТВИЕ 1ДЕЙСТВИЕ 2ЗАДАЧА_1ЗАДАЧА_2 ≡ ИСХ.

ЗАДАЧА«все < 0» ≡«нет ≥ 0»-«есть ≥ 0»+ДЕЙСТВИЕ 2-+ДЕЙСТВИЕ 1ДЕЙСТВИЕ 1ДЕЙСТВИЕ 2Приведем фрагмент кода для задачи_1 и задачи_2 из примера 6.3 сиспользованием флага для досрочного выхода из матрицы.# ОБЩАЯ ЧАСТЬ ДЛЯ ОБЕИХ ФОРМУЛИРОВОКN=M=10# максимальная размерность матрицыn=m=0# размерность матрицыi=j=0# индексыflg = False# флаг выполнения условия поискаA=[0]*Nfor i in range(N): A[i]=[0]*M # целочисленная матрица# РАЗДЕЛ ОПЕРАТОРОВ…# ввод n и m (от 1 до 10), матрицы A из вещественных чисел11Воробьева И.А.

«Информатика. Язык Питон»Задача_1flg = False# считаем, что ПОКА НЕ НАШЛИ элемента « ≥ 0»i= 0# начальное значение индекса строкwhile ( i < n) and not flg :j=0# начальное значение индекса столбцовwhile ( j < m) and not flg :if A[i][ j] >= 0 :flg = True # нашли « ≥ 0» → больше искать смысла нетj +=1i +=1if flg :else:… Действие 2…… Действие 1…Задача_2flg = True# считаем, что ВСЕ элементы отрицательныi= 0# начальное значение индекса строкwhile ( i < n) and flg :j=0# начальное значение индекса столбцовwhile ( j < m) and flg :if A[i][ j] >= 0 :flg = False # НЕ ВСЕ «< 0» → больше искать смысла нетj +=1i +=1if flg :else:… Действие 1…… Действие 2…12Воробьева И.А.

«Информатика. Язык Питон»6.3. Задача с досрочным выходом из поиска в матрице.Пример решенияЗадача Дана целочисленная матрицаПроверить, есть личетные элементы в верхней половине матрицы. Если да, то поменятьместами левую и правую половины матрицы «зеркально». В противномслучае сообщить, что: «Четных элементов нет».Уточнения задачи1 Если нечетное, то как будем считать верхнюю половину? В этом случае будем считать входные данные некорректными – невсякие задачи решаются для любых входных данных.

Об аномалиивыведем сообщение « – должно быть четным».2 Ноль четное число? Да, ноль четное число, по определению, но всегда полезно об этомдополнительно упомянуть в задаче.3 Число столбцов может быть нечетным? может быть равно единице? Да. Если – нечетное число, тогда 1-й столбец меняем местами с столбцом, 2-й с ()-м и т.д., а средний– столбец4 останетсянеизменным (это рассуждения в привычной нумерации от 1 до ). может быть равно единице, тогда матрица внешне не изменится.Уточненная постановка задачиДана целочисленная матрицаПроверить, есть ли четныеэлементы в верхней половине матрицы. Если да, то поменять местамилевую и правую половины матрицы «зеркально». альтернатива: «Четных элементов нет»; аномалия при - нечетном: « – должно быть четным»; число «0» считаем четным;4Средний столбец в матрице из m столбцов (для нечетного m):13Воробьева И.А.

«Информатика. Язык Питон» минимальное число столбцов равно «1»; индексация строк и столбцов начинается с «0» - это означает, чтосредний столбец (при нечетном ) имеет индекс.Данные, которые уже заданы и которые потребуютсяВх.:– максимальное значение строк ,четно– максимальное значение строк ,– матрица из целочисленных элементов, причем значенияэлементов:;Промежуточные:,диапазон:– индекс строк,– индекс столбцов,;;– целая часть от деления числа строк/столбцов на два;flg – флаг проверки условия (flg =True  есть четные элементы);Вых.:– измененная матрица из целочисленных элементов, причем значения элементов:;ИЛИ Сообщение-альтернатива, Not_Even: «Четных элементов нет».ИЛИ Сообщение-аномалия, ERR_n: «n – должно быть четным».Примечание.

В алгоритме команда DIV означает «целочисленноеделение». В Python это оператор «//» .14Воробьева И.А. «Информатика. Язык Питон»Блок-схема (алгоритм) решения задачиРасписываем алгоритм нисходящим способом, не углубляясь вподробности подзадач.

Это «нулевой уровень» – каркас взаимодействияподзадач, основные логические связи. Умение выделять подзадачи снеобходимыми им входными/выходными данными – очень важноеумение в решении любых задач, не только в программировании.началоввод n−n – чет. И n > 2+ввод m, A«ERR_n»вывод n, m, AMidi = n DIV 2;Midj = m DIV 2Вх.: Midi, m, AПРОВЕРКА ЭЛЕМЕНТОВНА ЧЕТНОСТЬВых.: flg−flg=TrueВх.: n, Midj, A+ОБМЕН ЭЛЕМЕНТОВМАТРИЦЫВых.: A«Not_Even»вывод Aконец15Воробьева И.А. «Информатика. Язык Питон»Следующее важное умение, не пытаться написать код решения задачи влоб и сразу весь, а написать только то, что указано в блок-схеме«нулевого уровня».

Все, что скрыто в подзадачах, можно спокойнозаменить так называемыми заглушками – имитацией вычисленногорезультата.# РАЗДЕЛ КОНСТАНТN_MAX=M_MAX=10# РАЗДЕЛ ПЕРЕМЕННЫХn=m=0# размерность матрицыi=j=0# индексыflg = False# флаг условия поиска, «четных элементов пока нет»A=[0]*N_MAXfor i in range(N_MAX): A[i]=[0]*M_MAX # целочисленная матрицаMidi= Midj=0# условная середина размерности матрицы# РАЗДЕЛ ОПЕРАТОРОВn = int(input(‘Введите n ’))if (n % 2 <> 0) or (n < 2) or (n > N_MAX) :print(‘n – должно быть четным , >1 и <11’) # Аномалияelse:# ввод m (от 1 до 10), матрицы A (проверки m нет, что плохо)m = int(input(‘Введите m ’))for i in range (n):for j in range (m):A[i][j] = int(input(‘ввод > ’)) # считываем первую строку# вывод n, m и матрицы A проводим ОТДЕЛЬНО!print(‘Размерность матрицы (’, n, ‘, ’ , m, ‘)’ )for i in range (n):for j in range (m):print(A[i][j], end=‘, ’ )# выводим первую строкуprint()# переходим на следующую строку16Воробьева И.А.

«Информатика. Язык Питон»# Вычисление границ для циклов заранее еще один моментнаписания эффективного кода. Сделаем это.Midi = n // 2 # целая часть от деления числа строк на дваMidj = m // 2 # целая часть от деления числа столбцов на два# Первая заглушка: результат ее работы – это флаг flgflg = True# для проверки одной ветки нулевого уровня# flg = False # для проверки другой ветки нулевого уровня# надо будет снять символы комментирования «#»ПОДЗАДАЧА 1if flg:# Вторая заглушка: результат ее работы – это измененная матрицаA[0][0] = - A[0][0] # изменим любой элемент матрицы, просто,# чтобы она измениласьПОДЗАДАЧА 2# вывод результата:  измененной матрицы Aprint(‘Размерность матрицы (’, n, ‘, ’ , m, ‘)’ )for i in range (n):for j in range (m):print(A[i][j], end=‘, ’ )# выводим первую строкуprint()# переходим на следующую строкуelse:print(‘Четных элементов нет. ’)#  или альтернативы# окончание внешнего блока if..elseЕсли на этом этапе все работает хорошо, только тогда имеет смыслрешать подзадачи.

Раскроем код заглушек. Если пренебречь этойрекомендацией и пытаться всю задачу написать сразу, то этапотладки кода займет гораздо больше времени.!17Воробьева И.А. «Информатика. Язык Питон»# ПРОВЕРКА ВЕРХНЕЙ ПОЛОВИНЫ МАТРИЦЫ НА ЧЕТНОСТЬ ЕЕ ЭЛЕМЕНТОВflg = False# считаем, что ПОКА НЕ НАШЛИ четного элементаi= 0# начальное значение индекса строкwhile ( i < Midi) and not flg :j=0# начальное значение индекса столбцовwhile ( j < m) and not flg :if (A[i][j] % 2) == 0 thenflg= True # нашли четный → больше искать смысла нетj +=1i +=1ПОДЗАДАЧА 1Обратите внимание: инициализация флага и счетчиков происходит не где-то в начале всейпрограммы, а именно там, где решается подзадача; граница Midi просчитана заранее, а не вычисляется КАЖДЫЙ раз наочередном шаге цикла.

Ведь можно было записать и так«while ( i < n // 2) and not flg» это допустимо для матрицы из10-ти элементов, но всегда надо писать эффективное решение для«большой задачи», например, для n=10 000 и больше.# ОБМЕН ЭЛЕМЕНТОВ СТОЛБЦОВ МАТРИЦЫ ОТНОСИТЕЛЬНО СЕРЕДИНЫZ = 0 # вспомогательная переменная для обменаfor i in range (n):for j in range (Midj): # если матрица состоит из одного# столбца, тогда цикл не отработает ни разуZ = A[i][j]A[i][j] = A[i][m-1 -j]A[i][m-1 -j] = ZПОДЗАДАЧА 2.

Характеристики

Тип файла
PDF-файл
Размер
1020,62 Kb
Тип материала
Высшее учебное заведение

Список файлов лекций

Воробьева И.А. «Информатика
Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6439
Авторов
на СтудИзбе
306
Средний доход
с одного платного файла
Обучение Подробнее