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

Название конкурса: Конкурс по информатике «Языки программирования»
Участник: Мельников Николай Анатольевич

Результат (баллов): 9 из 15

Затрачено времени: 6:09
Дата участия: 31.01.2022
Идентификатор результата: A502 332322

Ответы участника
Вопрос № 1. Компьютерная программа – это файл, созданный компьютером.

Выберите неверное утверждение:

Вопрос № 2. 2

Современные компьютеры используют в основном систему счисления с основанием …

Вопрос № 3. Основные элементы, из которых строится программа

Лексика языка программирования описывает …

Вопрос № 4. Смысл правильных конструкций языка программирования

Синтаксис языка программирования описывает …

Вопрос № 5. 2 поколения

Языки ассемблера относятся к языкам …

Вопрос № 6. 3 поколение

К какому поколению относятся языки логического программирования?

Вопрос № 7. Текст программы на языке высокого уровня интерпретируется специальной программой.

Выберите неверное утверждение:

Вопрос № 8. Скомпилированная программа выполняется быстрее, чем интерпретируемая

В чём основное преимущество компиляции?

Вопрос № 9. Интерпретатором

Для перевода программы с языка программирования высокого уровня в машинные коды используется специальная программа, называемая …

Вопрос № 10. Логическое программирование

Эта парадигма программирования противопоставляется императивному подходу. В программе описывается предметная область и что нужно найти.

Вопрос № 11. Декларативного программирования

Программа состоит из инструкций, которые выполняются последовательно. Это характерно для …

Вопрос № 12. Prolog

Выберите из перечисленных язык логического программирования:

Вопрос № 13. SQL

Выберите из перечисленных язык декларативного программирования:

Вопрос № 14. Компиляция

Какой тип исполнения преимущественно характерен для языка программирования Pascal?

Вопрос № 15. Интерпретация

Какой тип исполнения преимущественно характерен для языка программирования Python?

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

Оглавление

Введение

  1. Что такое язык программирования?
  2. Для чего нужны языки программирования?
  3. Виды-основная классификация
  4. Языки программирования низкого уровня
  5. Языки программирования высокого уровня
  6. О непроцедурных языках
  7. Декларативные языки
  8. Объектно-ориентированные языки

Заключение
Список литературы

Введение

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

Что такое язык программирования?

Язык программирования — формальная знаковая система, предназначенная для описания алгоритмов в форме, которая удобна для исполнителя (например, компьютера). Язык программирования определяет набор лексических, синтаксических и семантических правил, используемых при составлении компьютерной программы. Он позволяет программисту точно определить то, на какие события будет реагировать компьютер, как будут храниться и передаваться данные, а также какие именно действия следует выполнять над этими при различных обстоятельствах.

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

Создатели языков по-разному толкуют понятие язык программирования. Среди принципов назначения, признаваемых большинством разработчиков, находятся следующие:

Функция: язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствами.

Задача: язык программирования отличается от естественных языков тем, что предназначен для передачи команд и данных от человека компьютеру, в то время как естественные языки используются лишь для общения людей между собой. В принципе, можно обобщить определение «языков программирования» — это способ передачи команд, приказов, чёткого руководства к действию; тогда как человеческие языки служат также для обмена информацией.

Исполнение: язык программирования может использовать специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений.

Для чего нужны языки программирования?

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

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

Гораздо проще написать программу на каком-нибудь языке, более близком к естественному человеческому языку, а работу по переводу этой программы в машинные коды поручить компьютеру. Так возникли языки, предназначенные специально для написания программ, — языки программирования.

Виды – основная классификация

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

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

Общепринятые случаи позволяют разбить все programming languages на два больших раздела:
процедурные;
непроцедурные.

О процедурных языках

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

Данные, которые были получены в результате первых подсчетов, могут храниться и извлекаться из памяти в любое время и быть использованы.
Даже используемый синтаксис в таких языках является в некотором роде императивным – команды для выполнения похожи на приказы в обычной человеческой речи. Также важное место в процедурном программировании занимает использование подпрограмм, активное применение оператора присваивания, а также наличие составных выражений.

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

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

  • низкого уровня (машинно-ориентированные);
  • высокого уровня.

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

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

К языкам низкого уровня относится:

  • программирование в машинных кодах;
  • ассемблер;
  • макроассемблер.

Языки низкого уровня ориентировались на определенный тип процессора и учитывали его особенности, поэтому для того, чтобы перенести программу, написанную на ассемблере, на другую аппаратную платформу её нужно было почти полностью переписать. Различия присутствовали также и в синтаксисе программ под разные компиляторы.

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

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

В 1970-е годы разработчики создали первый высокоуровневый язык, многим известный Fortran, который используется и сейчас — в основном в научных разработках и вычислениях. В третьем и четвертом поколениях оформилось структурное программирование и появились функциональные языки: это, например, C, Pascal, Lisp, Scala, Erlang, F#, Haskell и другие.

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

Важно: для реализации поставленной задачи принято задействовать утилиты под названием «трансляторы».Часто такой язык помогает выбрать правильный метод решения задачи.
Перед тем как писать программу на языке высокого уровня, программист должен составить алгоритм решения задачи, то есть пошаговый план действий, который нужно выполнить для решения этой задачи. Поэтому языки, требующие предварительного составления алгоритма, часто называют алгоритмическими языками.

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

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

Языки высокого уровня делятся:

  • универсальные
  • проблемно-ориентированные.

Наиболее распространенные универсальные языки C#, C++, Basic, Pascal (Delphi) используются для разработки Windows-приложений. Большой вклад в программирование на начальных этапах внесли языки Fortran, Cobol, Algol, C и др.
Языки программирования для разработки Интернет-приложений скорее относятся к универсальным языкам. К ним относятся современные версии C#, Basic, J#.

Проблемно-ориентированными языками, которые используются на Интернет-серверах и клиентских Интернет-приложениях, являются PHP, Perl, JavaScript, VBScript.

Объектно-ориентированные языки стали дальнейшим уровнем развития процедурных языков, основной концепцией которых есть совокупность программных объектов. Написание программы на языке представляется в виде последовательности создания экземпляров объектов и использование их методов. К ним относятся из первых языков Simula и SmallTalk, далее C++, Java.

О непроцедурных языках

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

Для достижений этой цели применяются специальные переводчики-трансляторы. Их задача состоит либо в выполнении заданного программой действия, либо в преобразовании ее в файлы с данными в бинарной системе, которые уже выполняются компьютером по чётко обозначенному алгоритму. Такой тип кодирования не подразумевает составления программистом четкой пошаговой инструкции и считается более ориентированным на человека, так как он интуитивно более понятен и удобен.

Декларативные языки

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

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

Первым языком логического программирования был язык Planner. В этом языке была заложена возможность автоматического вывода (получения) результата из данных и заданных правил путем перебора вариантов (совокупность которых называлась планом). Но самым известным языком логического программирования является ПРОЛОГ (Prolog).

В отличие от программ, составленных на языках процедурного типа, предписывающих последовательность шагов, которые должен выполнять компьютер для решения задачи, на ПРОЛОГе программист описывает факты, правила, отношения между ними, а также запросы по проблеме.Программа на языке ПРОЛОГ содержит две составные части: факты и правила. Факты представляют собой данные, с которыми оперирует программа, а совокупность фактов составляет базу данных ПРОЛОГа.

Основная операция, выполняемая над данными, — это операция сопоставления, называемая также операцией унификации или согласования. Правила состоят из заголовка и подцелей. Выполнение программы, написанной на ПРОЛОГе, начинается с запроса и состоит в доказательстве истинности некоторого логического утверждения в рамках заданной совокупности фактов и правил. Алгоритм этого доказательства (алгоритм логического вывода) и определяет принципы исполнения программы, написанной на ПРОЛОГе.

На сегодняшний день существует целый класс логических языков; так, от языка Planner также произошли логические языки программирования QA-4, Popler, Conniver и QLISP. Языки программирования Mercury, Visual Prolog, Oz и Fril произошли уже от языка Prolog.
Первым языком функционального типа является язык ЛИСП. ЛИСП определяется как язык программирования функционального типа, в основу которого положен метод Х-исчисления.

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

Атомы — это символы, используемые для идентификации объектов, которые могут быть числовыми и символьными (понятия, материалы, люди и т.д.). Список — это последовательность из нуля или более элементов, заключенных в круглые скобки, каждый из которых является либо атомом, либо списком. Над списками выполняются три примитивные операции: извлечение первого элемента списка; получение оставшейся части списка после удаления первого элемента; объединение первого элемента списка L и оставшейся части списка Q.Тексты программ на функциональных языках программирования только описывают способ решения задачи, но не предписывают последовательность действий для решения.В качестве основных свойств функциональных языков программирования обычно рассматриваются следующие: краткость и простота; строгая типизация; модульность; функции — объекты вычисления; чистота (отсутствие побочных эффектов); отложенные (ленивые) вычисления.
Кроме ЛИСПа, к функциональным языкам относят РЕФАЛ (разработан в середине 60-х годов В.Ф. Турчиным в МГУ им. М.В. Ломоносова), Haskell, Clean, ML, OCaml, F#.

Объектно-ориентированные языки

Объектно-ориентированные языки — это языки, в которых понятия процедуры и данных, используемых в обычных системах программирования, заменены понятием «объект».
Первый объектно-ориентированный язык Simula -67 был создан как средство моделирования работы различных приборов и механизмов. Большинство современных языков программирования – объектно-ориентированные. Среди них последние версии языка Turbo — Pascal , C ++, Ada и другие.

В настоящее время широко используются системы визуального программирования Visual Basic , Visual C ++, Delphi и другие. Они позволяют создавать сложные прикладные пакеты, обладающие простым и удобным пользовательским интерфейсом.

Языком объектно-ориентированного программирования в чистом виде считается SmallTalk, возможности объектно-ориентированного программирования заложены также в Java, C++, Delphi.
Объектно-ориентированное программирование или сокращённо называемое ООП — это подход, который помогает разрабатывать сложные приложения так, чтобы их можно было в течение длительного времени легко поддерживать и масштабировать.

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

Объектно-ориентированное программирование имеет несколько преимуществ перед процедурным программированием:
ООП быстрее и проще в исполнении — позволяет мыслить категориями повседневных объектов, такие реальные понятия как Person, Car или Animal рассматриваются как объекты. Это во многом упрощает задачу, когда вы только начинаете проектировать свое приложение, так как назначение каждого объекта, так и цель отношений между объектами, будут логически понятны.

Легче писать модульные программы — ООП предполагает написание модулей. Модульность упрощает обслуживание, изменение и отладку кода. Модульная структура позволяет вносить независимые изменения в разные части программы, сводя к минимуму риск ошибок программирования.
ООП позволяет создавать полностью повторно используемые приложения с меньшим количеством кода и более коротким временем разработки.

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

Заключение

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

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

Мир IT огромен, и потому в нем столько языков. Новичок может выбрать актуальный в той сфере, которая ему близка и интересна.
Например, для анализа данных применяются Python и R, «короли» веб-разработки — PHP и JavaScript, работа в банковских системах и госструктурах не обойдется без Java, ААА-игры создаются на C++ и C# и так далее.

Наиболее перспективные сферы разработки программного обеспечения:

  • искусственный интеллект;
  • «интернет вещей» и встраиваемые системы;
  • Data Science;
  • мобильные приложения;
  • блокчейн.

Десять самых популярных языков:

  • C++.
  • Python.
  • Visual Basic.
  • PHP.
  • Delphi.
  • Java.
  • JavaScript.
  • Ruby.
  • ActionScript.
  • Nemerle.

У каждого из них есть свои характерные особенности, недостатки и преимущества.

Список используемых источников

  1. Босова Л.Л., Информатика: учебник для 8 класса / Л.Л. Босова, А.Ю. Босова. — М. : БИНОМ. Лаборатория знаний, 2014. — 160с
  2. Босова Л.Л., Информатика: учебник для 9 класса / Л.Л. Босова, А.Ю. Босова. — М. : БИНОМ. Лаборатория знаний, 2017. — 160с
  3. Интернет-страница: https://ru.wikipedia.org
  4. Языки программирования и их классификация
  5. Патрикеев Ю. Н. «Объектно-ориентированное проектирование»
  6. Х.М. Дейтел. Как программировать на С. – М.: «Бином», 2000 г.

Если страница Вам понравилась, поделитесь в социальных сетях:

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

Базовые понятия Программа состоит из последовательности инструкций, оформленных в строгом соответствии с правилами, составляющими синтаксис данного языка. При создании программ могут быть допущены синтаксические или логические ошибки. Синтаксические ошибки – это нарушение правил написания программы. Логические ошибки разделяются на ошибки алгоритма и семантические ошибки. Ошибка алгоритма – это несоответствие построенного алгоритма ходу получения результата поставленной задачи. Семантическая ошибка – неправильное понимание смысла (семантики) операторов выбранного языка программирования.

Алфавит языка Си: – прописные и строчные буквы латинского алфавита и знак подчеркивания (код

Алфавит языка Си: – прописные и строчные буквы латинского алфавита и знак подчеркивания (код 95); – арабские цифры от 0 до 9; – специальные символы, смысл и правила использования которых будем рассматривать по тексту; – разделительные символы: пробел, символы табуляции, новой страницы и новой строки. Каждому из множества значений, определяемых одним байтом, в таблице кодов ставится в соответствие символ. Символы с кодами от 0 до 127 (первая половина таблицы) одинаковы для всех компьютеров, коды 128 – 255 (вторая половина) могут отличаться и обычно используются для национального алфавита, коды 176 – 223 символы псевдографики, а коды 240 – 255 – специальные знаки (можно посмотреть в приложении 1 [1, 2]).

Лексемы Из символов алфавита формируются лексемы (элементарные конструкции) языка – минимальные значимые единицы текста

Лексемы Из символов алфавита формируются лексемы (элементарные конструкции) языка – минимальные значимые единицы текста в программе: – идентификаторы (имена объектов); – ключевые (зарезервированные) слова; – знаки операций; – константы; – разделители (скобки, точка, запятая, точка с запятой, пробельные символы). Границы лексем определяются другими лексемами, такими как разделители или знаки операций, а также комментариями.

Идентификатор (ID) – это имя программного объекта (константы, переменной, метки, типа, функции и т.

Идентификатор (ID) – это имя программного объекта (константы, переменной, метки, типа, функции и т. д. ). В идентификаторе могут использоваться латинские буквы, цифры и знак подчеркивания; первый символ ID – не цифра; пробелы и другие специальные символы внутри ID не допускаются. В Си прописные и строчные буквы – различные символы. Идентификаторы Name, NAME, name – различные объекты. Ключевые (зарезервированные) слова не могут быть использованы в качестве идентификаторов.

При именовании объектов следует придерживаться общепринятых соглашений: – имена переменных и функций обычно пишутся

При именовании объектов следует придерживаться общепринятых соглашений: – имена переменных и функций обычно пишутся строчными (малыми) буквами; – имена типов пишутся с большой буквы; – имена констант – большими буквами; – идентификатор должен нести смысл, поясняющий назначение объекта в программе, например, birth_date – день рождения, sum – сумма; – если ID состоит из нескольких слов, как, например, birth_date, то принято либо разделять слова символом подчеркивания, либо писать каждое следующее слово с большой буквы – Birth. Date.

Комментарии Базовый элемент языка программирования – комментарий – не является лексемой. Внутри комментария можно

Комментарии Базовый элемент языка программирования – комментарий – не является лексемой. Внутри комментария можно использовать любые допустимые на данном компьютере символы, т. к. компилятор их игнорирует. В Си комментарии ограничиваются парами символов /* и */, а в С++ введен вариант комментария, который начинается символами // и заканчивается символом перехода на новую строку.

Общая структура программы на языке Си 1. Директивы препроцессора 2. Определение типов пользователя (typedef)

Общая структура программы на языке Си 1. Директивы препроцессора 2. Определение типов пользователя (typedef) 3. Описание прототипов функций 4. Определение глобальных переменных 5. Функции

Простейшая программа Рассмотрим кратко основные части структуры программ. Перед компиляцией программа обрабатывается препроцессором, который

Простейшая программа Рассмотрим кратко основные части структуры программ. Перед компиляцией программа обрабатывается препроцессором, который работает под управлением директив. Препроцессорные директивы начинаются символом #, за которым следует ее наименование, указывающее выполняемое действие. Препроцессор выполняет предварительную обработку программы, в основном это подключение (include) так называемых заголовочных файлов (обычных текстов) с объявлением стандартных библиотечных функций, использующихся в этой программе. Общий формат: #include < Имя_файла. h > где h – расширение заголовочных файлов.

Если имя файла заключено в угловые скобки (< >), то поиск данного файла производится

Если имя файла заключено в угловые скобки (< >), то поиск данного файла производится в стандартной папке, если в двойные кавычки (” ”), то в текущей папке. К наиболее часто используемым библиотекам относятся: stdio. h – содержит стандартные функции ввода вывода данных; conio. h – функции для работы с консолью (клавиатура, дисплей); math. h – математические функции; iostream. h – ввод вывод в потоке;

Второе основное назначение препроцессора – обработка макро определений. Макроподстановка определить (define) имеет общий вид:

Второе основное назначение препроцессора – обработка макро определений. Макроподстановка определить (define) имеет общий вид: #define ID строка Например: #define PI 3. 1415927 – в ходе препроцессорной обработки программы идентификатор PI везде будет заменяться значением 3. 1415927.

Пример простейшей программы: #include <stdio. h> void main(void) // Заголовок функции { // Начало

Пример простейшей программы: #include void main(void) // Заголовок функции { // Начало функции printf (“ Высшая оценка знаний – 10 ! ”); } // Конец функции Отличительный признак функции – скобки ( ) после ее имени, в которых заключается список параметров. Если параметров нет, указывают атрибут void (пустой, отсутствующий). Перед функцией указывается тип возвращаемого результата, если результата нет – void. В фигурных скобках записывается текст (код) функции, т. е. набор выполняемых ею инструкций, каждая из которых оканчивается символом «; » . В нашем примере только функция printf – вывод указанной фразы на экран.

В предыдущем примере для вывода использована стандартная функция printf, описанная в файле stdio. h.

В предыдущем примере для вывода использована стандартная функция printf, описанная в файле stdio. h. Используя потоковый вывод, этот пример можно записать следующим образом: #include void main () { cout << “ 10 is the best mark ! ” << endl; } Если параметров нет, атрибут void можно не писать. cout (class output) – вывод данных в потоке с помощью операции побитового сдвига <<; endl (end line) – перевод курсора на новую строку.

Типы данных Данные в языке Си разделяются на две категории: простые (скалярные) и сложные

Типы данных Данные в языке Си разделяются на две категории: простые (скалярные) и сложные (составные) типы данных. Тип данных определяет: – внутреннее представление в памяти; – диапазон допустимых значений; – набор допустимых операций. Базовые типы данных: символьный – char (character), целый – int (integer), вещественный обычной точности – float, вещественный удвоенной точности – double.

Данные целого типа могут быть короткими – short, длинными – long, со знаком –

Данные целого типа могут быть короткими – short, длинными – long, со знаком – signed и беззнаковыми – unsigned. Атрибут unsigned может использоваться для типа char. Атрибут long может использоваться для типа double. Тип void указывает его отсутствие. Сложные типы данных: массивы, структуры – struct, объединения – union, перечисления – enum.

Диапазон и объем памяти данных Тип Объем памяти (байт) char 1 int 4 –

Диапазон и объем памяти данных Тип Объем памяти (байт) char 1 int 4 – 32768 … 32767 short (int) 2 – 32768 … 32767 long (int) 4 – 2147483648 … 2147483647 unsigned int 4 0 … 65535 unsigned long 4 0 … 4294967295 float 4 3, 14*10– 38 … 3, 14*1038 double 8 1, 7 *10– 308 … 1, 7 *10308 Диапазон значений – 128 … 127

Декларация объектов Все объекты программы (кроме самоопре деленных констант) необходимо декларировать, т. е. объявить

Декларация объектов Все объекты программы (кроме самоопре деленных констант) необходимо декларировать, т. е. объявить компилятору об их присутствии. Общий формат объявления: Атрибуты Список-Объектов; Элементы Списка разделяются запятыми, а Атрибуты – разделителями (хотя бы одним пробелом), например: long int i, j, k;

Атрибуты могут быть следующими: Класс памяти – определяет способ размещения в памяти (статическая, динамическая),

Атрибуты могут быть следующими: Класс памяти – определяет способ размещения в памяти (статическая, динамическая), область видимости и время жизни (по умолчанию – auto), данные атрибуты будут рассмотрены позже; Тип – базовый тип, или созданный ранее тип Пользователя (по умолчанию – тип int). Класс памяти и тип – атрибуты необязательные и при отсутствии одного из них (но не обеих одновременно) устанавливаются по умолчанию. Примеры декларации простых объектов: char ss; int i, j, k; double a, b, x;

Данные целого типа (integer) Тип int – целое число, обычно соответствующее естественному размеру целых

Данные целого типа (integer) Тип int – целое число, обычно соответствующее естественному размеру целых чисел. Квалификаторы short и long указывают на различные размеры и определяют объем памяти, выделяемый под них, например: short x; long x; unsigned x = 8; – декларация с инициализацией числом 8; атрибут int в этих случаях может быть опущен.

Для определения константных значений можно использовать атрибут const, указывающий запрет изменения введенной величины в

Для определения константных значений можно использовать атрибут const, указывающий запрет изменения введенной величины в программе, например const N = 20; или const double PI = 3. 1415926; Атрибуты signed и unsigned показывают, как интерпре тируется старший бит – как знак или как часть числа: int Знак unsigned Значение числа 31 30 29 . . . 2 1 0 Значение числа 31 30. . . 2 1 0 – Номера бит

Данные символьного типа (char) Любой символ в памяти занимает соответствует конкретному коду. один байт

Данные символьного типа (char) Любой символ в памяти занимает соответствует конкретному коду. один байт и Для персональных компьютеров (ПК) наиболее распространена ASCII (American Standard Code for Information Interchenge) таблица кодов (см. Приложение 1). Данные типа char рассматриваются компилятором как целые, поэтому можно использовать величины со знаком signed char (по умолчанию) – символы с кодами от – 128 до +127 и unsigned char – беззнаковые символы с кодами от 0 до 255. Примеры: char res, simv 1, simv 2; char sim = ‘s’; – декларация символьной переменной с инициализацией символом s.

Данные вещественного типа (float, double) Характеристика данных: Тип float Мантисса Порядок (4 байта) 7

Данные вещественного типа (float, double) Характеристика данных: Тип float Мантисса Порядок (4 байта) 7 цифр после запятой 38 15 308 19 4932 double (8 байт) long double (10 байт) Переменная типа double формально соответствует типу long float. Внутреннее представление этих данных состоит из мантиссы и порядка, т. е. < Мантисса > * 10 < Порядок >

КОНСТАНТЫ Константами называют величины, которые не изменяют значений во время выполнения программы. Константа –

КОНСТАНТЫ Константами называют величины, которые не изменяют значений во время выполнения программы. Константа – это неадресуемая величина и, хотя она хранится в памяти, определить ее адрес невозможно! Константы нельзя использовать в левой части операции присваивания. В языке Си константами являются: – самоопределенные константы; – имена (идентификаторы) массивов и функций; – элементы перечислений.

Целочисленные константы Десятичные константы – это набор цифр 0. . . 9, первая из

Целочисленные константы Десятичные константы – это набор цифр 0. . . 9, первая из которых не 0 (со знаком или без него). Для длинных целых констант указывается признак L(l) – 273 L (273 l). Константа, которая слишком длинна для типа int, рассматривается как long. Восьмеричные константы – это набор цифр от 0 до 7, первая из которых 0, например: 020 = 16 – десятичное. Шестнадцатеричные константы – набор цифр от 0 до 9 и букв от A до F (a. . . f), начинающаяся символами 0 Х (0 х), например: 0 X 1 F (0 х1 f) = 31 – десятичное. Восьмеричные и шестнадцатеричные константы также могут быть long, например, 020 L или 0 X 20 L. Примеры целочисленных констант: 1992 777 1000 L – десятичные; 0777 00033 01 L – восьмеричные; 0 x 123 0 X 00 ff 0 xb 8000 L – шестнадцатеричные.

Константы вещественного типа Данные константы размещаются в памяти по формату double и могут иметь

Константы вещественного типа Данные константы размещаются в памяти по формату double и могут иметь две формы: 1) с фиксированной точкой: n. m (n, m – целая и дробная части числа); 2) с плавающей точкой (экспоненциальная форма) представляется в виде мантиссы и порядка: n. m. E p где n. m – мантисса (n, m – целая и дробная части числа), Е (или е) – знак экспоненты, р – порядок. Например, 1, 25 10– 8 можно записать 1. 25 E– 8 или 0. 125 E– 7 Примеры: 1. 0 – 3. 125 100 Е– 10 – 0. 12537 е+5 Пробелы внутри чисел не допускаются. Для разделения целой и дробной части используется точка. Дробную или целую часть можно опустить, но не обе сразу, например, 1. (или 1. 0). 5 (или 0. 5)

Символьные константы Символьная константа – это символ, заключенный в одинарные кавычки (апострофы), например: 'а'.

Символьные константы Символьная константа – это символ, заключенный в одинарные кавычки (апострофы), например: ‘а’. Так же используются специальные управляющие симво лы (escape последовательности), например (первый символ обратный слеш): n – новая строка; t – горизонтальная табуляция; – нулевой символ. При присваивании символьной переменной они должны быть заключены в апострофы. Текстовые символы непосредственно вводятся с клави атуры, а специальные и управляющие – представляются в исходном тексте парами символов, например: – обратный слеш; ‘ – апостроф; » – кавычки. Примеры символьных констант: ‘А’ ‘9’ ‘$’ ‘n’

Строковые константы Строковая константа – символы, заключенные в кавычки (”). Кавычки не являются частью

Строковые константы Строковая константа – символы, заключенные в кавычки (”). Кавычки не являются частью строки, а служат только для ее ограничения. Строка в языке Си представляет собой массив символов. Внутреннее представление константы «1234 ABC»: ‘1’ ‘2’ ‘3’ ‘4’ ‘A’ ‘B’ ‘C’ » В конец строковой константы компилятор автоматически добавляет нулевой символ », называемый нуль-терминатор, который на печать не выводится и является признаком окончания строки. Примеры строковых констант: «Summa» «n t Result = n» » » EXIT » » Длинную строковую константу можно разбить на несколько с помощью обратного слеша (). Например: «Вы учитесь в Белорусском государственном университете информатики и радиоэлектроники» Компилятор воспримет такую запись, как единое целое.

Операции, выражения Выражения используются для вычисления значений определенного типа и состоят из операндов, операций

Операции, выражения Выражения используются для вычисления значений определенного типа и состоят из операндов, операций и скобок. Операнд может быть, в свою очередь, выражением (константой или переменной). Операции выполнить. задают действия, которые необходимо В языке Си используются четыре первичных операции: – операция доступа к полям структур и объединений при помощи идентификаторов «. » (точка); – операция доступа к полям структур и объединений при помощи указателей «->» (стрелка); – операция индексации «[ ]» при обращении к элементам массива; – операция «( )» при обращении к функции.

Операции делятся на унарные, бинарные и тернарные – по количеству участвующих операндов, и выполняются

Операции делятся на унарные, бинарные и тернарные – по количеству участвующих операндов, и выполняются в соответствии с приоритетами. Для изменения порядка выполнения операций используются круглые скобки. Унарные операции имеют больший приоритет над бинарными. Большинство операций выполняются слева направо. Унарные операции, операции присваивания и условная операция (? : ) выполняются справа налево. Арифметические операции Бинарные арифметические операции: + (сложение); – (вычитание); / (деление, для int операндов – с отбрасыванием остатка); * (умножение); % (остаток от деления целочисленных операндов со знаком первого операнда – деление «по модулю» ).

Операндами традиционных арифметических опера ций (+, –, *, /) могут быть любые объекты, имеющие

Операндами традиционных арифметических опера ций (+, –, *, /) могут быть любые объекты, имеющие допустимые типы (константы, переменные, функции, элементы массивов, арифметические выражения). Унарные операции +, – (знак) определены только для числовых операндов, при этом «+» носит только информационный характер, «–» меняет знак операнда на противоположный (не адресная операция). Порядок выполнения операций: 1) выражения в круглых скобках; 2) вычисление функций (стандартные функции и функции пользователя); 3) операции * , / , %; 4) операции – , +.

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

При записи сложных выражений нужно использовать общепринятые математические правила: Т. е. использовать круглые скобки. Единственной исключительной ситуацией при выполнении арифметических операций является деление на ноль, другие ситуации (переполнение, исчезновение порядка или потеря значимости) компилятором игнорируются.

Операция присваивания Общий формат: Операнд_1 = Операнд_2 ; Операндом_1 (L–значение – Left-Value) может быть

Операция присваивания Общий формат: Операнд_1 = Операнд_2 ; Операндом_1 (L–значение – Left-Value) может быть только адресное выражение, т. е. именованная, либо косвенно адресуемая указателем переменная. Операндом_2 (R–значение – Right-Value) может быть константа, переменная и любое выражение, составленное в соответствии с синтаксисом языка Си. Операция выполняется справа налево. Тип результата определяется типом левого операнда. Приведите примеры «хитрых» ситуаций!

Присваивание значения в языке Cи рассматривается как выражение, имеющее значение левого операнда после присваивания.

Присваивание значения в языке Cи рассматривается как выражение, имеющее значение левого операнда после присваивания. Поэтому присваивание может включать несколько операций, изменяя значения нескольких операндов, например: i = j = k = 0; k = 0, j = k, i = j; x = i + (y = 3) – (z = 0); y = 3, z = 0, x = i + y – z; Примеры недопустимых выражений: – присваивание константе: 2 = x + y; – присваивание функции: getch() = i; – присваивание результату операции: (i + 1) = 2 + y;

Сокращенные формы операции присваивания В языке Си используются два вида сокращенной записи операции присваивания:

Сокращенные формы операции присваивания В языке Си используются два вида сокращенной записи операции присваивания: 1) вместо записи v = v # e; где # – любая арифметическая операция; рекомендуется использовать запись v #= e; Например, s = s + 2; s += 2; знаки операций записываются без пробелов; 2) вместо записи x = x # 1; где # – символы, обозначающие операцию инкремента (+1), либо декремента (– 1), рекомендуется использовать запись: префиксную ##x; ++х; х; x##; х++; х ; или постфиксную

Операции инкремента (++) и декремента ( ) – унарные. Если эти операции используются отдельно,

Операции инкремента (++) и декремента ( ) – унарные. Если эти операции используются отдельно, то различий между постфиксной и префиксной формами нет. Если же они используются в выражении, то 1) в префиксной форме (##x) сначала значение x изменится на 1, а затем x будет использовано в выражении; 2) в постфиксной форме (x##) сначала значение x используется в выражении, а затем изменяется на 1. Например, int x, a = 2, b = 5; 1) x = ++a * b; a = 3, b = 4, x = 12; 2) x = a++ * b ; x = 10, a = 3, b = 4;

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

Преобразование типов Если операнды арифметических операций имеют один тип, то результат операции будет иметь такой же тип. Если в операциях участвуют операнды различных типов, то они преобразуются к «большему» типу (в смысле объема памяти), т. е. неявные преобразования идут от «меньших» объектов к «большим» : – значения char и short преобразуются в int; – если один операнд double, то и другой преобразуется в double; – если один операнд long, то и другой преобразуется в long. Внимание! Результат операции 1 / 3 значение НОЛЬ, т. к. и 1 и 3 имеют тип int !!! Чтобы избежать такого рода ошибок необходимо явно изменить тип хотя бы одного операнда, т. е. записывать, например: 1. / 3, т. к. 1. вещественная константа !!!

Типы char и int могут свободно смешиваться в арифметических выражениях. Переменные char автоматически преобразуются

Типы char и int могут свободно смешиваться в арифметических выражениях. Переменные char автоматически преобразуются в int. При присваивании значение правой части преобразуется к типу левой, который и является типом результата. Поэтому необходимо быть внимательным, т. к. при некорректной записи могут возникнуть неконтролируемые ошибки. При преобразовании int в char старший байт просто отбрасывается. Если double x; int i;

Операция явного приведения типа Формат операции: (Тип) Выражение; ее результат – значение Выражения, преобразованное

Операция явного приведения типа Формат операции: (Тип) Выражение; ее результат – значение Выражения, преобразованное к заданному Типу. Рекомендуется использовать эту исключительных случаях, например: операцию double x; int n = 6, k = 4, m = 3; x = (n + k) / m; x = 3; x = (double)(n + k) / m; x = 3. 333333. в

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

Стандартные библиотечные файлы В любой программе кроме инструкций используются стандартные функции, входящие в библиотеку языка Си, которые облегчают создание программ. В стандартных библиотечных файлах описаны прототипы функций, макросы, глобальные константы. Это заголовочные файлы с расширением *. h, которые хранятся в папке include и подключаются на этапе предпроцессорной обработки. Математические функции языка Си декларированы в файле math. h (некоторые в stdlib. h). В файле math. h описаны макроконстанты, такие как, например , это M_PI (и другие). У большинства математических функций аргументы и возвращаемый результат имеют тип double. Аргументы тригонометрических функций должны быть заданы в радианах (2π радиан = 3600).

Математическая функция |x| ex xy ln(x) lg 10(x) sin(x) cos(x) tg(x) arcsin(x) arccos(x) arctg(x

Математическая функция |x| ex xy ln(x) lg 10(x) sin(x) cos(x) tg(x) arcsin(x) arccos(x) arctg(x / y) sh(x)=0. 5 (ex–e x) ch(x)=0. 5 (ex+e x) tgh(x) Остаток от деления x на y Наименьшее целое >=x Наибольшее целое <=x Имя функции sqrt(x) fabs(x) exp(x) pow(x, y) log(x) log 10(x) sin(x) cos(x) tan(x) asin(x) acos(x) atan 2(x, y) sinh(x) cosh(x) tanh(x) fmod(x, y) ceil(x) floor(x)

Из библиотеки conio. h при создании КОНСОЛЬНЫХ приложений мы будем пользоваться только функцией getch(

Из библиотеки conio. h при создании КОНСОЛЬНЫХ приложений мы будем пользоваться только функцией getch( ); Которая выполняет ожидание нажатия любой клавиши; ее результат – код нажатой клавиши.

Потоковый ввод-вывод Для ввода вывода в языке С++ используются два класса: cin (класс ввода),

Потоковый ввод-вывод Для ввода вывода в языке С++ используются два класса: cin (класс ввода), cout (класс вывода). Для их работы необходимо подключить файл iostream. h. Стандартный поток вывода cout по умолчанию связан со стандартным устройством вывода stdout (дисплей монитора), а ввода cin – со стандартным устройством ввода stdin (клавиатура). Вывод на экран (помещение в поток <<): cout << Имя-Объекта-Вывода; Ввод с клавиатуры (извлечение из потока >>): cin >> Имя-Переменной;

Пример: #include < iostream. h > void main () { int i, j, k;

Пример: #include < iostream. h > void main () { int i, j, k; cout << “ Input i, j ”; cin >> i >> j ; k=i+j; cout << “ Sum i + j = “ << k << endl; /* end line – переход на новую строку и очистка буферов ввода-вывода */ }

Функции вывода данных на дисплей Стандартные функции ввода/вывода описаны в файле stdio. h. Для

Функции вывода данных на дисплей Стандартные функции ввода/вывода описаны в файле stdio. h. Для вывода на экран чаще всего используются: printf и puts. Формат функции форматного вывода на экран: printf ( Управляющая Строка , Список Вывода ); В Управляющей записывают: Строке, заключенной в кавычки, − Поясняющий текст (комментарии); − Список модификаторов форматов, определяющих способ вывода объектов (признак – символ %); − Специальные управляющие символы.

В Списке Вывода указываются выводимые объекты: пере менные, константы, выражения (вычисляемые перед выводом). Количество

В Списке Вывода указываются выводимые объекты: пере менные, константы, выражения (вычисляемые перед выводом). Количество и порядок форматов должен совпадать с количеством и порядком следования печатаемых объектов. Так как функция printf выполняет вывод данных в соответствии с указанными форматами, формат может использоваться для преобразования типов выводимых объектов.

Если признака модификации (%) нет, то вся информация выводится как комментарии. Основные модификаторы формата:

Если признака модификации (%) нет, то вся информация выводится как комментарии. Основные модификаторы формата: %d – десятичное целое число (int); %c – один символ (char); %s – строка символов; %f – вещественное типа float; %ld – длинное целое (long int); %lf – вещественное типа double (long float).

Управляют выводом специальные последовательности символов: n – новая строка; t – горизонтальная табуляция; b

Управляют выводом специальные последовательности символов: n – новая строка; t – горизонтальная табуляция; b – шаг назад; r – возврат каретки; v – вертикальная табуляция; – обратная косая; ‘ – апостроф; » – кавычки; – нулевой символ (пусто).

В модификаторах формата функции printf после символа % можно указывать ширину поля вывода, например,

В модификаторах формата функции printf после символа % можно указывать ширину поля вывода, например, %5 d – для int, %8. 4 lf – для double (4 цифры после запятой для поля, шириной 8 символов). Если указанных позиций для вывода целой части числа не хватает, то происходит автоматическое расширение. Можно использовать функцию printf для нахождения кода ASCII некоторого символа: printf (» %c – %d n», ‘a’); Функция puts (Имя-Строки); выводит на экран строку, автоматически добавляя к ней символ перехода на начало новой строки (n). Аналогом такой функции будет: printf (“%s n”, Имя-Строки);

Функции ввода информации Форматированный ввод с клавиатуры: scanf (Управляющая Строка , Список Ввода); в

Функции ввода информации Форматированный ввод с клавиатуры: scanf (Управляющая Строка , Список Ввода); в Управляющей строке указываются только модификаторы форматов, количество и порядок которых должны совпадать с количеством и порядком вводимых объектов, тип преобразуется в соответствии с модификаторами. Список Ввода – адреса переменных (через запятую), т. е. для ввода перед именем переменной указывается символ & – операция «взять адрес» . Если вводим значение строковой переменной, то символ & не используем, т. к. строка – это массив символов, а имя массива – это адрес его первого элемента. Например: int kypc; // Курс double grant; // Стипендия char name[20]; // Фамилия printf (» Input kypc, grant, name n «); scanf («%d%lf%s», &kypc, &grant, name);

Вводить данные с клавиатуры можно как в строку, разделяя данные хотя бы одним пробелом,

Вводить данные с клавиатуры можно как в строку, разделяя данные хотя бы одним пробелом, так и в столбец, нажимая после каждого значения клавишу Enter. В функции scanf используется тот же набор основных модификаторов форматов, что и printf. Внимание! Функцией scanf по формату %s строка вводится только до первого пробела. Для ввода фраз, состоящих из слов, разделенных пробелами, используется функция: gets (Имя-Строковой-Переменной); Символы вводятся при помощи функции getch(). Простой ее вызов организует задержку выполнения программы до нажатия любой клавиши.

Пример использования функции getch: char s; s = getch(); cout << “Character =

Пример использования функции getch: char s; s = getch(); cout << “Character = » << s << endl; cout << “Code = » << (int) s << endl; переменная s – символ нажатой клавиши, а (int)s – код этого символа. При запуске программы автоматически открываются стандартные потоки ввода – stdin (по умолчанию связан с клавиатурой) и вывода – stdout (экран монитора). Внимание! Ввод данных функциями gets, getch выпол няется с использованием потока stdin. Если указанная фу нкция не выполняет своих действий (проскакивает), перед ее использованием необходимо очистить поток (буфер) ввода с помощью функции (stdlib. h) fflush (stdin);

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

1.1.1 Последовательное и параллельное выполнение программ

1. Последовательное выполнение программы

Если шаги программы выполняются последовательно, а программа и программа выполняются последовательно, этот способ выполнения программы называется последовательным выполнением. Последовательное выполнение — это способ выполнения программы в одноканальной программной системе.
Последовательное выполнение программы имеет следующие характеристики:
(1) Последовательность: CPU выполняется строго в порядке, установленном программой, и только после завершения одной операции может быть выполнена следующая операция. Когда нужно запустить несколько программ, только после завершения выполнения одной программы
, чтобы начать.
(2) Закрытие: программа работает в закрытой среде, то есть при запуске программы она владеет исключительно всеми системными ресурсами. Только сама программа может изменить среду выполнения программы. Поэтому на выполнение программы не влияют внешние факторы.
Результат зависит только от самой программы.
(3) Воспроизводимость: результат выполнения программы не имеет никакого отношения ко времени и скорости выполнения, результат всегда воспроизводим, то есть тот же самый результат будет получен всякий раз, когда программа выполняется повторно.
Этот метод выполнения программы прост и легко отлаживается. Однако, поскольку программа последовательности монополизирует все системные ресурсы во время выполнения, коэффициент использования системных ресурсов очень низок. DOS-программы выполняются последовательно.

2. Параллельное выполнение программ

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

3. Потенциальные проблемы с параллельным выполнением

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

Концепция 1.1.2 процесса

1. Процесс

Процесс — это запуск программы, которая может выполняться одновременно с набором данных. Проще говоря, процесс — это запуск программы.
Понятия и корреляции между процессами и программами отличаются друг от друга. Программа является неотъемлемой частью процесса, который является текстом выполнения процесса, а процесс является исполнением программы. Для процесса программа — это набор статических инструкций, которые могут существовать вечно, а процесс — это объект динамического процесса, который динамически генерирует, развивается и исчезает.
Кроме того, между процессами и программами нет взаимно-однозначного отношения, как показано в:
(1) Процесс может последовательно выполнять несколько программ
(2) Программа может соответствовать нескольким программам. Каждый запуск программы соответствует отдельному процессу. Программа также может соответствовать нескольким процессам одновременно.

2. Характеристика процесса

(1) Динамический: процессы создаются с помощью «create», умирают с помощью «undo», запускаются из-за «планирования» и останавливаются из-за «ожидания». Весь процесс от создания до исчезновения называется жизненным циклом процесса.
(2) Параллелизм: в течение одного периода времени в системе активно несколько процессов. Они работают одновременно на макроуровне и попеременно на микроуровне.
(3) Независимость: процесс — это базовая единица, которая может работать независимо, и это базовый объект для операционной системы для распределения ресурсов и управления расписанием. Поэтому каждый процесс независимо имеет все необходимые ресурсы и независимо поддерживает работу ЦП.
(4) Асинхронность: каждый процесс выполняется независимо, и каждый продвигается с непредсказуемой скоростью. Координация между процессами является обязанностью операционной системы.

3. Основное состояние процесса

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

4. Переход состояния процесса

1.1.3 Блок управления процессом

Процесс состоит из трех основных частей: программа, данные и блок данных процесса. Программа — это исполняемый код, исполняемый процессом, данные — это объект, обрабатываемый процессом, а блок управления процессом используется для записи различной информации о процессе. Они существуют в памяти, и их содержание изменяется по мере выполнения. Содержимое выполнения (ссылаясь на код и данные) процесса в определенное время называется образом процесса. Образ процесса можно рассматривать как сценарий процесса, который определяет ход и поведение процесса. Блок управления процессом является архивом процесса. Каждый процесс в системе уникален. Даже если два процесса выполняют унифицированный образ, они оба имеют свои собственные блоки управления процессом и поэтому являются разными процессами.
Блок управления процессом (PCB) — это структура данных, установленная для управления процессом, которая используется для записи соответствующей информации о процессе. Когда процесс создается, система генерирует для него печатную плату, а когда процесс завершается, его печатная плата отзывается. Следовательно, PCB является представителем процесса, процесс существует, когда существует PCB, и процесс заканчивается, когда PCB исчезает. В течение жизненного цикла процесса система воспринимает процесс через печатную плату, понимает его деятельность и использует его для контроля и планирования процесса.
PCB записывает всю информацию о процессе, в основном, включая следующие 4 аспекта:
(1) Информация об описании процесса
используется для записи идентификационной информации и идентификационных характеристик процесса, таких как семейные отношения и отношения принадлежности. С помощью этой информации вы можете идентифицировать процесс, понять разрешения процесса и определить взаимосвязь между этим процессом и другими процессами. Система присваивает уникальное целое число каждому процессу в качестве идентификационного номера процесса PID, который является наиболее важной идентификационной информацией. Система идентифицирует каждый процесс по PID.
(2) Информация об управлении процессом и планировании
Процесс должен контролироваться и планироваться системой. Блок управления процессом записывает текущее состояние, политику планирования, приоритет и временной интервал процесса. Система реализует управление процессом и планирование на основе этой информации.
(3) Информация о ресурсе
Для запуска процесса требуются некоторые системные ресурсы. К необходимым ресурсам относятся адресное пространство процесса, файлы и устройства, к которым осуществляется доступ, и сигналы, подлежащие обработке. Процесс является основной единицей системного распределения ресурсов. Система записывает информацию о ресурсах, выделенную процессу, в печатную плату процесса. С помощью этой информации процесс может получить доступ к различным выделенным ресурсам.
(4) Информация о месте
Сцена процесса также называется контекстом процесса, который включает в себя значения различных регистров ЦП. Эти значения описывают текущее состояние и среду процесса. Процесс, выходящий из ЦП, должен сохранить эту информацию о поле, чтобы продолжить выполнение при следующем планировании. Когда процесс перепланирован для запуска, система использует информацию о поле на печатной плате процесса для восстановления узла ЦП. Как только сцена восстановлена, в следующем цикле команд ЦП продолжит выполнение точно в точке останова, где последний раз выполнялся процесс.

1.1.4 Процессы в Linux

В системах Linux процессы также называются задачами, и понятия обоих одинаковы.

1. Состояние процесса Linux


Исполняемый файл: включает в себя как состояние готовности, так и состояние готовности. Все имеют рабочие условия.
Состояние сна: состояние ожидания. Процесс ожидает события или ресурса. Состояние сна делится на непрерываемое и бесперебойное. Разница между ними заключается в том, что во время сна непрерывный процесс игнорирует сигнал, в то время как прерванный процесс проснется и войдет в состояние выполнения, если он получит сигнал, и войдет в состояние сна после обработки сигнала.
Приостановленное состояние: процесс в приостановленном состоянии преобразуется из рабочего состояния, ожидая некоторой специальной обработки. Когда процесс получает сигнал паузы, он переходит в состояние паузы, ожидая сигнала для возобновления работы.
Zombie: Когда процесс завершается или по какой-либо причине завершается, он освобождает все ресурсы, кроме ЦП. Этот процесс занимает PCB, но больше не работает, находится в мертвом состоянии.

2. дескриптор процесса Linux

Система Linux использует структуру task_struct для записи информации о процессе, которая называется дескриптором процесса, который также известен как PCB. Каждый раз, когда в системе создается новый процесс, ему присваивается структура task_struct и заполняется управляющая информация процесса. В task_struct есть много полей, включая следующие:

  • Идентификатор процесса (pid): целое число, идентифицирующее процесс.
  • Владение (uid, gid): идентификационный номер владельца и группы процесса.
  • Семейные отношения (родитель, дети, братья и сестры): указатели на процессы родителей, детей и братьев и сестер.
  • Связь связей (tasks, run_list): указатель, который связывает процесс в связанный список процессов и исполняемую очередь.
  • Состояние: текущее состояние процесса.
  • Информация о планировании (полиция, prio, time_slice): стратегия планирования, приоритет и временной интервал, используемые для планирования.
  • Информация о времени (start_time, utime, stime): время, когда процесс был установлен, и время, которое он занимал ЦП.
  • Таймер (real_timer): используется для установки времени. Когда время истечет, система отправит сигнал синхронизации для информирования процесса.
  • Информация о связи (сигнал, сигнал): сигнал, полученный процессом, и используемая программа обработки сигнала.
  • Код выхода (код_входа): код завершения после завершения процесса, для родительского процесса для запроса.
  • Информация о файловой системе (fs, files): включает информацию, такую ​​как корневой каталог, текущий каталог и открытые файлы
  • Информация об адресном пространстве (мм): адресное пространство памяти процесса, в котором хранятся код, данные и стек процесса.
  • Информация аппаратного поля (поток): содержимое регистров ЦП, сохраненное во время переключения процессов.
  • Рабочая информация (thread_info): Основная информация о рабочей среде и статусе процесса.

3. Просмотр информации о процессе

ps(process status)
-e показать все процессы
-t tty показать процессы на терминале tty
-f Показать в полном формате
-o Показать в пользовательском формате
a показывает все процессы на всех терминалах
u отображается в пользовательском формате
x показывает все процессы, которые не управляют терминалом
-C cmd показывает процесс с именем cmd
n показать процессы с PID n

Добавлено 22 мая 2021 в 19:52

Когда программа запускается, CPU начинает выполнение с начала main(), выполняет какое-то количество инструкций (по умолчанию в последовательном порядке), а затем, в конце main(), программа завершается. Конкретная последовательность инструкций, выполняемых процессором, называется путем выполнения программы (или, для краткости, просто путем).

Рассмотрим следующую программу:

#include <iostream>
 
int main()
{
    std::cout << "Enter an integer: ";
    
    int x{};
    std::cin >> x;
 
    std::cout << "You entered " << x;
 
    return 0;
}

Путь выполнения этой программы включает в себя строки 5, 7, 8, 10 и 12 в указанном порядке. Это пример прямолинейной программы. Прямолинейные программы при каждом запуске проходят один и тот же путь (выполняют одни и те же инструкции в одном и том же порядке).

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

К счастью, C++ предоставляет ряд различных инструкций управления порядком выполнения, которые представляют собой инструкции, которые позволяют программисту изменять обычный путь выполнения программы. Вы уже видели пример этого с инструкциями if (представленными в уроке «4.10 – Знакомство с инструкциями if»), которые позволяют нам выполнять инструкцию, только если условное выражение истинно.

Когда инструкция управления порядком выполнения вызывает изменение точки выполнения на инструкцию, не идущую последовательно, это называется ветвлением.

Категории инструкций управления порядком выполнения программы

Категория Значение Реализовано в C++ с помощью
Условные операторы Условные операторы вызывают выполнение последовательности кода, только если выполняется какое-то условие. if, switch
Переходы Переходы говорят процессору начать выполнение инструкций в каком-то другом месте. goto
Вызовы функций Вызов функции – это переход в другое место, а затем обратно в исходную точку. вызовы функций
Циклы Циклы говорят программе многократно выполнять некоторую последовательность кода ноль или более раз, пока не будет выполнено какое-либо условие. while, dowhile, for, for на базе диапазона
Остановки Остановки говорят программе о прекращении работы. std::exit(), std::abort()
Исключения Исключения – это особый вид структуры управления порядком выполнения, предназначенный для обработки ошибок. try, throw, catch

В данной главе мы подробно рассмотрим все эти категории, за исключением исключений (ха!), которым мы посвятим целую главу (глава 20).

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

Здесь начинается самое интересное. Итак, приступим!

Теги

C++ / CppLearnCppДля начинающихОбучениеПрограммирование

Понравилась статья? Поделить с друзьями:
  • Методика руководства дидактическими играми по всем возрастным группам
  • Руководство нижнего звена управления
  • Аква нормин спрей для носа инструкция для детей
  • Анализ смк со стороны руководства что это
  • Стиральная машина zanussi lindo 100 инструкция по применению на русском