Курс Программирование II IAG0582 модуль I

advertisement
Курс Программирование 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=π
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
Download