Способы представления:
1)Графический
2) Словесный
3)Символьный
Формы представления:
1)Вербальная
2)Словесно-форменная
3)Блок-схема
4)Операторная схема
5)Псевдокод
6)Алгоритмический
7)Языки программирования
Блок-схема — это графическое изображение логической структуры алгоритма, в который каждый этап процесса переработки данных представляется в виде геометрических фигур имеющих определенную конфигурацию в зависимости от характера выполняемой операции.
(Блок-схема алгоритма — графическое изображение алгоритма в виде связанных между собой с помощью стрелок (линий перехода) и блоков — графических символов, каждый из которых соответствует одному шагу алгоритма.)
Основные блоки в блок-схемах:
1)Начало/конец алгоритма(овалы)
2)Ввод/вывод данных(параллелограм)
3)Шаг/действие(прямоугольник)
4)Проверка условия(ромб)
(5)Цикл(ромб с кругом); 6)Подпрограмма(прямоугольник, по бокам отступы))
• Основные компоненты системы программирования: язык программирования, транслятор, компилятор. Характеристика языков высокого и низкого уровней. Примеры.
Язык программи?рования — формальный язык, предназначенный для записи компьютерных программ.
(Языки программирования – формальная знаковая система, предназначенная для записи алгоритмов, исполнение которых поручается ЭВМ.)Язык программирования определяет набор лексических, синтаксических и семантических правил, определяющих внешний вид программы и действия, которые выполнит исполнитель (обычно — ЭВМ) под её управлением.
Транслятор — это программа-переводчик. Она преобразует программу, написанную на одном из языков высокого уровня, в программу, состоящую из машинных команд. Трансляторы делятся на две группы по их работе – компиляторы и интерпретаторы.
Компилятор читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, который затем и выполняется. (для понимания Интерпретатор переводит и выполняет программу строка за строкой.)
.
Базовая единица действия в любом ЯП- оператор
Оператор- это совокупность символов указывающих операцию и значение или место нахождения её операндов.
ЯП делятся на: языки высокого и низкого уровня.
ЯНУ являются машинно зависимыми языками, потому что содержат в том или ином виде операторы определенные для конкретного ЦП или для определенной архитектуры.
ЯВУ были названы так, потому что оперировали ограниченным набором операторов, с помощью которых можно было реализовать любой алгоритм.
Примеры:
Языки низкого уровня — это машинный язык, язык Ассемблера.
Машинный язык состоит из двух символов — 0 и 1 (программа строится в двоичной системе счисления).
А вот языки высокого уровня ориентированы на человека (на пользователя ПК). Это такие языки программирования: Бейсик, Паскаль, Турбо Паскаль, С++ и другие.
• Оператор. Операнд. Общая характеристика и классификация данных. Элемент данных. Константы и переменные. Примеры. Идентификатор. Правило именования идентификатора. Примеры.
Оператор- это совокупность символов указывающих операцию и значение или место нахождения её операндов.
Операнд — это аргумент операции,это значение, переменная или выражение, которое расположено слева или справа от оператора(Для понимания 1 + 2 Здесь 1 и 2 — это операнды, а знак ПЛЮС (+) — это оператор. )
Данные являются объектами, к которым применяется алгоритм с целью выполнения соответствующих вычислений.
Классификация типов данных
1)Простые(скалярные)
Стандартные
1.Символьные
2. Строковые
3.Логические
4.Числовые
Знаковые/беззнаковые( целые или вещественные)
2)Агрегативные
1.Базовые
1.Массив
2. Записи(структуры)
3.Множество
4. Файл
2.Линейные
Списки
3. Нелинейные
1.графы
2.деревья
3.Сети, кучи
Элементом данных называют часть данных, с которыми можно выполнять элементарные операции(арифметические, логические, бинарные и т.д.)
Константа- это элемент данных, сохраняющий значение заданное программистом при её описании неизменным до конца выполнения программы, в которой она определена) [const m = -50;]
Переменная- это элемент данных, значение которого может быть изменено в процессе программы( причём, пока программа не начала работать, переменная не определена)[int a, b, c;]
Идентификатор- это имя какого-либо элемента программы( а не только элемента данных!), заданное программистом при его описании, в соответствии с правилом определения имён для данного языка программирования.
Правило определения идентификатора:
1) Первый символ- символ латинского алфавита
2) далее, в произвольной последовательности следуют символы латинского алфавита, цифры, а также символ подчеркивания(_)
3) Длинна не может превышать 30 символов
• Понятие типа данных. Именные и типизированные константы. Примеры. Базовые структуры: массивы, записи (структуры). Преимущества использования массивов. Использование констант при описании массивов.
Тип данных — множество значений, которые может принимать эта переменная.
Именные константы — это константа, тип которой определяется по значению( У=23, Е=х), типизированные константы- это константы, которые программист задает сам(float, int).
Массив данных- это упорядоченное по месту расположения конечная совокупность однотипных по структуре и способу использования элементов данных, обозначенным одним тем же идентификатором и рассматриваемые как единое целое.
Записи — это упорядоченная совокупность данных разнотипных элементов данных расположенная последовательно в памяти компьютера, рассматриваемая как единое целое с точки зрения их содержания и применения.
Преимущества использования массивов:
Удобный способ хранения нескольких элементов под одним именем,Быстрота изменения элементов,Легкость в использовании .
Имя массива является константным указателем. Именно поэтому и невозможно копирование массивов с помощью простого оператора присвоения. Константный указатель охраняет область памяти, выделенную для размещения данного массива. При этом значения элементов массива можно изменять в ходе выполнения программы. Защитить их от изменения можно с помощью дополнительного спецификатора типа const. При этом массив должен быть проинициализирован непосредственно в момент определения:
[const int cIntArray[] = {0,1,2,3,4,5,6,7,8,9};]
• Понятие типа данных. Основные типы данных языка С: описание, размер, примеры использования.
Тип данных — множество значений, которые может принимать эта переменная.
Типы данных:
Логический тип- состоит всего из двух значений : False (ложно) и True (истинно). Эти слова определены в языке и являются, по сути, логическими константами. Минимальный размер для bool- 8 бит
char- символьный тип(1 байт)(0…255)
int — целый тип(4 байта)(зависит от системы, обычно около -32к…32к)(int a=10)
float- вещественный тип одинарной точности(4 байта)(float b=1.5)
double, real- обозначают множества вущественных чисел в различных диапазонах(8 байт)(double b = 0.00105)
• Массивы. Принципы организации массивов. Одномерные и двумерные массивы. Физическая организация массивов в памяти ЭВМ. Примеры описания и использования на языке С.??????????????????
Массив данных- это упорядоченное по месту расположения конечная совокупность однотипных по структуре и способу использования элементов данных, обозначенным одним тем же идентификатором и рассматриваемые как единое целое.
Одномерные массивы-массив, с одним параметром,характеризующим количество элементов одномерного массива. Фактически одномерный массив — это массив, у которого может быть только дна строка и Н-ое количество столбцом,где столбцы-это элементы массива.
Двумерный массив-это своеобразная матрица, состоящая из Н-ого количества строк и М-ого количества столбцов.
Принципы организации массивов(основные характеристики при определении массива)?:
1. имя массива
2. тип элемента (массива)
3. размерность массива (равно количеству индексных позиций измерений массива)
4. количество элементов или длинна массива
5. порядок нумерации элементов последовательности, то есть значение верхней и нижней границ для каждого индекса
Одномерный массив (пример описания и пример использования):
Объявление массива- int array1 [10];
int a[3]=[1, 2. 3];
int a[]=[4, 5, 6 7];
Пример использования- for (int i=0; i
S++;
Двумерный массив (пример лписания и пример использования):
Объявление Массива-int a[5] [3];
int a [2] [2]=[{1, 2},{3,4}];
Пример использования-for (int i=0; i
for (int j=0; J
S++;
• Основные типы вычислительных процессов: определение, особенности организации управления вычислительным процессом. Управляющие канонические структуры, их характеристика. Структурные программы.?????????????????
Вычислительный процесс — это последовательность действий, предписанных операторами алгоритма.
Общая совокупность вычислительных процессов делится на три типа:
1. Линейный вычислительный процесс- это такой вычислительный процесс, в котором самостоятельный этап вычислений выполняется в линейной последовательности их записи ( то есть в естественном порядке)
2. Ветвление.
Вычислительный процесс называется ветвлением если в зависимости от исходных условий или промежуточных результатов он реализуется по одному из нескольких заранее предусмотренных возможных направлений, каждое отдельное направление называется ветвью вычисления.
3. Циклические вычислительные процессы- это в.п., которые содержат неоднократно повторяемые участки вычисления.
Канонические структуры относятся к регулярным системам алгоритма и программ. Регулярные программы имеют одну точку входа и одну точку выхода, и ее оператор может быть доступен или достигнут из точки входа.
Структурные программы строятся из канонических структур образованных соответствующими языковыми конструкциями.
• Линейный процесс: определение, примеры организации с использованиям блок-схемы и программы. Приведите соответствие линейных блоков блок-схемы и операторов языка программирования С.
Линейным называется такой вычислительный процесс, в котором самостоятельные (отдельные) этапы вычислений выполняются в линейной последовательности их записи, т.е. в естественно порядке.
блок выполнения + — * / mod div
ввод scant cin
вывод printf cout
• Ветвящийся процесс: определение, особенности и примеры организации в блок-схеме и программе. Полный и неполный варианты использования. Приведите соответствие блока выбора (условия) в блок-схеме и оператора языка программирования С.
Вычислительный процесс называется ветвящимся, если в зависимости от исходных условий или промежуточных результатов он реализуется по одному из нескольких заранее предусмотренных (возможных) направлений. Каждое отдельное направление называется ветвью вычислений.
полный с да и с нет, не полный только с ад или толь ко с нет
Ромб if … else
• Сложные (составные) условия с логическими связками. Основные логические операции и соответствующие таблицы истинности в языке С. Примеры использования.
Составное условие – это несколько простых условий, соединённых логическими операциями: not – «нет», or – «или», and – «и». Знаки логических операций называют логическими связками. Логические операции описывают с помощью таблиц истинности, где 1 – это истина (true), 0 – ложь (false).
Коньюнкция или and в Си.
Пример применения : if ((xy) (xz))
Дизьюнкция или or в Си.
Пример применения: if ((xy) || (xz))
Исключающее ИЛИ или xor в Си.
Пример применения: if ((xy) ^(xz))
• Оператор выбора. Синтаксис, принцип и особенности функционирования, примеры использования. Эквивалентное представление оператора выбора с помощью ветвления.
Оператор выбора языка Си –switch
В круглых скобках после оператора выбора языка Си switch находится переменная типа int или char (не строковая), следом расположен блок, заключенный в фигурные скобки; в блоке содержатся ветви условий case. Каждая ветвь case выполняет конкретные инструкции, если значение переменной совпадает с указанным. Если это значение является символом, то символ заключается в одинарные кавычки.
Эквивалентное представление оператора выбора с помощью ветвления.
• Циклические процессы и их структурное представление. Характеристика, отличия и области применения циклов с известным количеством повторений и итерационных циклом.
Циклы- многократно повторяемые участки вычислений, при соблюдении заданных условий; а сами повторяемые участки- тело цикла.
Вычислительные процессы, содержащие такие многократно повторяемые участки вычислений — циклические процессы.
• Характеристика циклов с пред и постуслованием, их отличие, синтаксис и примеры реализации на языке С.
В языке Си следующие виды циклов:
while — цикл с предусловием;
do…while — цикл с постусловием;
Цикл с предусловием while:
Общая форма записи:
while (Условие)
{
Блок Операций;
}
Если Условие выполняется (выражение, проверяющее Условие, не равно нулю), то выполняется Блок Операций, заключенный в фигурные скобки, затем Условие проверяется снова.
Последовательность действий, состоящая из проверки Условия и выполнения Блока Операций, повторяется до тех пор, пока выражение, проверяющее Условие, не станет ложным (равным нулю). При этом происходит выход из цикла, и производится выполнение операции, стоящей после оператора цикла.
Пример:
(Посчитать сумму чисел от 1 до введенного k)
#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf
#include
int main() {
int k; // объявляем целую переменную key
int i = 1;
int sum = 0; // начальное значение суммы равно 0
printf(k = );
scanf(%d, k); // вводим знчение переменной k
while (i
{а
sum = sum + i; // добавляем значение i к сумме
i++; // увеличиваем i на 1
}
printf(sum = %d\n, sum); // вывод значения суммы
getchar(); getchar();
return 0;
}
При построении цикла while, в него необходимо включить конструкции, изменяющие величину проверяемого выражения так, чтобы в конце концов оно стало ложным (равным нулю). Иначе выполнение цикла будет осуществляться бесконечно (бесконечный цикл).
Пример бесконечного цикла:
while (1)
{
БлокОпераций;
}
while — цикл с предусловием, поэтому вполне возможно, что тело цикла не будет выполнено ни разу если в момент первой проверки проверяемое условие окажется ложным.
Цикл с постусловием do…while:
do {
БлокОпераций;
} while (Условие);
Цикл do…while — это цикл с постусловием, где истинность выражения, проверяющего Условие проверяется после выполнения Блока Операций, заключенного в фигурные скобки. Тело цикла выполняется до тех пор, пока выражение, проверяющее Условие, не станет ложным, то есть тело цикла с постусловием выполнится хотя бы один раз.
Использовать цикл do…while лучше в тех случаях, когда должна быть выполнена хотя бы одна итерация, либо когда инициализация объектов, участвующих в проверке условия, происходит внутри тела цикла.
Пример:
(Проверка, что пользователь ввел число от 0 до 10)
#define _CRT_SECURE_NO_WARNINGS // для возможности использования scanf
#include
#include // для использования функции system()
int main() {
int num; // объявляем целую переменную для числа
system(chcp 1251); // переходим на русский язык в консоли
system(cls); // очищаем экран
do {
printf(Введите число от 0 до 10: ); // приглашение пользователю
scanf(%d, num); // ввод числа
} while ((num 10)); // повторяем цикл пока num10
printf(Вы ввели число %d, num); // выводим введенное значение num — от 0 до 10
getchar(); getchar();
return 0;
}
• Цикл со счетчиком. Реализация цикла со счетчиком с использованием операторов цикла с пред и постусловием.
В большинстве процедурных языков программирования реализуется оператором for, в котором указывается счётчик (так называемая «переменная цикла»), требуемое количество проходов (или граничное значение счётчика) и, возможно, шаг, с которым изменяется счётчик. Например, в языке Оберон-2 такой цикл имеет вид:
FOR v := b TO e BY s DO
… тело цикла
END
здесь v — счётчик, b — начальное значение счётчика, e — граничное значение счётчика, s — шаг).
Цикл с предусловием
Цикл с предусловием — цикл, который выполняется, пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла, поэтому тело может быть не выполнено ни разу (если условие с самого начала ложно). В большинстве процедурных языков программирования реализуется оператором while, отсюда его второе название — while-цикл. На языке Pascal цикл с предусловием имеет следующий вид:
while () {
}
Цикл с постусловием
Цикл с постусловием — цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что тело всегда выполняется хотя бы один раз. В языке Паскаль этот цикл реализует оператор repeat..until; в Си — do…while.
На языке Pascal цикл с постусловием имеет следующий вид::
repeat
until
do {
} while ()
• Простые и вложенные циклы: особенность организации, примеры на языке С. Досрочное завершение цикла.
Цикл for
Если мы знаем точное количество действий (итераций) цикла, то можем использовать цикл for. Синтаксис его выглядит примерно так:
for (действие до начала цикла;
условие продолжения цикла;
действия в конце каждой итерации цикла) {
инструкция цикла;
инструкция цикла 2;
инструкция цикла N;
}
Итерацией цикла называется один проход этого цикла
Существует частный случай этой записи, который мы сегодня и разберем:
for (счетчик = значение; счетчик значение; шаг цикла) {
тело цикла;
}
Счетчик цикла — это переменная, в которой хранится количество проходов данного цикла.
Описание синтаксиса:
1. Сначала присваивается первоначальное значение счетчику, после чего ставится точка с запятой.
2. Затем задается конечное значение счетчика цикла. После того, как значение счетчика достигнет указанного предела, цикл завершится. Снова ставим точку с запятой.
3. Задаем шаг цикла. Шаг цикла — это значение, на которое будет увеличиваться или уменьшаться счетчик цикла при каждом проходе.
Пример кода
Напишем программу, которая будет считать сумму всех чисел от 1 до 1000.
#include
using namespace std;
int main()
{
int i; // счетчик цикла
int sum = 0; // сумма чисел от 1 до 1000.
setlocale(0, );
for (i = 1; i
{
sum = sum + i;
}
cout
return 0;
}
Цикл while
Когда мы не знаем, сколько итераций должен произвести цикл, нам понадобится цикл while или do…while. Синтаксис цикла while в C++ выглядит следующим образом.
while (Условие) {
Тело цикла;
}
Данный цикл будет выполняться, пока условие, указанное в круглых скобках является истиной. Решим ту же задачу с помощью цикла while. Хотя здесь мы точно знаем, сколько итераций должен выполнить цикл, очень часто бывают ситуации, когда это значение неизвестно.
Ниже приведен исходный код программы, считающей сумму всех целых чисел от 1 до 1000.
#include
using namespace std;
int main()
{
setlocale(0, );
int i = 0; // инициализируем счетчик цикла.
int sum = 0; // инициализируем счетчик суммы.
while (i 1000)
{
i++;
sum += i;
}
cout
return 0;
}
Цикл do while
Цикл do while очень похож на цикл while. Единственное их различие в том, что при выполнении цикла do while один проход цикла будет выполнен независимо от условия. Решение задачи на поиск суммы чисел от 1 до 1000, с применением цикла do while.
#include
using namespace std;
int main ()
{
setlocale(0, );
int i = 0; // инициализируем счетчик цикла.
int sum = 0; // инициализируем счетчик суммы.
do {// выполняем цикл.
i++;
sum += i;
} while (i 1000); // пока выполняется условие.
cout
return 0;
}
При выполнении программы довольно часто возникает необходимость завершить цикл досрочно – например, если искомое в нем значение уже найдено или возникла ошибка, из-за которой дальнейшие шаги становятся бессмысленными. Теоретически цикл можно было бы завершить, присвоив управляющей переменной значение, выходящее за пределы ее изменения:
x:=1;
while x
y:=ln(x);
if y2 then x:=10; {При y2 цикл нужно завершить}
x:=x+0.5;
end;
Однако, во избежание трудноуловимых ошибок, управляющую переменную не принято менять иначе, чем для выполнения шага цикла. Например, после оператора if y2 then x:=10; в нашем листинге выполнение текущего шага продолжится, что чревато лишними или неправильными вычислениями. Кроме того, текст такой программы воспринимается нелегко.
Поэтому для досрочного выхода из цикла существует оператор break (от англ. to break — прервать), немедленно прекращающий его выполнение:
x:=1;
while x
y:=ln(x);
if y2 then break; {При y2 цикл нужно завершить}
x:=x+0.5;
end;
Break здесь передаст управление на оператор, следующий непосредственно за циклом. В отличие от предыдущего примера, здесь не будет выполняться часть тела цикла, следующая за break;.
Для немедленного продолжения цикла со следующего шага используется оператор continue (от англ. to continue – продолжить):
var n:integer;
begin
repeat
writeln (‘Введите положительное число:’);
read (n);
if n
{Здесь расположены операторы обработки положительного числа}
break; {Выход из цикла обработки}
until false;
end.
• Рекуррентные последовательности: способы задания. Рекуррентное уравнение (соотношение): общий вид, способ определения, решение рекуррентного соотношения. Обобщенный член и начальное условие. Рекуррентная последовательность k-ого порядка. Примеры.
Формула вида: , называется рекуррентной формулой. Величина k называется глубиной рекурсии. Другими словами, можно сказать, что рекуррентная последовательность — это бесконечный ряд чисел, каждое из которых, за исключением k начальных, выражается через предыдущие.
Примерами рекуррентных последовательностей являются арифметическая (1) и геометрическая (2) прогрессии:
Программирование вычислений рекуррентных последовательностей. С рекуррентными последовательностями связаны задачи такого рода:
1) вычислить заданный (n-й) элемент последовательности;
2) математически обработать определенную часть последовательности (например, вычислить сумму или произведение первых n членов);
3) подсчитать количество элементов на заданном отрезке последовательности, удовлетворяющих определенным свойствам;
4) определить номер первого элемента, удовлетворяющего определенному условию;
5) вычислить и сохранить в памяти заданное количество элементов последовательности.
Рекуррентное уравнение — это ряд чисел, где каждое число можно задать через предыдущее
Например:
арифметическая прогрессия- это рекуррентная последовательность k порядка, где к-число, которое прибавляется к предыдущему
геометрическая прогрессия — это рекуррентная последовательность k порядка, где к-число, только к не прибавляется, а умножается
числа Фибоначчи тоже
Есть число и есть коэффициент
• Подпрограммы: процедуры и функции – назначение, сравнительная характеристика и способы определения (описания) на языке С. Примеры.
Процедура (подпрограмма) — это основная функциональная единица декомпозиции (разделения на несколько частей) некоторой задачи. Процедура представляет собой группу команд для решения конкретной подзадачи и обладает средствами получения управления из точки вызова задачи более высокого приоритета и возврата управления в эту точку. В простейшем случае программа может состоять из одной процедуры. Процедуру можно определить и как правильным образом оформленную совокупность команд, которая, будучи однократно описана, при необходимости может быть вызвана в любом месте программы.
Функция — это самостоятельная единица программы, которая спроектирована для реализации конкретной подзадачи. Функция является подпрограммой, которая может содержаться в основной программе, а может быть создана отдельно (в библиотеке). Каждая функция выполняет в программе определенные действия.
Подпрограммы бывают двух видов — процедуры и функции. Отличаются они тем, что процедура просто выполняет группу операторов, а функция вдобавок вычисляет некоторое значение и передает его обратно в главную программу (возвращает значение). Это значение имеет определенный тип (говорят, что функцияимеет такой-то тип).
Функция main, которая есть в каждой нашей программе является именно функцией, так как после того как она выполнится она возвращает в программу которое её вызвала, а в данном случае операционная система, некоторое значение.
• Роль подпрограмм при декомпозиции задачи. Глобальные и локальные переменные. Область видимости (действия) переменной.
Процедура (подпрограмма) — это основная функциональная единица декомпозиции (разделения на несколько частей) некоторой задачи. Процедура представляет собой группу команд для решения конкретной подзадачи и обладает средствами получения управления из точки вызова задачи более высокого приоритета и возврата управления в эту точку. В простейшем случае программа может состоять из одной процедуры. Процедуру можно определить и как правильным образом оформленную совокупность команд, которая, будучи однократно описана, при необходимости может быть вызвана в любом месте программы.
Так вот, переменные, объявленные внутри функции, называются локальными. Локальные переменные имеют свои области видимости, этими областями являются функции, в которых объявлены переменные.
В программировании глобальной переменной называют переменную, областью видимости которой является вся программа
nt a; /* Объявление глобальной целочисленной переменной «а» */
float b =6; /* Объявление глобальной переменной с плавающей запятой «b» и присваивание ей значения «6» */
intmain(void)
{
a =12; /* Присваивание переменной «а» значения «12» */
return a+b;
}
В программировании, область видимости (англ. scope) обозначает область программы, в пределах которой идентификатор (имя) некоторой переменной продолжает быть связанным с этой переменной и возвращать её значение. За пределами области видимости тот же самый идентификатор может быть связан с другой переменной, либо быть свободным (не связанным ни с какой из них).
• Параметры подпрограммы (функции): фактические и формальные; глобальные и локальные. Передача параметров в подпрограмму (процедуру или функцию). Описание и вызов.
Формальные параметры подпрограммы указывают, с какими аргументами следует обращаться к этой подпрограмме (количество аргументов, их последовательность, типы). Они задаются в заголовке подпрограммы в виде списка, разбитого на группы. Разделителем групп является знак точка с запятой (;). В каждую группу включаются параметры одного типа, принадлежащие к одной категории.
Все формальные параметры можно разбить на четыре категории:
- параметры-значения;
- параметры-переменные;
- параметры-константы (используются только в версии 7.0);
- параметры-процедуры и параметры-функции.
Для каждого формального параметра следует указать имя и, как правило, тип, а в случае параметра-переменной или параметра-константы — его категорию. Имена параметров могут быть любыми, в том числе и совпадать с именами объектов программы. Необходимо лишь помнить, что в этом случае объект основной программы с таким именем становится недоступным для непосредственного использования подпрограммой. Тип формального параметра может быть практически любым, однако в заголовке подпрограммы нельзя вводить новый тип. Например, нельзя писать
function Max( A: array[ 1..100 ] of real ): real; |
Чтобы правильно записать этот заголовок, следует в основной программе ввести тип-массив, а затем использовать его в заголовке:
type tArr =array [ 1..100 ] of real; function Max ( A: tArr ) : real; |
При обращении к подпрограмме формальные параметры заменяются соответствующими фактическими вызывающей программой или подпрограммой.
Локальные и глобальные переменные и подпрограммы
Если переменная или константа описана в основной программе, она считается глобальной, и ее могут использовать любые процедуры и функции данной программы. Переменные, описанные внутри подпрограммы, называются локальными и могут быть использованы только внутри данной подпрограммы. Локальные переменные могут быть описаны как в заголовке подпрограммы, так и в разделе описания переменных. При совпадении имен глобальных и локальных переменных, локальные определения в пределах своего действия отменяют действия глобальных, и эти переменные никак не связаны между собой.
• Описание функции. Возвращаемое значение. Использование функций, определяемые программистом в выражениях. Логическая функция. Пример описания и использования функции.
Функция — это вспомогательный алгоритм (подпрограмма), результатом работы которого является некоторое значение.
Примеры:
- вычисление модуля числа, квадратного корня
- расчет значений по сложным функциям
- ответ на вопрос (простое число или нет?)
Зачем?
для выполнения одинаковых расчётов в различных местах программы
для создания общедоступных библиотек функций
Задача: составить функцию, которая вычисляет наибольшее из двух значений, и привести пример её исполнения.
Логические функции
Задача: составить функцию, которая определяет, верно ли, что заданное число- простое.
Особенности:
ответ — логическое значение да (1) или нет (0)
результат функции можно использовать как логическую величину в условиях (if , while)
Все функции, кроме функций типа void, возвращают значения. Данное значение определяется в операторе return. Если функция не определена как void и если не указано возвращаемое значение, то возвращается мусор. Если функция не объявлена как void, она может использоваться в качестве операнда в любом корректном выражении. Следовательно, каждое из следующих выражений корректно:
х = power(у);
if (max (х, у) 100) printf (greater);
for (ch=getchar(); isdigit(ch); ) …;
Тем не менее функция не может стоять с левой стороны оператора присваивания. Оператор типа
swap (х, у) = 100; /* некорректный оператор */
неправилен. Компилятор выдаст ошибку.
Если функция объявляется как void, она не может использоваться в выражениях. Например, предположим, что f() объявлена как void. Следующие операторы не будут компилироваться:
int t;
t = f(); /* нет значения для присваивания t */
f() + f(); /* нет значений для сложения */
Хотя все функции не типа void имеют значения возврата, при написании программ обычно используется три типа функций.
• Способы передачи параметров в подпрограмму: по значению, с помощи адреса, по ссылке. Отличие использования. Примеры.
Передача параметров по значению
Этот режим передачи параметров применяется по умолчанию. Если параметр передается по значению, создается локальная копия данной переменной, которая и предоставляется для обработки в процедуру или функцию. Посмотрите на следующий пример:
procedure Test(s: string);
Для передачи параметров по ссылке используется ключевое слово var, помещаемое в список параметров вызываемой процедуры или функции.
procedure ChangeMe(var x: longint);
begin
x := 2; // Параметр х изменен вызванной процедурой
end;
Вместо создания копии переменной x, ключевое слово var требует передачи адреса самой переменной x, что позволяет процедуре непосредственно изменять ее значение.
• Массивы как параметры процедур (функций). Примеры организации передачи параметров в виде массива на языке С.
Два способа использования одномерных массивов в качестве параметров функции.
I способ. Синтаксис:
тип_функции имя_функции ( тип_массива имя_массива [ n ] )
{ тело функции}
n – количество элементов в массиве
Вызов функции: имя_функции (имя_массива);
Используется для массивов одинаковой длины.
Пример: Написать функцию нахождения минимума в одномерном массиве.
int mini (int a[n])
{ int min = 999;
for(int i = 0; i n; i ++)
if (a[i] min) min = a[i];
return min;
}
Вызов функции в главном модуле:
main()
{ int mas[m], tmin;
…………………
tmin = mini (mas);
…………………
}
II способ. Синтаксис:
тип_функции имя_функции ( тип_массива имя_массива [ ], int n )
{ тело функции}
n – количество элементов в массиве
Вызов функции: имя_функции (имя_массива, кол-во элементов мас-ва);
В определении функции используется два формальных параметра, значит и при вызове тоже используется два фактических параметра (имя массива и количество элементов). Второй способ используется, когда функция с таким описанием формальных параметров, используется для массивов разной длины.
Напишите функцию, которая подсчитывает среднее арифметическое элементов массива, кратных 3. В программе объявите 2 массива разной длины.
#include
#include
# define n 5
# define m 7
float sredn (int a[],int t)
{ float sr,sum=0;
int kol=0;
for(int i=0;i
if (a[i]%3==0)
{sum=sum+a[i];
kol=kol+1;
}
sr=sum/kol;
return sr;
}
void main()
{ int b[n], c[m], i;
float sr1, sr2;
cout
for (i=0;i
cinb[i];
cout
for (i=0;i
cinc[i];
sr1 = sredn (b, n);
sr2 = sredn (c, m);
cout
cout
getch();
}
• Массивы символов и символьные строки: определение, различие и примеры описания на языке С. Организация в памяти.
Любая символьная константа, представляет собой массив символов. Во внутреннем представлении компилятор завершает такой массив символом \0, так что любая программа может по нему легко обнаружить конец строки. Поэтому строка занимает в памяти на один символ больше, чем записано между двойными кавычками. Нумерация элементов массива начинается с нуля. Надо помнить, что, например ‘T’ — это символ(буква), а ‘ T ‘ — это строка, состоящая из двух символов: ‘T’ и ‘\0’. Отсюда следует, что пустых строк не бывает.
Строка
в языке Си — это разновидность константы и ее можно присваивать некоторой
переменной, представляющей массив символов:
char