Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Конспект по информатике, 12 сентября



Конспект по информатике, 12 сентября

 

Алгоритмизация и программирование

Разработка и кодирование на Python

В настоящее время существуют разнообразные подходы к программированию. В этом случае используются языки программирования и средства записи приложений на этих языках (это называется разработкой алгоритма и воспроизведение алгоритма на языке программирования). В разных подходах к программированию существуют свои технические разработки, такие как алгоритм, так и его кодирование на языке. В нашем случае будет использоваться подход к ООП и структурное программирование. В этом случае разработка будет вестись средствами которое удобны для контроля человеком (алгоритм на языке высокого уровня). Все, что будет разрабатываться, будет обрабатываться некоторой системой пакетов и программ. В зависимости от этих средств, записанный на языке программирования текст может проходить разные этапы разработки. Например, в одних случаях текст приложения будет построчно переводится на построчный язык и выполнятся, а в других случаях:

1) будет выполнятся перевод на промежуточный язык или машинный язык (трансляция), а программа выполнять перевод транслятором.

2) воссоединение результатов трансляций всех необходимых программ (сборка).

3) настройка результатов сборки на конкретное место в оперативной памяти и загрузка кода в эту память.

4) обнаружив в памяти текст программы, операционная система активизирует ее, начиная с того адреса, который ей указан. (в С# адрес точки активизации задается методом Main класса приложения).

 

В нашем случае будет использован первый вариант.

Программа переводчика называется интерпретатором, то есть код на Python в данный момент не компилируется (C# обрабатывает компилятор). Вместо этого работает интерпретатор.

Парадигма программирования – совокупность идей и понятий, определяющих стиль написания программ.

 

Python поддерживает:

· структурное программирование

· объектно-ориентированное программирование

· функциональное программирование

· аспектно-ориентированное программирование

 

Основные черты при построении Python следующие:

1) тип данных никогда явно не указывается

2) объект обработки, содержащий значение создается автоматически по виду указанного значения.

3) объекты обработки могут иметь имена, но они не объявляются, т.е. транслятор не выделяет память. В отличии от С#, тут нет переменных с конкретными именами которые предназначены для хранения значений определенного типа. Все имена – универсальные ссылки. Ссылка – объект предназначенный для хранения адреса. Адрес оперативной памяти – порядковый номер байта.

4) Python может хранить адрес объекта любого типа. Таким образом, в языке любой образ значения любого типа – адрес блока памяти, который хранит это значение (объект значения).

false – объект значения логического типа

[a, 23, “s2”] - значение типа список (list)

адреса таких объектов могут хранить ссылки, они представлены желаемыми для разработчика именами. Ссылку можно использоваться если она хранит адрес объекта значения. В простейшем случае адрес можно переслать операцией присваивания (a=35).

1) создается объект значения 35

2) копируется адрес ссылки имени “a”. Объект ссылки интерпретирует создание автоматически, выделяя нужны объем памяти и после этого копирует адрес объекта значения в ссылку «а». Если после этого записать а = 2, то 35 потеряно и «а» будет хранить адрес двойки.

Активизация среды Python

В настоящее время имеется около 10 разработок работы с Python. Разработчики имеют сайт.

При активизации отображается командное окно Python. Его можно использовать как калькулятор. Можно вводить целые числа, числа в 2ой, 8ой и 16ой системах, но отображаться будет десятичное число.

Текст вводится как последовательность символов, которая обрамляется кавычками, апострофами, либо тройными символами.

Символьного типа нет.

Нужно учитывать, что обрамляемый кавычками и апострофами текст однострочен и для получения многосторочности нужно использовать /n. Если ```_```, то текст многострочен.

Формирование модулей

Модуль – код алгоритма который хранится в отдельном файле. Он формируется примерно так же, как консольное приложение в Си#. Это просто текст, который содержит кодирование алгоритма. Такой модуль можно формировать в любом простейшем текстовом редакторе (среда IDLE содержит собственный текстовый редактор, который можно использовать).

Текст документирования

Первым в оформлении модуля обязательно нужно записывать текст документирования, он должен содержать сведения о том, что делает модуль и каковы его особенности. При необходимости документирование содержит сведения о программисте. Документирование это любой многострочный текст, который окаймляется тремя кавычками. Например:

‘’’Иллюстрация использования модулей, которые импортируются оператором import.

Программист Солнышкин’’’

import foma1, variag

           print(“Somovoz”)

           input() #Пауза для просмотра итога   

Текст документирования сохраняется в ссылке __doc__, следовательно, если распечатать значение этой ссылке, мы получим строку документирования модуля.

print(math__doc__)

Формирование модулей

Любой модуль формируется согласно общей структуре. Разработка модуля начинается с его документирования (содержит сведения о назначения модулей). После этого рекомендуется указывать импорт необходимых модулей или их ресурсов. Набор некоторых ресурсов: определение функций, объектов классов, объектов обработки (код некоторых алгоритмов содержащийся в файле с расширением . py трактуется как модуль). Модуль может создавать разработки или использовать уже имеющийся набор модулей. Любое приложение может использовать ресурсы одного или нескольких модулей. Для реализации этой возможности используется оператор import. Если выполняется импорт модулей, то методика реализация этого процесса следующая:

1. Любой текстовый файл с расширением . py трактуется как модуль.

2. Если при кодировании данного приложения были разработаны собственные модули и их нужно в дальнейшем использовать в других модулях, то желательно сохранять файлы модулей и модули которые включаются в одной и той же папке.

3. Для импорта модулей текущих приложений записывают оператор import в одной из следующих форм:

а) для подключения всех ресурсов модулей (имена перечисляются через запятую):

import< список полных имен подключаемых модулей>

Необходимо учитывать возможность расположения модулей внутри некоторого пакета, при этом пакет может содержать другие пакеты. В этом случае имя модуля в списке задают по шаблону:

< имя пакета> < имя подпакета> < имя модуля>

Следует иметь ввиду, что при такой форме импорта имена модулей добавляются в глобальную таблицу текущего модуля. Это предполагает, что при ссылки на ресурс какого-то модуля используют шаблон < имя модуля> < имя элемента>. Например, при импортировании стандартного математического модуля для отображения косинуса, нужно указывать math.cos(50)

 

б) Импортировать можно не целиком модули, а лишь некоторые ресурсы из модулей (некоторых объектов обработки модулей). В этом случае используют шаблон

from< имя модуля> import< список подключаемых ресурсов>

from math import sin, cos, sqrt

Импортируются только объекты ссылок на функции. Особенность состоит в том, что в этом случае в таблицу текущего модуля записываются имена ресурсов, а не модулей. Это предполагает, что ресурсы используются без уточнения имени модуля, поскольку таких сведений в текущем модуле нет.

 

в) для импорта всех объектов модуля, за исключением имен начинающихся с подчеркивания, используют шаблон:

from< имя модуля> import*

В этом случае ____________ используются редко, поскольку в текущий модуль вставляется набор новых неизвестных имен, а поскольку имена могут совпадать, то некоторые из имён заданных программистом могут быть перекрыты.

Разработка алгоритма

При разработке программных изделий в настоящее время используется определенная методика которая предполагает следующее:

1. Алгоритм – это то, что в дальнейшем будет записано в тексте программы для выполнения действий по преобразованию данных. Это означает что никаких инструкций для транслятора в алгоритме нет - они будут записаны непосредственно в коде программы.

2. Алгоритм обязательно должен быть структурированным и должен разрабатываться по методике нисходящего проектирования (по методу сверху-вниз). Эта методика предполагает последовательное уточнение действий от общих идей к частности. Базовой структурной единицей алгоритма является базовая управляющая структура. Базовая управляющая структура это схема стандартного перехода от одного действия к другому. Всего существуют 3 вида базовых управляющих структуры, которые называются: следование, выбор, цикл. Структура следование предполагает переход к очередному действию без анализа условий и повторений. Структура выбор предполагает анализ некоторого условия и выбор одного из путей продолжения процесса преобразования данных. Если таких путей всего два, то это двоичный выбор, в противном случае множественный выбор. Структура цикл предполагает повторение одних и тех же действий при изменяющихся параметрах.

Все эти структуры имеют определенные шаблоны тех или иных средств. В качестве средств представления алгоритма можно использовать обиходный письменный язык, псевдокод или языки схем. Наиболее выгодным средством является язык схем в котором действие и порядок действий указываются с помощью линий, стрелок и геометрических фигур. Многие из языков схем имеют стандарты. В нашем случае будет использован международный стандарт, аналогом которого является российский ГОСТ 19.701-90. Кроме того будет использована схема Нэсси-Шнегермана. Эта схема отображает подробные сведения которые закодированы в программе и представлена некоторым прямоугольником внутри которого представлена последовательность базовых управляющих структур. Эта схема удобна только для небольших алгоритмов. В любом случае алгоритм не содержит сведения о типах данных и объявлении объектов обработки (только действие, которое можно преобразовать в последовательность машинных команд). При использовании языка схем обязательно нужно будет предварительно описывать объекты обработки. Выглядит это примирительно к схеме Нэсси-Шнейдермана так:

 

Задача.

На диске хранятся вещественные числа. Необходимо считать все числа, вычислить сумму только тех из них, которые меньше Е, на экран вывести значение суммы и сообщение о завершении обработки. Алгоритм выглядит следующим образом:

 

Имена Описание объектов
Х, Е Переменные, текущее число и эталон сравнения
sum Переменная, сумма чисел, вещественная, выходная

Таблица объектов обработки

 

 

Отобразить на экране подсказку “Введите Е: ”
Ввести с клавиатуры значение Е
Открыть файл для чтения
Очистить память
Считать из файла значение.
Считатать из файла значение Х
Пока не конец файла X < Е    Да                                                    Нет Пропустить                                    Суммировать
Считать из файла значение X
Закрыть файл
Отобразить на экране значение суммы
Отобразить сообщение о завершении работы

 

Формирование модулей

Среда Python позволяет работать в режиме калькулятора и в режиме обработки текста программы. При активации среды отображается командное окно, в котором работа идет в режиме калькулятора. Чтобы получить режим работы с программой необходимо отобразить окно текстового редактора, в котором строка за строкой нужно набирать операторы кодирующие заданный алгоритм. Создаваемая программа называется модулем. Обязательно нужно сохранить текст из текстового редактора в файле в рабочей папке - этот файл будет называться файлом модуля или просто модулем. Его можно будет импортировать в любые другие вновь создаваемые модули.

При формировании текста модуля необходимо учитывать, что в Python нет никаких объявлений. Каждое конкретное значение указанное в тексте приводит к тому, что интерпретатор выделяет блок памяти и копирует в него это значение. Это называется созданием объекта значения. Адрес объекта значения в тексте программы представлен образом конкретного значения или образом выражения.

Если требуется именованный объект, например, потребовалось имя «а» для числа 50, тогда указывают оператор присваивания имени объекта значения. В этом случае интерпретатор создает в модуле специальную таблицу имен объектов которые доступны только внутри модуля. Указанное имя является универсальной ссылкой на объект значения. Записав а=50 получаем ссылку «а» которая хранит адрес объекта значения 50. Если после этого задать а=5, то интерпретатор находит ссылку «а» в таблице и связывает ее с адресом пятерки. Аналогично если записать а=“som”, то предыдущий адрес «а» стирается и заносится новый адрес ''som’’, связь объекта со ссылкой устанавливается динамически по мере необходимости. Следовательно, если записать а=float(input(“Enter a”)), то происходит следующее: отображается подсказка ''Enter a’’, затем пользователь вводит число, которое функция input возвращает в точку вызова в виде текста. Вызовом конструктора float текст превращается в число и становится объектом значения, адрес которого присваивается ссылке «а», то есть имеем ввод значения «а». Для отображения каких-либо данных в командном окне в простейшем случае можно указывать вызов встроенной функции print по шаблону print(< список> ), где список это конкретное значение выражения, имена ссылок разделяемых запятой, например: для отображения в наглядном виде можно записать: print(“a=”, a). По умолчанию элементы в выводе разделяются одним пробелом. Если требуется использовать средства какого-либо модуля, то необходимо либо импортировать весь модуль, при этом его имя записывается в таблицу имен данного модуля и его можно использовать, либо импортировать некоторые элементы модуля. В этом случае в таблицу имен записываются имена этих средств и их можно использовать без уточнения. Например для импорта постоянной Pi из математического модуля указывают from math import Pi.

 

Двоичное ветвление

В этом случае после анализа условия можно выбрать только один из двух возможных путей. Различают два варианта структуры двоичного ветвления. Стандартного названия варианты не имеют. В некоторой литературе они называются ветвлением первого и второго рода, но чаще всего они называются ЕСЛИ-ТО и ЕСЛИ-ТО-ИНАЧЕ.

Структура ЕСЛИ-ТО

B – проверяемое условие

Р1 – действие или группа действий, которые нужно выполнить при истинности условия.

После выполнения действий нужно переходить на очередную структуру. При ложности условия ничего не выполняем, просто переходим на очередное действие. Если истина то выполняем условие, если не истина то переходим на следующее.

Необходимо помнить что если Р1 это некоторый сложный алгоритм, то его здесь не указывают. Вместо него записывают уточняемый блок. В языках программирования этот шаблон реализуется определенными средствами. В Python такими средствами являются операторы if и частный случай elif. Оператор if в многострочном варианте имеет шаблон:

if b:

P 1

Кроме того при реализации шаблона можно указывать однострочный или многострочный вариант elif вида

Elif b: P1

Или

elif b:

P 1

Эти варианты анализируют дополнительные условия которые не указаны в заголовке if.

В операторе b это логическое выражение любой степени сложности. P1 одиночный оператор или блок. При многострочной записи P1 записывается со сдвигом на 4 позиции вправо относительно позиции букв if. Блок это выровненное по одной вертикале любое количество любых операторов.

Структура ЕСЛИ-ТО-ИНАЧЕ

 

В программе шаблон воспроизводится оператором if следующего вида.

If B:

P1

Else

P2

или

P1 if B else P2

P1 и P2 не операторы, а выражения. Какое средство использовать решает разработчик.

 

Примеры разработки алгоритмов:

Пример 1

Записать фрагмент кода в котором определяется меньший из двух разных значений a и b

If a < b:

c = a

else:

c = b

или c = a If (a < b) else c = b

 

Вариантом, когда не надо использовать структуру выбор, является использование того факта, что в некоторых языках, в том числе и в Python, логические данные это подмножество целых.

с = (a< b)*a + (a> =b)*b

false и true можно использовать в арифметических операциях.

 

 

Структура информатики

1) информационные процессы

2) аппаратное обеспечение

3) программное обеспечение

 

Каждый из разделов имеет два уровня: теоретический и прикладной.

Теоретический уровень:

· информационные процессы охватывают теорию кодирования, теорию информации, теорию графов, теорию множеств, логику.

· аппаратное обеспечение охватывает логику, электронику, автоматику, кибернетику и некоторые другие разделы.

· программное обеспечение охватывает теорию алгоритмов, логику, теорию графов, теорию игр, лингвистику и некоторые другие разделы.

Прикладной уровень:

· информационные процессы, кодирование данных, форматы данных, сжатие данных, структуры данных и некоторые другие разделы.

· аппаратное обеспечение охватывает синтез цифровых устройств, архитектуру средств техники, аппараты и приборы вычислительных систем.

· аппараты и приборы компьютерных сетей. Программное обеспечение охватывает интерфейсы.

· вспомогательные программы, системы программирования, прикладные программные продукты.

 

 

Основные понятия программного обеспечения

Программное обеспечение - это совокупность программных средств и документации для создания и использования систем обработки данных компьютером.

Программное обеспечение принято делить на следующие группы:

· Базовое и системное ПО – совокупность программных средств, обеспечивающих работу компьютера.

· Инструментальное ПО - набор средств для создания нового ПО.

· Прикладное ПО – совокупность программных средств, обеспечивающих преобразование данных в соответствии с условиями конкретной проблемы.

Методология ОПП

Это подход, в котором структура системы описывается в терминах объектов и связей между ними. А поведение системы описывается в терминах обмена сообщений между объектами. Под объектом понимают некоторую сущность, которая обладает собственными свойствами и поведением. Для этого объект имеет собственные элементы для хранения данных и набор подпрограмм, которые обеспечивают работу элементов со всем объектом или с другими объектами.

Элементы, хранящие данные, во многих языках называются полями, а подпрограммы – методами. Кроме того, во многих языках (но не во всех) объект описывается особым типом, называемым классом. В некоторых языках этот тип называется object. Единицей разработки в объектно-ориентированной методологии является тип описывающий объект. В нашем случае, классом. Единицей разработки в объектно-ориентированном программировании считается класс. Классы определяют возможности и поведение объектов.

Во многих языках код класса трактуется как объект значения, адрес которого связывается с именем класса. Поскольку класс – это тип, то с его помощью можно создавать именованные объекты. Следовательно, существует принципиальная возможность работать с именованным объектом и объектом значения класса. Во многих случаях при описании класса разрешается указывать режим доступа.

Взаимодействие задач данной методологии осуществляется при помощи обмена сообщениями между объектами, реализующими рассматриваемые задачи. В настоящее время используется множество языков программ, которые дают возможность описывать классы и определять объекты этих классов. Множество этих языков можно разбить на три группы:

1) Чистые языки

Такие языки исходно создаются по методологии ООП. То есть в них все описывается классами. Эти языки обычно содержат собственные библиотеки и набор средств поддержки периода выполнения. К этому множеству относятся, например, языки Simula, Smalltalk, Bets, Self, Cecil. (Все объекты там – классы, double - это класс)

2) Гибридные языки

Эти языки появились в результате внедрения объектно-ориентированных конструкций в популярные императивные языки. К множеству этих языков относятся: С++ и Delphi. Эти языки имеют набор средств императивной разработки и набор для реализации ООП подхода.

3) Модифицированные языки

Эти языки появились в результате удаления из гибридных языков наиболее опасных и ненужных с объектно-ориентированной точки зрения конструкций. Например, Java, C#Б, Visual Basic.

Языки программирования

Предназначены для кодирования алгоритмов.

В настоящее время различают 6 поколений этих языков. При рассмотрении поколений нужно учитывать, что каждое последующее по своей функциональной мощности качественно отличается от предыдущего.

Описание поколений:

Номер поколения Группа языков Период появления
1. Машинные языки Середина 40-ых годов
2. Языки Ассемблеров (при этом начальные версии языка Fortran можно трактовать как язык Ассемблера высокого уровня) Конец 50-ых годов
3. Процедурные языки Начало 60-ых годов 20 столетия (это этап появления улучшенной версии Fortran и языка Algol-60)
4. Языки поддержки сложных структур данных Конец 60-ых годов (это эпоха языка ПЛ/1, Fortran 4, SQL и многих других)
5. Языки искусственного интеллекта Начало 70-ых годов (Prolog – родоначальник)
6. Языки нейронных сетей Начало разработки в мире – середина 80-ых годов. В России научная школа теории нейронных сетей зародилась в конце 60-ых годов

 

Языки программирования

  Процедурные                   Объектно-ориентированные                 Декларативные

Конспект по информатике, 12 сентября

 


Поделиться:



Последнее изменение этой страницы: 2019-05-04; Просмотров: 220; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.057 с.)
Главная | Случайная страница | Обратная связь