Курс Программирование II IAG0582 (использование языка «С» с реализацией алгоритмов) модуль I Преподаватели: Владимир Вийес viis@ati.ttu.ee, Маргит Аарна margit@pld.ttu.ee, Вииви Йокк viivi.jokk@ttu.ee, Хеймар Веске heimar@cc.ttu.ee, Таллиннский Технический Университет 2012 Цели предмета Развитие логического и творческого мышления путем решения оригинальных задач Научиться реализовывать алгоритмы в различных средах, используя динамическое распределение памяти Использовать файлы при обработке данных и записи для баз данных Понять основы Объектно Ориентированного Программирования ООП Краткое описание курса Структурированные типы данных (Обзор) Декларация, обработка Файлы. Типовые файлы, текстовые файлы, последовательные и возвратные . Буфер. Открытие файлов для (чтения, записи, изменения) и закрытие файлов. Данные . Использование записей : ввод/вывод из файла в файл. Выстраивание элементов в файле, реакция на определенные действия. Алгоритм выстраивания записей в файле. Индексирование. Сортировка. Динамическое распределение памяти. Рекурсия Обмен данными с помощью рекурсии. Прямая и косвенная +/- использования рекурсии Ссылки Ссылки Распределение и освобождение памяти. Работа программы. Стек Структура последовательности и стека Алгоритм предоставления динамической структуры Объектно ориентированное решение Объектно ориентированные методы в построении программы (класс, метод, объект) Отладка программы Сканирование- контрольные пункты- отладка- построение – документация- составление проекта Структура курса Курс делится на 4 модуля/части: 1) Подготовка: ссылки, функции 2) Структурированные типы данных: файлы, записи 3) Использование динамической памяти: структуры 4) ООП: C++, Java Каждый модуль имеет: Учебный материал (также видео лекцию). Пример задания с объяснением его реализации. Индивидуальные задания (с тестовыми данными и ответами) Критерии оценивания Домашнее задание = 30 пунктов Письменный экзамен (2,5 ч ) + устная часть = 70 пунктов Допуск до экзамена 2+1 контрольные работы = 200 пунктов Если у вас набралось в сумме 140 пунктов, то можно получить освобождение от письменной части на экзамене. Предварительные знания Курс “ПрограммированиеII” предполагает: Что студент имеет представление о составлении алгоритмов Что студент знает основу языка С (DevC/C++) В системе Moodle указан предшествующий курс “ПрограммированиеI “, который дает базовые знания в области программирования Последние темы прошлого предмета мы повторим в рамках курса “ПрограммированиеII” Ссылки (повторение 1) Составление и использование подпрограмм (повторение 2) Повторение 1 ССЫЛКИ printf printf(“ %lf”, x); printf(“%lf”, &pi); Одинаково??? Как получить их адреса??? Ссылка #include <stdio.h> int main(void) { double pi=3.14; // переменная и ссылка одного типа double *x=&pi; printf( “%If”, *x); return 0; } Для вывода значения используется не имя переменной, а ссылка на адрес, где находится pi *x – ссылка на адрес ячейки памяти Ссылка на ссылку #include <stdio.h> int main (void) { int value= 144; int *x=&something; int **link_link=&x; printf(“variable 2l principle %d %d”, pi, *x); printf(“address %d and is different to %d”, x, *link_link); printf(“these addresses are %d, which are the same as %d”, &x, &link_link); return 0; } Попробуйте реализовать этот код! Практическое задание по использованию ссылок 1) Программа запрашивает у пользователя целочисленное значение переменной и выводит на экран. 2) Напишите ссылку для адреса этой переменной (*viit) 3) Выведите на экран значение переменной и адрес, используя ссылку 4) Выведите на экран адрес, где находится ссылка. Подфункции со ссылками На двух последующих слайдах изображена программа с передачей данных между подфункциями (sub-functions) и функцией main Используется уже знакомое нам представление, где подфункции изображены как простые переменные ( change(int a , int b) ) Следующие 2 подфункции уже реализовывают передачу данных по средством ссылок. Попробуйте сделать сами! 12 #include <stdio.h> #include <stdlib.h> void change(int a, int b) { printf("a = %d and b = %d\n" , a,b); int abi=a; a=b; b=abi; printf("a = %d and b = %d\n" , a,b); } void change2(int *p, int *q) { printf("addresses: p = %d and q = %d\n" , p,q); printf("initial values: *p = %d and *q = %d\n" , *p,*q); int abi=*p; *p=*q; *q=abi; printf("End values: *p = %d and q = %d\n" , *p,*q); } void change3(int &a, int &b) { printf("a = %d and b = %d\n" , a,b); int abi=a; a=b; b=abi; printf("a = %d and b = %d\n" , a,b); } // функция main на следующем слайде int main() { int m = 123, n=999; change(m,n); printf("change1: m=%d and n=%d\n" , m,n); change2(&m,&n); printf("сhange2: m=%d and n=%d\n", m,n); change3(m,n); printf("сhange2: m=%d and n=%d\n", m,n); system("PAUSE"); return 0; } Повторение 2 Составление подпрограмм: функции Понятие функции Функция состоит из следующих компонентов: <cпецификатор типа выходного значения> <декларатор функции><тело функции> Выходным значением может быть любая переменная (не массив) В случае функции, которая ничего не выводит в типе выходного значения пишем ключевое слово void В типе выходного значения предпочтительно использовать signed int 7.05.2016 Декларатор Под функциональным декларатором подразумевают имя функции и формальные параметры. Декларатор начинается с объявления функции, перечисление формальных параметров через запятую, и это перечисление находится в скобках. <имя функции>(<определение 1 параметра>, <определение 2 параметра>,..., <определение n параметра>) Пример: Int fun(int a, int b, int c) {………………………} fun – это функция типа int, для которой выходными параметрами являются размерности a,b,c типа int Если формальные параметры отсутствуют, то мы дописываем ключевое слово void Теоретически можно оставить пустые скобки, но компилятор может отреагировать на это дело с осторожностью, выдав предупреждение. Выходными значениями и формальными параметрами могут быть любые одиночные переменные, но не массивы. double fun(double a, double b) {………….} !!!Нельзя!!! double fun (double a, b) !!!Нельзя!!! Тело функции, ограниченное фигурными скобками начинает использовать задекларированные переменные и команды . Совершаются действия и заканчивается командой return – возврат. return<представленное выражение задает размерность вызываемой функции> В языке С нельзя вперемешку писать описывающие и исполняемые команды. Область действия задекларированных переменных – это тело функции, обозначенное фигурными скобками. После исполнения функций, (таких как main) следует ставить return так как мы заканчиваем их использовать. Пример использования подфункций double max(double a, double b) { if (a>=b) return a ; else return b; } Здесь мы находим большее значение двух чисел. Конечно, чтобы все это заработало надо прописать функцию main и все необходимое Вызов функции Функция вызывается командой/выражением по следующей схеме: <имя функции>(<выражение, которое обозначает 1 параметр>,..., <выражение, которое обозначает n параметр>) Чтобы вызвать функцию без параметра, нужно оставить скобки пустыми Результат работы функции показывается /возвращается с соответствующей командой main Вызванное выражение может являться операндом другого выражения. Можем задать приоритет вызова выражений. К функции типа void можно обратиться командой обозначенной выражением. Пример: double x,y,z,m; m=max(x*y-z, 5.0); Задание функции следующее double max(double a, double b); double x,u,v,m; m=max(x,max(u,v)); Находим максимум из 3 чисел Спасибо , что прослушали курс ! Продолжайте свое обучение при помощи блока программного E-kursusi teaduskonniti 2009/2010 обеспечения (software/tarkvara ) Ознакомьтесь с материалами факультета Информационных Технологий по адресу www.tud.ttu.ee