Языки программирования Вячеслав Александрович Просенюк Алгоритмы Это точное предписание определяющее вычислительный процесс ведущий от варьируемых начальных данных к искомому результату. Под точным предписанием стоит понимать систему правил, которая определяет содержание и порядок действий над исходными данными и промежуточными результатами. Алгоритм обладает следующими свойствами: Детерминированность – при заданных исходных данных обеспечивается однозначность искомого результата Массовость – пригодность для задач данного типа при исходных данных принадлежащих заданному подмножеству Результативность – реализуя вычислительный процесс выполняется за конечное число этапов с выдачей осмысленного результата Дискретность – расчленение на отдельные этапы выполнение которых не вызывает сомнения Характеристика изобразительных средств алгоритма Способы описания алгоритма: Словестный Алгоритмические языки Графический Словестный способ записи алгоритмов основан на задании указаний выполнения конкретных действий в определенной последовательности с использованием математических символов и выражений в сочетании со словестными пояснениями. y={█(√x+5@x-6)┤,если ■(x>0@X≤0) По своей структуре различают следующие типы алгоритмов: линейный, разветвляющийся, циклический. Линейным называют такой алгоритм в котором самостоятельные этапы выполняются линейно/последовательно. Процесс называется разветвляющийся если в зависимости от исходных данных или промежуточных результатов он реализуется по одному из нескольких заранее предусмотренных направлений. Циклическим называют такой процесс в котором часть пунктов выполняются многократно. Графический способ описания – это изображение логической структуры алгоритма, в котором каждый этап процесса обработки данных представляется в виде геометрических фигур имеющих определенную конфигурацию и в зависимости от характера выполняемых функций. Терминатор. Начало и завершение схемы алгоритма. Прерывание процесса обработки данных или выполнение программы Процесс. Выполнение операции или группы операций в результате которых изменяются значения, форма представления или расположение данных Решение. Выбор одного из ряда альтернативных выходов в зависимости от вычисления условия внутри символа Ввод/Вывод. Преобразований данных формул пригодных для обработки или регистрации результатов обработки Предопределенный процесс. Вызов подпрограммы, функции или процедуры. Соединитель. Указывает связь между предопределенными линиями потока Потоки управления. Указание последовательности между символами схемы Комментарий. Символы должны быть одного размера. Внутри символа помещается минимум текста для понимания функции данного символа. Текст должен записывать с лева на право и сверху вниз. Если объем текста превышает объем символа то текст пишется в комментарии. Потоки управления указываются линиями. Направление потока так же указывается слева на право и сверху вниз. Линии потока имеющие вверх или на право дополняются стрелками. Линии должны быть направлены к центру символа. При необходимости линии в схемах стоит разрывать для избегания пересечения или слишком длинных линий, а так же если схема состоит из нескольких страниц. Соединитель в начале разрыва называется внешним, а соединитель в конце разрыва – внутренним. 16.01.2013 Структура программа на языке С++ Структура программы на данном языке представляет собой некоторую совокупность функций из которой одна является главной и присутствует в каждой программе. Эта функция носит стандартное имя main и с нею начинается выполнение программы. #include <stdio.h> //1 #include <conio.h> //2 void main{ //3 int a,b,rez; //4 Printf("\n Введите А и Б:"); //5 Scanf("%d%d",&a,&b); //6 rez=a+b; //7 Printf("Rez=%d",rez); //8 getch(); //9 } //10 /* */ - многострочный комментарий // - строчный комментарий 1,2 – дерективы препроцесса. Добавляют в текст программы содержимое внешних файлов. Если прописать не через <> а через “” то сначало будет искать в папке проекта. 3 – главная функция. Void – не возвращает данные, а если надо то указываем тип данных. 4 – объявление переменных. Можно указать сразу ее значение. (int kol=6;) 5 – Вывод данных. \n – новая строка. 6 – ввод данных. %d – спецификация данных для целых чисел. 7 – сложение, присвоение. 8 – вывод rez 9 – задержка, читает с клавы символ 10 – конец Для запуска программы необходимо выполнить следующие действия: Подготовить текст программы в файле с разрешением .cpp Передать этот файл на компиляцию Устранить выявленные синтаксические ошибки Без ошибочно откомпилировать Дополнить объектный файл нужными библиотечными функциями и получить исполняемый модуль программы в файле с разрешением .exe Функция printf служит для чтения информации с клавиатуры и имеет следующий синтаксис: printf (управляющая строка, список вывода); Список вывода – это последовательность идентификаторов переменных, констант, выражений, вычисляемых перед выводом на печать. Каждому аргументу из списка вывода должна соответствовать одна спецификация преобразования. Управляющая строка – это строка символов, содержащая информацию, печатаемую текстуально, спецификации преобразования, специальные символы. Частые специальные символы в С++: /n – перевод курсора на новую строку /t – символ табуляции (Tab) /b – шаг назад /r – возврат коретки /007 – выдается короткий звуковой сигнал Функция scanf служит для чтения информации с клавиатуры и имеет следующий синтаксис. Scanf (управляющая строка, список ввода); %с – тип char %d – тип int %f – тип float с фиксированной точкой %e – float в экспониациниальной форме 17.01.2013 Типы данных в С++ Тип данных определяет: Внутреннее представление данных памяти компьютера Множество значений, которые могут принимать величины этого типа Операции и функции, которые можно применять к величинам этого типа Основные типы данных Целый – int Символьный – char Расширенный символьный – wchar_t Логический – bool Вещественный – float Вещественный с двойной точностью – double 1-4 целочисленные, 5,6 с плавающей точкой. Спецификаторы типов – уточняющее внутреннее представление и диапазон стандартных типов. Short Long Signed – знаковый Unsigned – не знаковый Целый тип Таблица размеров типов Длинна, байт Название Назначение Диапазон значений 1 Unsigned char Небольшие целые числа и коды символов 0 – 255 1 Char Очень малые целые числа и ASCII коды -128 – 127 2 Unsigned int Большие целые и счетчики циклов 0 – 65535 2 Int Небольшие целые -132768 – 32767 2 Short int Небольшие целые -132.768 – 32.767 4 Unsigned long Остраномические расстояния 0 – 4.294.967.295 4 Long Большие числа -2.147.483.648 – 2.147.483.647 Вещественный тип Под данными вещественного типа понимаются числа записанные с десятичной точкой. Существует две формы представления чисел с фиксированной и плавающей точкой. 1,36 – фикс точка 1,3е0 – плавающая точка Длинна, байт Название Диапазон значений Кол-во значащих цифр 4 Float 3,4е-38 – 3,4е+38 7 – 8 8 Double 1,7e-308 – 1,7e+308 15 – 16 10 Long double 3,4e-4932 – 3,4e+4932 19 – 20 Тип char Для значений типа char выделяется 1 байт. Он может быть знаковым и без знаковым. В величинах без знаков можно хранить значения от -128 до 127. При использовании величин без знака значения могут быть от 0 до 255. Расширенный символьный тип – wchar_t Этот тип предназначен для работы с набором символов для кодировки которых не достаточно 1 байта, например Unicode. Размер этого типа зависит от реализации. Как правило он соответствует типу short (2 байта). Логический тип – bool Величины логического типа могут принимать только значения True и False. Внутренняя форма представления значения False это 0, любое другое значение интерпретируется как True. При преобразовании к целому типу True имеет значение 1. Тип void Он используется для определения функций, которые не возвращают значения, для указания пустого списка аргументов функции, как базовый тип для указателей и в операции приведения. Приведение типов Используется для переводов из типа в другой тип. Не явное преобразование Int a=10; Float b=5; Float c; C=a/b (имя_типа)операнд C=(float)a/b; Схема преобразования типов гарантирующие сохранение точности и не изменчивости численного значения Signed char приводится к типу short -> int -> long Float -> double -> long double Unsigned Signed -> Unsigned short -> Unsigned int -> Unsigned long 18.01.2013 Переменные и выражения Переменные Это именованная область памяти в которой хранятся данные определенного типа. класс памятиconstтип имя(инициализатор) Не обязательный параметр класс памяти может принимать следующие значения: Auto – автоматическая переменная, память для нее выделяется в стеке Extern – оно означает, что переменная определяется в другом месте программы. Static – статическая переменная, инициализируется один раз при первом выполнении оператора, содержащего определение переменной. Register – память выделяется в регистрах процессора Модификатор const показывает, что значение переменной изменять нельзя. При описании можно присвоить переменной начальное значение. Это называется инициализацией. Инициализатор можно записывать в двух формах: Со знаком равенства int a=3 Или круглыми скобками int a(3) Константа должна быть инициализирована при объявлении. Если тип инициализирующего значения не совпадает с типом переменной то выполняется преобразование типов. Область действия идентификатора – это часть программы, в которой его можно использовать для доступа связанной с ним области памяти. В зависимости от области действия переменная может быть локальной или глобальной. 19.01.2013 Операции В соответствии количеством операндов, которые используются в операциях они делаться: унарные, бинарные, тернарные. Операция Описание Унарные ++ Увеличение на 1 — Уменьшение на 1 Sizeof Определение размера переменной ~ Поразрядное описание ! Логическое отрицание - Арифметическое отрицание + Арифметическое сложение & Взятие адреса New Выделение памяти Delete Освобождение памяти Tape Операция преобразования типа Бинарные * Умножение / Деление % Остаток от деления + Сложение - Вычитание < Меньше > Больше <= Меньше или равно >= Больше или равно == Равно != Не равно &(амперсант) Поразрядная конъюнкция (и) ^ Поразрядная исключающая (или) | Поразрядная дизъюнкция (или) && Логическая «и» || Логическое «или» Тернарные ?: Условная операция Операции присваивания = Присваивание *= Умножение с присваиванием /= Деление с присваиванием %= Остаток от деления с присваиванием += Сложение с присваиванием -= Вычитание с присваиванием Операции увеличения и уменьшения на единицу. Эти операции имеют две формы записи: Префиксную (операция перед операндом) и Постфиксная (после операнда). В префиксной форме сначала изменяется операнд, а затем его значение, становится результирующим значения выражения. В постфиксной форме значением выражения является исходное значение операнда, после чего он изменяется. Операции отрицания (- ! ~) Арифметическое отрицание – изменяет знак операнда целого или вещественного типа на противоположный. Логическое отрицание – дает в результате значение 0, если операнд есть истина, и значение 1 если операнд равен 0. Поразрядное отрицание – инвертирует каждый разряд в двоичном представлении целочисленного операнда. Деление и остаток от деления Операция деление применима к операндам арифметического типа. Если оба операнда целые, то результат округляется до целого числа, в противном случае тип результата определяется правилами преобразования. Поразрядные операции При поразрядной конъюнкции вид результата равен 1 только тогда, когда соответствующие разряды оба равны 1. 01011101 10111010 00011000 При по разрядной дизъюнкции результат равен 1, тогда когда есть хоть одна единица. 01011101 10111010 11111111 Поразрядное исключающее, равен 1 только тогда, когда соответствующий бит равен 1 только у одного числа 01011101 10111010 11100111 Операции присваивания Х+=3 эквивалентно записи Х=Х+3 И так далее Условная операция (?:) Операнд1 ? операнд2 : операнд3 Эквивалентно записи if … then … else …. Если операнд1 равен истина то выполняется операнд2 иначе операнд3. 25.01.2013 Разветвляющиеся программы If (условие) <оператор 1>; else <оператор 2>; Int a,b,c; A=3; b=6; If (a>b) c=a; else c=b; ////// Int s=0; Int masi; If masi>0; S=S+I; //////// If (a>b)&&(a>c) max=a; //логическое и /////// If (a>b)||(a<c) x=a-2; //логическое или /////// If a!=0 c=b/a; ////// If (a>b) {if (a>c) max =a; Else max=c;} Else max=b; ///// {x=a+b; Print(x);} – составной оператор /////// Оператор выбора Switch (выражение){ Case (выр1): (оператор); Case (выр2): (оператор); ….. Case (вырn): (оператор); Default: (оператор);} /////// 26.01.2013 Циклические программы Оператор цикла с постусловием Do <оператор> while (<условие>); Выполняется тело цикла, потом проверяется, если условие истина, то повторяется. Если ложь – то выходит из цикла. Оператор цикла с предусловием While (<условие>) <оператор>; Сначала вычисляется условие, и если истина то выполняется тело цикла, пока условие не станет ложным. Надо найти средне-арифметическое последовательности чисел, числа вводятся с клавиатуры и останавливается ввод-кодом. Оператор цикла со счетчиком For (<п.ц.>=<н.з.>;<условие>;<коррекция п.ц.>) <оператор>; П.ц – переменная цикла; н.з. – начальное значение For (int i=1; i<10; i++) printf (“Доброе утро”); Оператор for позволяет применять операцию уменьшения в порядке убывания. For (int i=10; i>0; i--) <оператор>; For (int i=5; i<25; i+=5) <оператор>; For (char i=’a’; i<z; i++) printf(“%c,%d”,I,i); Можно опускать операторы. Если опустить все операторы то цикл будет бесконечным. 30.01.2013 Массивы <тип> <идентификатор мас> кол-во элементов; int mas 3; Int masi; for (i=0; 1<=n; i++){ ….. Программа формирует элементы массива с помощью датчика случ. Чисел, выводит числа на экран и выводит сумму всех элементов. Void main(){ int n,sum; printf (“Введите кол-во эл-тов массива”); scanf (“%d”,&n); int masn; for (i=0;i<=n;i++){ masi=random(); sum=sum+masi;} for (i=0;i<=n;i++){ printf(“%d”,masi);} printf(“%d”,sum); getch(); } Программа находит максимальный элемент массива и произведение положительных элементов массива. Void main(){ int n,max,I,p; printf (“Введите кол-во эл-тов массива”); scanf (“%d”,&n); int mas; for (i=0;i<=n;i++) scanf(“%d”,&masi); max=0; for (i=0;i<=n;i++){ if (masmax<masi) max=I;} printf(“&d”,masmax);} Сортировка массива методом пузырька Void main(){ int I,n,fl,d; n=5; for (i=0; i<=n; i++) scanf (“%d”, masi); do { fl=1; for (i=0;i<=n;i++){ if (masi>masi+1); {d=masi; masi=masi+1; masi+1=d; fl=0;}; } while (fl=1); ну и вывод массива.