Скачать презентацию Занятие 2 Курс Основы программирования План занятия Скачать презентацию Занятие 2 Курс Основы программирования План занятия

2 Разбор текста, ветвления.pptx

  • Количество слайдов: 18

Занятие 2 Курс Занятие 2 Курс "Основы программирования"

План занятия 1. Интерпретация языка машиной 2. Вычисление выражений 3. Ветвление, условия 4. « План занятия 1. Интерпретация языка машиной 2. Вычисление выражений 3. Ветвление, условия 4. « if else » / « ? : »

Уровни интерпретации 1. Синтаксический: правильность написания 2. Лексический: смысловой уровень 3. Структурный: блоки программы Уровни интерпретации 1. Синтаксический: правильность написания 2. Лексический: смысловой уровень 3. Структурный: блоки программы Термин: «парсинг» , англ. Parse – разбор (текстовой строки, например)

Синтаксический разбор Символ за символом считывает текст программы, пытаясь найти лексемы. • Лексема – Синтаксический разбор Символ за символом считывает текст программы, пытаясь найти лексемы. • Лексема – смысловая еденица. Например: int abcd = 8, k; // лексемы int, abcd, =, 8, ‘, ’, k. float x = 0. 5. 2; // 0. 5. 2 – недопустимо

Лексический разбор Получает лексемы, одну за другой, пытаясь собрать структурные элементы. int main( ) Лексический разбор Получает лексемы, одну за другой, пытаясь собрать структурные элементы. int main( ) // элементы: тип int, имя функции main, список аргументов ( ) { // начало тела функции return 0; // операция возврата } // конец тела функции void g( ) { int x = 22; // операция присвоения int; // недопустимые сочетания int a b 0; }

Структурный разбор Получая структурные элементы, собирает из них допустимые программные конструкции. void g( ) Структурный разбор Получая структурные элементы, собирает из них допустимые программные конструкции. void g( ) // заголовок функции { int x = 22; // операция присвоения void p() { } // внутри функции нельзя } // функция завершена return 0; // снаружи функции нельзя

Простейший пример разбора int a 1 = 2; Ввод a-z, _ 0 -9 = Простейший пример разбора int a 1 = 2; Ввод a-z, _ 0 -9 = ; , ‘ ‘ 1 пусто 2 3 4 5 2 имя? 2 2 5 1 3 число? 5 3 5 1 4 присв. 5 5 5 1 5 ошибка! 5 5 5 1 State i – первый символ, возможно имя in, int – 2 й и 3 й символы, то же ‘int ’ – пробел, последнее состояние передаётся в лексический блок (имя). a – первый символ, возможно имя a 1 – всё ещё допустимое имя ‘a 1 ’ – пробел, имя передано в лексический блок. ‘=’ – оператор присвоения ‘= ’ – пробел, оператор передан в лексический блок. 2 – первый символ, возможно число 2; – число передано в лексический блок

В виде графа состояний Ввод a-z, _ 0 -9 = ; , ‘ ‘ В виде графа состояний Ввод a-z, _ 0 -9 = ; , ‘ ‘ 1 пусто 2 3 4 1 2 имя? 2 2 5 1 3 число? 5 3 5 1 4 присв. 5 5 5 1 5 ошибка! 5 5 5 1 a-z, _ имя? State 0 -9 ; , ‘ ’ число? ; , ‘ ’ a-z, _, = пусто = = ; , ‘ ’ a-z, _, 0 -9 присв. a-z, _, 0 -9, = ошибка! a-z, _, 0 -9, =

Вычисление выражений • Вычисления идут как бы по действиям, например 2 * 3 + Вычисление выражений • Вычисления идут как бы по действиям, например 2 * 3 + 4 или 2 * (3 + 4) • Если встречается имя переменной, то подставляется её значение Пример: x = 5, a = x + 1 после подстановки a = 5 + 1 • Если встречается вызов функции, то подставляется результат вычисления Пример: int f(int x) {return x+3}, a = f(4) + 2 после вычисления a = 7 + 2 Как же компьютер формирует порядок вычисления? 2 * 3 + 4 или 2 * (3 + 4)

Обратная польская запись На примерах: a+b ab+ аргументы слева, действие справа a+b*c a bc* Обратная польская запись На примерах: a+b ab+ аргументы слева, действие справа a+b*c a bc* + то же, но второй арг. для + это результат bc* a+b*с+d a bc* + d+ просто добавили ещё одно слагаемое Скобки: a–b+c ab– c+ a – (b + с) a bc+ – Как это считать? • Встречая переменную – «запоминаем» её в очередь • Встречая действие – производим его над двумя последними «запомненными» переменными, а результат «запоминаем»

Типизация вычислений • float * int = float (С) • float * double = Типизация вычислений • float * int = float (С) • float * double = double (С) • string + int = string (JS) Общее правило таково: если в операции участвуют операнды разных, но совместимых типов, результат операции будет выдан в виде самого вместительного типа данных.

Ветвление Программа может менять поведение в зависимости от верности некоторого утверждения – «условия» . Ветвление Программа может менять поведение в зависимости от верности некоторого утверждения – «условия» . Идёт дождь. • Верно – Открыть зонт. • Не верно – Не открывать зонт.

Запись в коде С и JS • if – англ. «если» • else – Запись в коде С и JS • if – англ. «если» • else – англ. «иначе» if(x > 1) // условие x = 1; // действие if(x == x else // x = x 1) * 2; // когда верно только если есть if! / 2; // когда не верно

Тернарная операция • ternarius – лат. «тройной» (три операнда) Запись: условие? результат1: результат2 if(x Тернарная операция • ternarius – лат. «тройной» (три операнда) Запись: условие? результат1: результат2 if(x == x else // x = x 1) * 2; // когда верно только если есть if! / 2; // когда не верно x = x==1? x*2: x/2;

if else на C и JS 1. Используем навыки работы с инструментами, полученные на if else на C и JS 1. Используем навыки работы с инструментами, полученные на первом занятии. 2. Пишем программу нахождения значения y=f(x) по графику заданному ниже: Y 1 -6 0 1 X

Псевдокод x = число если x < 0 y = «формула для x<0» иначе Псевдокод x = число если x < 0 y = «формула для x<0» иначе y = «формула для x>=0»

Используем ввод С Задача: Организовать ввод значения переменной Х с клавиатуры. Справка: • С Используем ввод С Задача: Организовать ввод значения переменной Х с клавиатуры. Справка: • С – scanf использует форматированный ввод: int a; float b; scanf(“%i %f”, &a, &b); Вводим “ 3 1. 2” с клавиатуры, числа заносятся в указанные переменные.

Домашнее задание 1. Повторить задание, сделанное в классе с использованием тернарного оператора. 2. Написать Домашнее задание 1. Повторить задание, сделанное в классе с использованием тернарного оператора. 2. Написать программу, выводящую строку «чётный» , если номер Вашего варианта является чётным. И наоборот. Чётность должна определить именно программа.