01_Introduction.ppt
- Количество слайдов: 59
Прикладная математика и информатика Языки и методы программирования Алтайский государственный университет Математический факультет Кафедра информатики Барнаул 2013
Фундаментальная информатика и информационные технологии Основы программирования Алтайский государственный университет Математический факультет Кафедра информатики Барнаул 2013
3 Лекция 1 n План ¨ Организация курса n n Преподаватели Содержание курса Организация практических занятий Учебные материалы ¨ Основы алгоритмизации ¨ Быстрое введение в язык Си
Организация курса n n n Преподаватели Организация курса Содержание занятий Принципы оценивания Учебные материалы
5 Организация курса Преподаватели n n n Жилин Сергей Иванович зав. кафедрой информатики, доцент n Группы – 432, 434 Консультации – по расписанию Расписание – на доске объявлений каф. информатики Кафедра информатики – ауд. 415 Л
6 Организация курса Преподаватели n n n Смолякова Лариса Ленгардовна старший преподаватель кафедры информатики n Группы – 433 Консультации – по расписанию Расписание – на доске объявлений каф. информатики Кафедра информатики – ауд. 415 Л
7 Организация курса I семестр n n Лекции Практикум Зачет Экзамен 16 16 II семестр 16 16 n Зачет – по результатам выполнения лабораторных работ и промежуточных тестов Экзамен – в письменной форме n Итоговая оценка за экзамен n О = 0. 5*Э + 0. 3*Л + 0. 2*Т Э – оценка за экзаменационную работу Л – средняя оценка за лабораторные работы Т – средняя оценка за тесты
Организация курса Содержание лекций n n Программирование на языке Си (I семестр) Алгоритмы и структуры данных (II семестр) 8
Организация курса Содержание лекций n Программирование на языке Си (I семестр) ¨ Основы алгоритмизации ¨ Быстрое введение в язык Си ¨ Базовые типы данных и операции ¨ Управляющие конструкции. Функции ¨ Массивы, строки, структуры ¨ Указатели, Динамическое распределение памяти ¨ Файлы n Алгоритмы и структуры данных (II семестр) 9
Организация курса Содержание лекций n n Программирование на языке Си (I семестр) Алгоритмы и структуры данных (II семестр) ¨ Алгоритмы. Сложность алгоритмов ¨ Абстрактные типы данных ¨ Сортировка и поиск ¨ Списки. ¨ Стэки. Очереди. Дэки ¨ Деревья ¨ Хэширование ¨ Графы и алгоритмы на графах ¨ Алгоритмы вычислительной геометрии ¨ Поиск с возвратом 10
Организация курса Содержание практических занятий n n Практические занятия = лаб. работы + тесты Программирование на языке Си (I семестр) 1. 2. 3. 4. 5. n Линейный вычислительный процесс Ветвящийся вычислительный процесс Циклический вычислительный процесс Массивы Структуры. Функции Алгоритмы и структуры данных (II семестр) 1. 2. 3. Строки. Файлы Сортировка Абстрактные типы данных 11
Организация курса Принципы оценивания n n Отчет о лабораторной работе защищается очно Критерии оценивания (по убыванию приоритета) 1. 2. 3. 4. 5. n n Способность автора внятно изложить идею алгоритма и отвечать на вопросы по исходному коду программы. Работоспособность программы. Эффективность алгоритмов. Соблюдение автором «правил хорошего тона» при построении исходного кода. Оригинальность алгоритмов и/или их реализации. Выполнение основной части лабораторной работы позволяет получить оценку « 3» Оценка может быть повышена при выполнении усложненных заданий 12
Организация курса 13 Учебные материалы n n n n Таблица текущей успеваемости Results-1314* Слайды к лекциям* Электронные книги* Видео-ролики* Книги Сайты Компиляторы и среды разработки * * Доступны в компьютерных классах на P: CoursesZhilinC
Организация курса Электронные книги 1. Голуб А. И. С и С++: Правила программирования 2. Громов Ю. Ю. , Татаренко С. И. Программирование на языке Cи P: BooksGolub. pdf P: BooksGromov. Tatarenkodir. htm 3. 4. Дейтел Х. М. , Дейтел П. Дж. Как программировать на C Керниган Б. , Ритчи Д. Язык С 5. Кучин Н. В. , Павлова М. М. Основы программирования на языке Си P: BooksDeitel. pdf P: BooksKernigan. Ritchieindex. html P: BooksKuchin. Pavlova. pdf 6. 7. Подбельский В. В. , Фомин С. С. Программирование на языке Си 8. Поляков К. Программирование на языке Си 9. Пахомов Б. C/C++ и MS Visual C++ 2008 для начинающих Богатырев А. Руководство полного идиота по программированию (на языке Си) P: BooksPahomov. djvu P: Books Podbelski. Fomin. djvu P: BooksPolyakovdevcpp_1. pdf P: BooksBogatyrev. pdf 10. Уэйт М. и др Язык Си: руководство для начинающих 14
Организация курса Книги в библиотеке АГУ www. lib. asu. ru 1. Голуб А. И. С и С++: Правила программирования. М. : БИНОМ, 1996. – 272 с. (32. 973. 26 А 484) 2. Давыдов В. Г. Программирование и основы алгоритмизации. М. : Высшая школа, 2003. – 447 с. (32. 973. 26 Д 138) 3. Джехани Н. Программирование на языке Си. М. : Радио и связь, 1988. – 272 с. (32. 973. 2 Д 409) 4. Жешке Р. Толковый словарь стандарта языка Си. СПб. : Питер, 1994. – 221 с. (32. 973. 2 Ж 655) 5. Керниган Б. В. , Ритчи Д. М. Язык программирования Си. М. : Финансы и статистика, 1992. – 272 с. (32. 973. 26 К 362) 6. Крупник А. Изучаем Си. СПб. : Питер, 2001. – 256 с. (32. 973. 26 К 845) 7. Павловская Т. А. С/С++. Программирование на языке высокого уровня. СПб. : Питер, 2007. – 461 с. (32. 973. 26 П 124) 8. Подбельский В. В. Практикум по программированию на языке Си. М. : Финансы и статистика, 2004. – 576 с. (32. 973. 26 П 44) 9. Тондо К. Язык Си: книга ответов. 15
Организация курса Электронная библиотечные системы «Лань» и «Университетская билиотека online» 16
Организация курса Электронная библиотека издательства «Лань» n Издательство «Лань» предоставляет бесплатный доступ к электронным изданиям для высшей школы n Доступ возможен только из сети Алт. ГУ n Больше информации – на www. lib. asu. ru Книги от «Лани» n Вирт Н. Алгоритмы и структуры данных. Новая версия для Оберона n Липман С. , Лажойе Ж. Язык программирования С++. Полное руководство n Потопахин В. Современное программирование с нуля! n Ховард М. , Лебланк Д. , Виега Д. 19 смертных грехов, угрожающих безопасности программ. Как не допустить типичных ошибок n … 17
Организация курса Сайты 1. Code. Net. ru – все для программиста http: //www. codenet. ru/cat/Languages/C-CPP/ 2. C Programming and C++ Programming http: // cprogramming. com/ 3. http: //www. cprogrammingreference. com/ 4. C Programming questions with solution http: //cquestionbank. blogspot. com/ 5. C Programming Reference Библиотека программиста http: //www. progbook. net/ 6. Интернет университет информационных технологий http: //www. intuit. ru/catalog/se/pl/ 7. Описание языка программирования ANSI C http: //linfoline. homedns. org/ansi-c. html 8. Поляков К. Язык программирования Си. Практический курс. http: //kpolyakov. narod. ru/school/c. htm 9. Язык Си в примерах – Викиучебник http: //ru. wikibooks. org/wiki/Язык_Си_в_примерах 10. Информатика и ВТ – все для студентов УГАТУ http: //www. twirpx. com/files/informatics 18
Организация курса Компиляторы и среды разработки n Microsoft Visual Studio 2008 Основной вариант n Инсталлирован в классах n Лицензионный дистрибутив можно получить бесплатно n n Cм. раздел MSDN AA на сайте МФ: www. math. asu. ru Контактное лицо – Иван Кунгуров (msdnaa@math. asu. ru) Microsoft Visual С++ 20 xx Express Свободно распространяемый вариант n Дистрибутив n n www. microsoft. com/express/vc/ 19
Организация курса Компиляторы и среды разработки Свободно распространяемые среды разработки n Bloodshed Dev-Cpp http: //www. bloodshed. net/devcpp. html n P: CoursesZhilinCDistrDev. Cpp n n Code: : Blocks http: //www. codeblocks. org/ n P: CoursesZhilinCDistrCode. Blocks n n Netbeans + GCC n n http: //www. netbeans. org/features/cpp Eclipse CDT + GCC n http: //www. eclipse. org/cdt/ 20
Первичные сведения о языке Си n n n Почему Си? История Простейшая программа
Быстрое введение в язык Си Почему Си? n Один из наиболее популярных языков программирования n Синтаксис языка Си является основой для многих других языков программирования (С++, Java. Script, С# и пр. ) n Программы на Си хорошо переносимы между различными платформами (компиляторы Си существуют, практически, для всех типов процессоров) n Сочетает в себе черты языков низкого и высокого уровней 22
Организация курса Популярность ЯП n TIOBE Programming Community Index for July 2012 ¨ Количество запросов на Google 23
Организация курса 24 Популярность ЯП n TIOBE Programming Community Index for September 2013 ¨ Количество запросов на Google
Организация курса 25 Популярность ЯП n TIOBE Programming Community Index for September 2013 ¨ Количество запросов на Google
Организация курса Популярность ЯП Red. Monk’s language ranking for February 2012 Popularity Rank on Stack Overflow (# of Tags) n Popularity Rank on Git. Hub (# of Projects) 26
Быстрое введение в язык Си История n Развитие языков программирования 27
28 Быстрое введение в язык Си История n n Восходит к языку B (К. Томпсон), который восходит к языку BCPL (Д. Мартин, 1967) Разработан между 1969 и 1973 годами вместе с ОС Unix Основной вклад в разработку принадлежит Деннису Ритчи (Dennis Ritchie) Изначально предназначался для системного программирования, т. е. создания Операционных систем ¨ Компиляторов ¨ Утилит (служебных программ) ¨ Деннис Ритчи
Быстрое введение в язык Си История n Разработка велась на микро. ЭВМ DEC PDP-11 Оперативная память – 24 Кб ¨ Из них используется ОС – 12 Кб ¨ n Задачи Разработка нового языка программирования ¨ Разработка на нем операционной системы ¨ 29
Быстрое введение в язык Си История Д. Ритчи (слева) и К. Томпсон (справа) перед PDP-11 с двумя текстовыми терминалами (1972) Фото с домашней страницы Д. Ритчи: http: //www. cs. bell-labs. dom/who/dmr/ 30
Быстрое введение в язык Си История n Первый стандарт (описание языка) опубликован Д. Ритчи и Б. Керниганом в 1978 (K&R-C) n В слегка модифицированном виде язык был стандартизован ANSI в 1989 г. (ANSI-C) n Международный стандарт языка утвержден ISO в 1999 г. (С 99) ¨ См. P: CoursesZhilinCBooksC 99 -standard-draft. pdf 31
32 Быстрое введение в язык Си Простейшая программа главная (основная) программа всегда имеет имя main() { «тело» программы (основная часть) начало программы } конец программы ? Что делает эта программа?
33 Быстрое введение в язык Си Вывод текста на экран include = включить #include
34 Быстрое введение в язык Си Ждем нажатия любой клавиши #include
35 Быстрое введение в язык Си Переход на новую строку #include
Быстрое введение в язык Си Упражнения 1. Вывести на экран текст «лесенкой» Вася пошел гулять 2. Вывести на экран рисунок из букв Ж ЖЖЖЖЖЖЖ HH HH ZZZZZ 36
Организация курса Домашнее задание 1. В книге Дейтел Х. М. , Дейтел П. Дж. Как программировать на C прочитать Главы 1 -3. 2. Самостоятельно вспомнить/усвоить основные понятия алгоритмизации 37
Основы алгоритмизации n n n n Алгоритм: определение Алгоритм: свойства Алгоритм: исполнитель Алгоритм: формы записи Алгоритмические структуры Программы: виды ошибок Языки программирования
Основы алгоритмизации Алгоритм: определения n Алгоpитм — заранее заданное понятное и точное пpедписание возможному исполнителю совеpшить определенную последовательность действий для получения решения задачи за конечное число шагов n Алгоpитм — точное описание последовательности действий, направленных на получение из заданного начального состояния определенного результата n Алгоpитм — 1) план того, что должно быть сделано, выполнено 2) закодированная информация, вводимая в компьютер для управления его деятельностью 39
Основы алгоритмизации Алгоритм: исполнитель n Исполнитель алгоритма — это некоторая абстрактная или реальная (техническая, биологическая или биотехническая) система, способная выполнить действия, предписываемые алгоритмом n Исполнителя хаpактеpизуют: сpеда ¨ элементаpные действия ¨ cистема команд исполнителя (СКИ) ¨ отказы ¨ 40
Основы алгоритмизации Алгоритм: свойства n Понятность для исполнителя ¨ n Дискpетность (прерывность, раздельность) ¨ n при одинаковых исходных данных алгоритм должен выдавать один и тот же результат Массовость ¨ n алгоритм должен приводить к результату за конечное число шагов Определенность (детерминированность) ¨ n алгоpитм должен состоять из отдельных шагов (этапов). Результативность (конечность) ¨ n исполнитель алгоритма должен понимать, как его выполнять алгоритм должен решать целый класс однотипных задач с различными конкретными значениями исходных данных Корректность ¨ алгоритм должен давать верное решение при любых допустимых исходных данных 41
Основы алгоритмизации Алгоритм: формы записи n Словесная ¨ n Графическая ¨ n изображения из графических символов Псевдокоды ¨ n запись на естественном языке полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и др. Программная ¨ тексты на языках программирования 42
Основы алгоритмизации Алгоритм: словесная форма записи n n n Алгоритм записывается в виде пронумерованной последовательности шагов на естественном языке Алгоритмы в словесной форме записи адресованы человеку Пример: Алгоритм сложения двух чисел (a и b) 1. Спросить, чему равно число a 2. Спросить, чему равно число b 3. Сложить a и b, результат присвоить c 4. Сообщить результат c 43
Основы алгоритмизации Алгоритм: графическая форма записи n При графическом представлении алгоритм изображается в виде последовательности связанных между собой функциональных блоков, каждый из которых соответствует выполнению одного или нескольких действий n Алгоритмы в графической форме записи адресованы преимущественно человеку n Примеры: Схема сборки мебели ¨ Блок-схемы алгоритмов ¨ 44
Основы алгоритмизации Алгоритм: графическая форма записи n Блок-схемы алгоритмов ¨ См. http: //ru. wikipedia. org/wiki/Блок-схема 45
46 Основы алгоритмизации Блок-схемы: основные обозначения Терминатор Отображает вход или выход из внешней среды (чаще всего начало и конец программы). Процесс Выполнение операций, обработка данных. Внутри указываются операции. Например: a = 10*b + c. Решение Отображает функцию переключательного типа с одним входом и двумя или более альтернативными выходами. Предопределенный процесс Отображает выполнение именованного процесса, определенного в другом месте программы (подпрограмма). Ввод-вывод Преобразование данных в форму, пригодную для обработки (ввод) или отображения результатов обработки (вывод). Границы цикла Символ из двух частей – начала и конца цикла. Операции, выполняемые внутри цикла, размещаются между ними. Условия цикла и приращения записываются внутри символа начала или конца цикла в зависимости от типа цикла. Соединитель Отображает выход в часть схемы и вход из другой части этой схемы. Используется для обрыва/продолжения линии. Комментарий Используется для более подробного описания шага, процесса или группы процессов.
Основы алгоритмизации Алгоритм: запись в псевдокодах n Псевдокод представляет собой систему обозначений и правил, предназначенную для единообразной записи алгоритмов; ¨ занимает промежуточное место между естественным и формальным языками; ¨ обычно не подчинен строгим синтаксическим правилам записи команд; ¨ содержит некоторые конструкции, присущие формальным языкам. ¨ n Примеры: Алгоритм на школьном алгоритмическом языке ¨ Паскаль + русский язык ¨ 47
Основы алгоритмизации Алгоритм: запись в псевдокодах n Пример. Алгоритм на школьном алгоритмическом языке алг Сумма квадратов (арг цел n, рез цел S) дано | n > 0 надо | S = 1*1 + 2*2 + 3*3 +. . . + n*n нач цел I ввод n; S: =0 нц для i от 1 до n S: =S+i*I кц вывод "S = ", S кон 48
Основы алгоритмизации Алгоритм: программная запись n Программная запись на специальном языке программирования ¨ осуществляется строго в соответствии с правилами (синтаксисом) языка программирования ¨ Понятна человеку, но предназначена формальному исполнителю (компьютеру, другому устройству, программе и т. п. ) ¨ n Примеры: Программа на языке программирования Pascal ¨ Программа на языке описания графических сцен POV-Ray ¨ Описание веб-страницы на языке разметки гипертекста HTML и языке сценариев Java. Script ¨ 49
Основы алгоритмизации Алгоритм: программная запись n Пример. Программа на языке программирования Pascal 50
Основы алгоритмизации Языки программирования n Машинно-ориентированные языки низкого уровня ¨ каждая команда соответствует одной команде процессора ¨ специфичны для конкретной платформы ¨ n Языки высокого уровня (алгоритмические языки) приближены к естественным языкам ¨ понятнее и удобнее для человека ¨ не зависят от конкретного компьютера ¨ 51
52 Основы алгоритмизации Языки программирования n n Арифметическое выражение Запись на алгоритмическом языке y = 3*(4*x*x+3*x)/(10–x); n Запись на ассемблере fld fmul faddp fmul fld fsub fdivp fstp dword ptr dword ptr st(1), st dword ptr [@2] [ebp-4] [@2+4] [ebp-4] [@2+8] [ebp-4] [ebp-8]
53 Основы алгоритмизации Языки программирования n Перевод с алгоритмического языка в числовые коды выполняет транслятор Решить уравнение Составить программу Программа в машинных кодах Программа на алгоязыке var a, b: real; begin a : = 2; b : = a*2+7; . . . end. Трансляция 101001 1101010 100001. . . 011101 Исполнить программу
Основы алгоритмизации Языки программирования n Часто для построения программы необходимо использовать несколько разных модулей (файлов) и/или стандартные модули m 1. c int code() m 2. c { code = 10; #include “m 4. h” } void m 2() { m. N. c float c=2; char df(int a) { x=d+f; put(c); #include “m 2. h” } … void main() { } float a=2, b; b = a*2+7; … } 54
55 Основы алгоритмизации Языки программирования n В этом случае транслятор строит программу в числовых кодах (объектные файлы) отдельно для каждого модуля m 1. c int code() m 2. c m 1. obj 10100101 m 2. obj { 11010101 code = 10; #include “m 4. h” Транслятор 10100101 10101000 } void m 2() { 10010101 10000111 m. N. c float c=2; Транслятор char df(int a) {. . . m. N. obj 10111000 x=d+f; put(c); 101001111011 #include “m 2. h” } … 10100101. . . void main() { } 11010101 01101011 float a=2, b; 1010 Транслятор b = a*2+7; 10110111 …. . . } 10101011
56 Основы алгоритмизации Языки программирования n Окончательную сборку приложения (exe-файла) из объектных файлов производит линковщик (от англ. link – связывать) m 1. c int code() m 2. c m 1. obj 10100101 m 2. obj { 11010101 code = 10; #include “m 4. h” Транслятор 10100101 10101000 } void m 2() { 10010101 10000111 m. N. c float c=2; Транслятор char df(int a) {. . . m. N. obj 10111000 x=d+f; put(c); 101001111011 #include “m 2. h” } … 10100101. . . Линковщик void main() { } 11010101 01101011 float a=2, b; 1010 Транслятор b = a*2+7; 10110111 …. . . } 10101011 m. exe 10100101 11010101 10101010 10110111. . . 10101011
57 Основы алгоритмизации Языки программирования n Программа, осуществляющая и трансляцию программ, и сборку приложения из объектных файлов, называется компилятором pr. c pr. obj pr. exe #include “m 2. h” void main() { float a=2, b; b = a*2+7; … } 10100101 11010101000 10000111. . . 01111011 Трансляция Линковка
58 Основы алгоритмизации Языки программирования n Программа, осуществляющая и трансляцию программ, и сборку приложения из объектных файлов, называется компилятором pr. c pr. obj pr. exe #include “m 2. h” void main() { float a=2, b; b = a*2+7; … } 10100101 11010101000 10000111. . . 01111011 Компиляция Линковка Трансляция
59 Вопросы и ответы Вопросы? n Организация курса ¨ ¨ ¨ n Быстрое введение в язык Си ¨ ¨ ¨ n Преподаватели Организация курса Содержание занятий Принципы оценивания Учебные материалы Почему Си? История Простейшая программа Переменные и типы Операции и функции Ввод/вывод Основы алгоритмизации ¨ ¨ ¨ ¨ Алгоритм: определение Алгоритм: свойства Алгоритм: исполнитель Алгоритм: формы записи Алгоритмические структуры Программы: виды ошибок Языки программирования Н. Копейкин Битва снеговиков с углевиками


