Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
programmirovanie_okonchat.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
153.81 Кб
Скачать

Билет 1 Языки программирования и их классификация. Алгоритмы, свойства алгоритмов.

Язык программирования – формализованный язык для описания алгоритма решения задачи на компьютере. Для автоматизации программирования разрабатывался для каждой ЭВМ свой автокод (или Ассемблер). Этот язык в полной мере повторяет набор команд машинного языка и появился лишь для упрощения программирования на машинном кодеЕсли в качестве признака классификации взять синтаксис образования конструкций языков программирования, то их можно условно разделить на следующие классы: машинные языки (computer language) – языки программирования, воспринимаемые аппаратной частью компьютера (машинные коды); машинно-ориентированные языки (computer-oriented language) – языки программирования, которые отражают структуру конкретного типа компьютера (Ассемблеры); алгоритмические языки (algorithmic language) – не зависящие от архитектуры компьютера языки про-граммирования для отражения структуры алгоритма (Паскаль, Фортран, Бейсик и др.); процедурно-ориентированные языки (procedure-oriented language) – языки программирования, где имеется возможность описания программы как совокупности процедур (подпрограмм); проблемно-ориентированные языки (universal programming language) – языки программирования, предназначенные для решения задач определенного класса (Лисп, РПГ, Симула и др.); интегрированные системы программирования. Если в качестве признака классификации взять принадлежность к одному из оформившихся к настояще-му времени стилей программирования, каждому из которых соответствует своя собственная модель вычис-лений, то языки программирования можно условно разделить на следующие классы:

 процедурные;

 функциональные;

 логические;

 объектно-ориентированные.

Программа на процедурном языке программирования состоит из последовательности операторов (инструкций), задающих те или иные действия. Одним из важнейших квалификационных признаков процедур-ных языков является их уровень, характеризующий степень близости языка программирования и машинного языка. За начало отсчета уровней принимается машинный язык, уровень которого равен нулю. Функциональные языки программирования. Программа на таком языке представляет собой совокуп-ность описаний функций и выражения, которые необходимо вычислить. Функциональное программирова-ние не использует концепцию памяти как хранилища значений переменных. Операторы присваивания от-сутствуют, вследствие чего переменные обозначают не области памяти, а объект программы, что полностью соответствует понятию переменной в математике. Наличие стройной математической основы обеспечивает возможность использования алгебраических методов создания структуры, преобразования и исследования программ. Это в какой-то мере приближает их к описанию структуры мышления человека. Примером функ-ционального языка является язык LISP (List Processing – обработка списков. Логическое программирование. Логика и программирование долгое время были непересекающимися областями исследований. Центральным понятием в логическом программировании является отношение. Программа представляет собой совокупность определений отношений между объектами и цели. В логическом программировании нужно только специфицировать факты, на которых алгоритм основывается, а не определять последовательность шагов, которые требуется выполнить. Логические программы отличаются принципиально низким быстродействием, так как вычисления осуществляются методом проб и ошибок. Объектно-ориентированное программирование. Корни объектно-ориентированного программирования уходят в одну из ветвей логики, в которой первичной является не отношение, а объект. Прототипом объектно-ориентированного программирования явился язык SIMULA-67. Этот стиль программирования характеризуется богатыми графическими возможностями и средой программирования, развитой модульной структурой программ. Именно модульность упрощает разработку сложных программных продуктов. Как пример объектно-ориентированного языка можно назвать Visual Basic и Delphi. Алгоритм – понятная и точная  последовательность действий, описывающая процесс преобразования объекта из начального состояния в конечное.Исполнителем алгоритма может быть как человек (кулинарные рецепты, различные инструкции, алгоритмы математических вычислений), так и техническое устройство. Различные машины (компьютеры, промышленные роботы, современная бытовая техника) являются формальными исполнителями алгоритмов. От формального исполнителя не требуется понимание сущности решаемой задачи, но требуется точное выполнение последовательности команд.  Алгоритм можно записывать различными способами (словесное описание, графическое описание – блок схема, программа на одном из языков программирования и т.д.). Программа – это алгоритм, записанный на языке программирования Полученный алгоритм  (программа) должен обладать следующим набором свойств:

         дискретность (алгоритм разбит на отдельные шаги - команды);

         однозначность (каждая команда определяет единственно возможное действие исполнителя);

         понятность (все команды алгоритма входят в систему команд исполнителя);

         результативность (исполнитель должен решить задачу за конечное число шагов).

Большая часть алгоритмов обладает также свойством массовости (с помощью одного и того же алгоритма можно решать множество однотипных задач).

билет 2 Современные языка программирования. Особенности изучаемого языка Си. Основные элементы языка.

Современные языки программирования похожи друг на друга: каждый из них содержит конструкции (операторы, типы данных и другие), имеющие аналоги в других языках программирования. В то же время идентичность языков далеко не полная. Каждый из них содержит конструкции, присущие только ему (даже похожих конструкций в других языках не наблюдается). Конструкции современных языков имеют общее содержание (семантику), но различный порядок следо-вания компонент (синтаксис) и разные ключевые слова (лексику). Таким образом, различные языки предос-тавляют программисту одинаковые возможности (при различном внешнем виде программ). Избавление от неструктурированных программ пришло с появлением языков структурного программирования. И на сегодня это привело к тому,что все современные языки являются структурными.). С момента когда появился первый язык программирования высокого уровня программисты могли создавать программы длиной до нескольких тысяч строк. Однако когда дело доходило до больших программ, код становился совершенно нечитаемым и трудно управляемым. программирования  С#, Python и Scala (0,87, 0.86, 0.85 соотвественно), Objective-C, Java и Ruby (0.80, 0.79, 0.79), С++, PHP и Perl (0.69, 0.61, 0.61), Pascal и Delphi Delphi – это не что иное, как Visual Pascal, ADA и др, Си и (C) является языком функций, типов данных, операторов присваивания и управления последовательностью вычислений. Программируя на Си (C), вы осуществляете обращение к функциям, и большинство функций возвращают некоторые значения. Значение, возвращаемое функцией, будь то значение переменной или константа, может использоваться в операторе присваивания, который изменяет значение другой переменной. Дополненный операторами управления последовательностью вычислений (while, for, do, switch), Си (C) превращается в язык высокого уровня, способствующий хорошему стилю программирования.Си (C) имеет небольшой набор типов данных: целые числа, числа с плавающей запятой, битовые поля и перечислимый тип. В языке Си (C) вы можете описать переменную типа указатель, который связывается с объектом, принадлежащим к любому типу данных. Адресная арифметика языка Си (C) является чувствительной к типу данных того объекта, с которым связан используемый указатель. Разрешены также указатели к функциям. Вы можете расширить список типов данных путем создания структур с иерархической зависимостью входящих в него типов данных. Каждый тип данных может принадлежать либо к основному типу, либо к ранее описанному структурному типу. Объединения напоминают структуры, но определяют различные виды иерархических зависимостей, в которых данные разных типов располагаются в памяти. Допустимо описание массивов данных различных типов, включая структуры и объединения. Массивы могут быть многомерными.Функции Си (C) являются рекурсивными по умолчанию. Вы можете, правда, создать функцию, которая не будет рекурсивной, но сам язык по своей природе стремится поддерживать рекурсивность и требует минимальных усилий при программировании Программа функции на языке Си (C) разбивается на блоки, в каждом из которых могут быть определены свои собственные локальные переменные. Блоки могут выбираться для исполнения по результату выполнения оператора управления последовательностью вычислений. Блоки могут быть вложенными друг в друга.Переменные и функции могут быть глобальными для программы, глобальными для исходного модуля или локальными для блока, в котором они описаны. Локальные переменные могут быть описаны таким образом, что они будут сохранять свои значения при всех обращениях внутри данного блока (статические переменные) или же будут восприниматься как новые объекты при каждом обращении (автоматические переменные).В нем отсутствуют встроенные операторы для выполнения ввода-вывода, динамического распределения памяти, управления процессами и т.п., однако в системное окружение языка Си входит библиотека стандартных функций, в которой реализованы подобные действия. Существование этого стандарт составляет главную привлекательность языка Си (C), ибо делает программы на Си (C) переносимыми. .

Основные элементы языка С++: алфавит языка, идентификаторы, константы. Использование комментариев в тексте программы. Алфавит языка программирования С++ аналогичен алфавитам других языков программирования (Pascal, Basic и т.д.). Из символов алфавита формируются лексемы языка (лексема – последовательность символов, обрабатываемая компилятором): Константа (литерал) - это лексема, представляющая изображение фиксированного числового, строкового или символьного (литерного) значения. Константы бывают: целыми;

вещественными (с плавающей точкой);

перечислимыми;

символьными (литерными);

строковыми (строки или литерные строки).

Целые константы могут быть десятичными, восьмеричными и шестнадцатиричными. Перечислимые константы вводятся с помощью служебного слова enum. Как правило, это целочисленные константы типа int, которым приписаны уникальные и удобные для использования обозначения.   Вещественные константы распознаются компилятором по внешним признакам Символьная (литерная) константа - это один символ, заключенный в апострофы Строка, или строковая константа, иногда называемая литерной строкой, определяется как последовательность символовюПеречислимые константы вводятся с помощью служебного слова enum. Как правило, это целочисленные константы типа int, которым приписаны уникальные и удобные для использования обозначения

Идентификатор - последовательность из букв латинского алфавита, десятичных цифр и символов подчеркивания, начинающаяся не с цифры, например: RUN, Run, summa_factorial. Прописные и строчные буквы различаются. Таким образом, в этом примере два первых идентификатора различны. Длина различаемой части идентификатора зависит от реализации языка С++. При создании программ вы можете поместить в исходном файле замечания, которые объясняют работу программы. Такие замечания (называемые комментариями) не только помогают другим программистам понять вашу программу, но могут напомнить, почему программа содержит определенные операторы, если вы ее посмотрите через несколько месяцев. Когда компилятор C++ встречает двойной слеш, он игнорирует весь оставшийся

Билет 3 Общие сведения о программах, лексемах и алфавите.

Основная программная единица на языке Си++ – это текстовый файл с названием <имя>.срр, где срр – принятое расширение для программ на Си++, а имя выбирается достаточно произвольно. Для удобства ссылок и сопоставления программ с их внешними именами целесообразно помещать в начале текста каждой программы строку комментария с именем файла, в котором она находится. Текстовый файл с программой на Си++ вначале обрабатывает препроцессор, который распознает команды (директивы) препроцессора (каждая такая команда начинается с символа ‘#’) и выполняет их. В приведенных выше программах использованы препроцессорные команды #include <имя включаемого файла>Выполняя препроцессорные директивы, препроцессор изменяет исходный текст программы. Команда #include вставляет в программу заранее подготовленные тексты из включаемых файлов. Сформированный таким образом измененный текст программы поступает на компиляцию. Компилятор, во-первых, выделяет из поступившего к нему текста программы лексические элементы, т. е. лексемы, а затем на основе грамматики языка распознает смысловые конструкции языка (выражения, определения, описания, операторы и т. д.), построенные из этих лексем. Фазы работы компилятора здесь рассматривать нет необходимости. Важно только отметить, что в результате работы компилятора формируется объектный модуль программы.

Алфавит и лексемы языка СИ++.

В алфавит языка Си++ входят:

· прописные и строчные буквы латинского алфавита;

· цифры 0,1, 2, 3, 4, 5, 6, 7, 8, 9;

· специальные знаки:

“ { } , | [ ] ( ) + – / % | ; ‘ : ? < = > _ ! & # ~ ^ . *

Из символов алфавита формируются лексемы языка:

· идентификаторы;

· ключевые (служебные, или зарезервированные) слова;

· константы;

· знаки операций;

· разделители (знаки пунктуации).

Идентификатор - последовательность из букв латинского алфавита, десятичных цифр и символов подчеркивания, начинающаяся не с цифры, например: RUN, Run, summa_factorial. Прописные и строчные буквы различаются. Таким образом, в этом примере два первых идентификатора различны. Длина различаемой части идентификатора зависит от реализации языка С++.

Ключевые (служебные) слова - это идентификаторы, зарезервированные в языке для специального использования. Не рекомендуется использовать символ подчеркивания в качестве начального символа при записи идентификаторов, так как такие конструкции активно применяются самим языком программирования.

Ключевые слова Си++:

Asm Double New Switch

Auto Else Operator Template

Break Enua Private This

Case Extern Protected Throw

While и тд

Константа (литерал) – это лексема, представляющая изображение фиксированного числового, строкового или символьного (литерного) значения.Константы делятся на пять групп: целые, вещественные (с плавающей точкой), перечислимые, символьные (литерные) и строковые (строки или литерные строки). Перечислимые константы проект стандарта я     Целые константы могут быть десятичными, восьмеричными и шестнадцатиричными,     Вещественные константы распознаются компилятором по внешним признакам. Константа с плавающей точкой может включать следующие семь частей. Перечислимые константы вводятся с помощью служебного слова enum. Как правило, это целочисленные константы типа int, которым приписаны уникальные и удобные для использования обозначения.     Символьная (литерная) константа - это один символ, заключенный в апострофы. Для размещения их значений могут вводится переменные символьного типа, то есть типа char.     Строка, или строковая константа, иногда называемая литерной строкой, определяется как последовательность символов, заключенная в кавычки

Билет 4 Какие знаки операций знаете?

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

Таблица 1. Унарные операции

Обозначение операции

Назначение операции

&

Получение адреса операнда.

*

Обращение по адресу,

-

Унарный минус - изменяет знак арифметического операнда.

+

Унарный плюс (введен для симметрии с унарным минусом).

~

Поразрядное инвертирование внутреннего двоичного кода целочисленного аргумента (побитовое отрицание).

!

Логическое отрицание (логическое НЕ) значения операнда

++

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

--

Уменьшение на единицу (декремент).

Sizeof

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

Бинарные операции. Эти операции делятся на следующие группы:

аддитивные,

мультипликативные,

сдвигов,

поразрядные,

операции отношений,

логические,

присваивания,

выбора компонента структурированного объекта,

операции с компонентами классов,

операция "запятая",

скобки в качестве операций.

Таблица 2. Бинарные операции

Обозначение операции

Назначение операции

Аддитивные операции

+

Бинарный плюс

-

Бинарный минус (

Мультипликативные операции

*

Умножение операндов

/

Деление операндов

%

Получение остатка от деления целочисленных

Операции сдвига (определены только для целочисленных операндов.

<<

Сдвиг влево

>>

Сдвиг вправо

Поразрядные операции

&

Поразрядная конъюнкция (И

|

Поразрядная дизъюнкция (ИЛИ)

^

Поразрядное исключающее ИЛИ

Операции отношения (сравнения). Тип операндов: арифметический или указатель. Результат целочисленный: 0 (ложь), 1(истина).

<

Меньше, чем.

<=

Меньше или равно.

>=

Больше или равно.

>

Больше, чем.

==

Равно.

!=

Не равно.

Логические бинарные операции. Результат: 0 (ложь) или 1 (истина).

&&

Конъюнкция арифметических операндов или отношений.

||

Дизъюнкция арифметических операндов или отношений.

Операции присваивания

=

*=

/=

%=

+=

-=

<<=

>>=

&=

!=

^=

Операторы выбора компонентов структурированного объекта

.(точка)

->

Операции с компонентами классов

.*

->*

::

Запятая в качестве операции

,

Скобки в качестве операций

( ) и [ ]

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

Вопрос 5 Скалярные типы и выражения. Приведите пример простой программы.

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

char (символьный);

short (короткий целый);

int (целый);

long (длинный целый);

float (вещественный);

double (вещественный с удвоенной точностью);

void (отсутствие значения).

    Употребляемые как отдельно, так и вместе с другими именами типов служебные слова unsigned (беззнаковый) и signed (знаковый) позволяют для арифметического или символьного типа выбирать способ учета знакового разряда:

    Применение в определениях типов отдельных служебных слов int, char, short, long эквивалентно signed int, signed char, signed short, signed long. Именно поэтому служебное слово signed обычно опускается в определениях и описаниях. Использование при задании типа только unsigned эквивалентно unsigned int.

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

   auto (автоматически выделяемая, локальная память) - используется при определении объектов блока (функции). При входе в блок объекту (переменной) выделяется память, которая освобождается при выходе из блока. По умолчанию всем переменным присваивается этот спецификатор;

register (автоматически выделяемая, по возможности регистровая память) - аналогичен auto, но для размещения объектов используются регистры, а не участки основной памяти

static (внутренний тип компоновки и статическая продолжительность существования) - объект с таким спецификатором будет существовать в пределах того файла с исходным текстом программы или модуля, где он определен

extern (внешний тип компоновки и статическая продолжительность существования) - объект этого класса глобален, то есть доступен во всех модулях (файлах) программы. Класс extern может быть приписан переменной или функции.

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

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

    Объектам со статической продолжительностью существования память выделяется в начале выполнения программы и сохраняется до окончания ее обработки. Статическую продолжительность имеют функции и файлы    Переменные с локальной продолжительностью существования создаются при каждом входе в блок или функцию, где они описаны, и уничтожаются при выходе    Объекты с динамической продолжительностью существования создаются и уничтожаются с помощью явных операторов в процессе выполнения программы. Для создания используется операция new и функция malloc(), а для уничтожения - операция delete или функция free().

2 //Простая программа, написанная на языке C++.

#include <iostream.h>

main ()

{

int num=1;

cout << "Я - простая";

cout << " вычислительная машина.\n";

cout<<"Мое любимое число "<<num<<", потому что оно самое

первое.\n";

}

    Результат выполнения программы:

Я - простая вычислительная машина.

Мое любимое число 1, потому что оно самое первое.

    Комментарии к программе.

    //Простая программа, написанная на языке Cдва символа / (//) - все символы расположенные после этой лексемы, игнорируются компилятором. Однако таким образом можно задавать только "однострочный" комментарий. Если требуется расположить комментарий на нескольких строках, то перед началом каждой части комментария нужно располагать этот символ:

//Простая программа,

//написанная на языке C++.

символы /* и */ - отмечают, соответственно, начало комментария (/*) и его конец (*/). Компилятор "игнорирует" все символы, находящиеся между указанными конструкциями:

/*Простая программа, написанная на языке C++.*/

или

/*Простая программа,

написанная на языке C++.*/

   

    #include <iostream.h> - директива препроцессора. Подключение к нашей программе файла с именем iostream.h позволяет воспользоваться потоками ввода (cin) и вывода (cout  Символ # указывает, что она должна быть обработана препроцессором языка C++. Препроцессор осуществляет некоторую предварительную обработку текста программы перед началом компиляции.

   

    main() - имя функции. Любая программа, написанная на языке C++, состоит из одной или более функций, являющихся основными модулями, из которых она собирается. Наша программа состоит из одной функции main(), и круглые скобки указывают именно на то, что main - имя функции (англ. main - главный). Программа, написанная на языке C++, всегда начинает выполняться с функции, названной main(), поэтому мы имеем возможность выбирать имена для всех используемых нами функций кроме той, с которой начинается выполнение программы.

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

   

    { и } - фигурные скобки отмечают начало и конец тела функции. Фигурные скобки применяются также и для того, чтобы объединить несколько операторов программы в составной оператор или блок (аналогичны операторным скобкам Begin и End языка Pascal).

   

    int num=1; - оператор описания, совмещенный с оператором присваивания. С помощью такого оператора мы объявляем, что будем использовать в программе переменную num, которая принимает целые (int) значения.    Точка с запятой в конце программной строки указывает на то, что в ней содержится оператор языка C++, причем этот символ является здесь частью оператора, а не разделителем операторов, как в языке Pascal.

    Слово int является ключевым словом, определяющим один из простейших типов данных языка C++. Напомним, что ключевыми словами называются специальные зарезервированные слова, используемые для построения предложений языка.

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

   

    cout<<"Я - простая"; - помещение в поток вывода фразы, заключенной в кавычки. Стандартный поток вывода связан с экраном, поэтому символы, заключенные в кавычки, появятся на экране дисплея.

     cout<<" вычислительная машина.\n"; - добавляет слова "вычислительная машина" в конец последней выведенной на экран фразы (в той же строке). Символы \n не появятся на экране. Эти символы служат директивой начать новую строку на устройстве вывода. Комбинация символов \n на самом деле представляет собой один символ,  называемый новая строка. Его смысл кратко формулируется так: начать вывод новой строки с самой левой колонки следующей строки.

Вместо символов \n можно использовать команду endl:

cout<<" вычислительная машина."<<endl;

        cout<<"Мое любимое число "<<num<<", потому что оно самое первое.\n"; - вывод на экран фраз, заключенных в кавычки, и значения переменной num.

        Файл, содержащий программу, может иметь любое имя, правда с тем ограничением, что оно должно удовлетворять ограничениям на имя в данной операционной системе и иметь расширение cpp. Например, prog.cpp или MMM.CPP.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]