Презентация на тему Процедурный подход к программированию

Презентация на тему Презентация на тему Процедурный подход к программированию, предмет презентации: Разное. Этот материал содержит 31 слайдов. Красочные слайды и илюстрации помогут Вам заинтересовать свою аудиторию. Для просмотра воспользуйтесь проигрывателем, если материал оказался полезным для Вас - поделитесь им с друзьями с помощью социальных кнопок и добавьте наш сайт презентаций ThePresentation.ru в закладки!

Слайды и текст этой презентации

Слайд 1
Процедурный подход  к программированиюПреподаватель:Доцент Кафедры ВС, к.т.н.Поляков Артем Юрьевич© Кафедра
Текст слайда:

Процедурный подход к программированию

Преподаватель:
Доцент Кафедры ВС, к.т.н.
Поляков Артем Юрьевич

© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»

ФГОБУ ВПО "СибГУТИ"
Кафедра вычислительных систем

ЯЗЫКИ ПРОГРАММИРОВАНИЯ / ПРОГРАММИРОВАНИЕ


Слайд 2
ПодпрограммыПодпрограммы упрощают структуру сложных программ.Разбиение программы на подпрограммы облегчает ее отладку
Текст слайда:

Подпрограммы

Подпрограммы упрощают структуру сложных программ.
Разбиение программы на подпрограммы облегчает ее отладку в целом, так как каждая подпрограмма может быть тестироваться и отлаживаться отдельно.
Повторное использование кода позволяет уменьшить размер программы.
Подпрограммы могут использоваться в нескольких программах как в виде исходного кода, так и через вызов объектного (бинарного) кода (программные библиотеки).

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»


Слайд 3
Использование
Текст слайда:

Использование "копирования кода" для решения сходных задач

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

#include
int main()
{
int m1[5] = {1,2,3,4,5}, m2[3] = {3,6,0};
int m3[4] = {12, 20, 1, 1};
int sum1, sum2, sum3;
int i = 0;
sum1 = 0;
for(i=0; i < 5; i++)
sum1 += m1[i];
sum2 = 0;
for(i=0; i < 3; i++)
sum2 += m2[i];
sum3 = 0;
for(i=0; i < 4; i++)
sum3 += m3[i];
printf("sum1=%d, sum2=%d, sum3=%d\n",sum1,sum2,sum3);
}


Слайд 4
Сложность поддержки кода© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»#include int main(){
Текст слайда:

Сложность поддержки кода

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

#include
int main()
{
int m1[5] = {1,2,3,4,5}, m2[3] = {3,6,0};
int m3[4] = {12, 20, 1, 1};
int sum1, sum2, sum3;
int i = 0;
sum1 = 0;
for(i=0; i < 5; i++)
sum1 += m1[i];
sum2 = 0;
for(i=0; i < 3; i--)
sum2 += m2[i];
sum3 = 0;
for(i=0; i < 4; i--)
sum3 += m3[i];
printf("sum1=%d, sum2=%d, sum3=%d\n",sum1,sum2,sum3);
}


То, что ошибка была обнаружена и исправлена в одном из фрагментов кода.

не обеспечивает исправления аналогичных ошибок в подобных фрагментах программы, расположенных в других местах программы.


Слайд 5
Высокая вероятность ошибки© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»#include int main(){
Текст слайда:

Высокая вероятность ошибки

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

#include
int main()
{
int m1[5] = {1,2,3,4,5}, m2[3] = {3,6,0};
int m3[4] = {12, 20, 1, 1};
int sum1, sum2, sum3;
int i = 0;
sum1 = 0;
for(i=0; i < 5; i++)
sum1 += m1[i];
sum1 = 0;
for(i=0; i < 3; i++)
sum2 += m2[i];
sum3 = 0;
for(i=0; i < 3; i++)
sum2 += m3[i];
printf("sum1=%d, sum2=%d, sum3=%d\n",sum1,sum2,sum3);
}


При копировании и доработке аналогичного кода высока вероятность опечаток.

Такие опечатки достаточно сложно обнаружить, так как код выглядит корректным.


Слайд 6
Использование функций для решения сходных задач© Кафедра вычислительных систем ГОУ ВПО
Текст слайда:

Использование функций для решения сходных задач

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

#include

int summas(int cnt, int mas[]){
int sum = 0, i;
for(i=0; i < cnt; i++)
sum += mas[i];
return sum;
}
int main()
{
int m1[5] = {1,2,3,4,5}, m2[3] = {3,6,0};
int m3[4] = {12, 20, 1, 1};
int sum1, sum2, sum3;
sum1 = summas(5,m1);
sum2 = summas(3,m2);
sum3 = summas(4,m3);
printf("sum1=%d, sum2=%d, sum3=%d\n",sum1,sum2,sum3);
}


Слайд 7
Поддержка кода© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»#include int summas(int cnt,
Текст слайда:

Поддержка кода

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

#include

int summas(int cnt, int mas[]){
int sum = 0, i;
for(i=0; i < cnt; i--)
sum += mas[i];
return sum;
}
int main()
{
int m1[5] = {1,2,3,4,5}, m2[3] = {3,6,0};
int m3[4] = {12, 20, 1, 1};
int sum1, sum2, sum3;
sum1 = summas(5,m1);
sum2 = summas(3,m2);
sum3 = summas(4,m3);
printf("sum1=%d, sum2=%d, sum3=%d\n",sum1,sum2,sum3);
}


Исправление требуется только в одном месте программы!
После этого все действия по подсчету суммы эл-тов массива будут производиться корректно.


Слайд 8
Решение задачи в новом фрагменте программы© Кафедра вычислительных систем ГОУ ВПО
Текст слайда:

Решение задачи в новом фрагменте программы

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

#include
#define ASIZE(x,type) ( sizeof(x)/sizeof(type) )
int summas(int cnt, int mas[]){
int sum = 0, i;
for(i=0; i < cnt; i--)
sum += mas[i];
return sum;
}
int main()
{
int m1[5] = {1,2,3,4,5}, m2[3] = {3,6,0};
int m3[4] = {12, 20, 1, 1};
int sum1, sum2, sum3;
sum1 = summas(ASIZE(m1,int),m1);
sum2 = summas(ASIZE(m2,int),m2);
sum3 = summas(ASIZE(m3,int),m3);
printf("sum1=%d, sum2=%d, sum3=%d\n",sum1,sum2,sum3);
}


Исправление требуется только в одном месте программы!
После этого все действия по подсчету суммы эл-тов массива будут производиться корректно.


Слайд 9
Функции© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»Функция – это совокупность объявлений
Текст слайда:

Функции

© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»

Функция – это совокупность объявлений и операторов, предназначенная для решения некоторой задачи.

Для обращения к функции используется ее имя.

В любой программе, написанной на языке СИ, должна быть функция с именем main (главная функция или точка входа в программу), с которой начинается выполнение программы.

С использованием функций в языке СИ связаны три понятия:
определение функции – описание действий, выполняемых функцией;
объявление (прототип) функции – задание формы обращения к функции;
вызов функции;


Слайд 10
Определение функции© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»int sum_count(int quant,int nums[]){
Текст слайда:

Определение функции

© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»

int sum_count(int quant,int nums[])
{
int i, sum = 0;
for(i=0;i sum += nums[i];
}
return sum;
}


Формальные параметры:
локальные переменны, которые получают свое значение при вызове функции.
Основное средство контроля поведения функции.


Тело
функции

Локальные переменные

Возврат значения и
немедленное завершение функции

Имя
функции

Тип возвращаемого значения


Слайд 11
int sum_count(int quant,int nums[]){  int i, sum = 0;  for(i=0;i
Текст слайда:

int sum_count(int quant,int nums[])
{
int i, sum = 0;
for(i=0;i sum += nums[i];
}
return sum;
}



int main(){
int mas[] = {1,2,3,4,5,6,7};
int sum = sum_count(sizeof(mas)/sizeof(int),nums);
return 0;
}

Вызов функции

© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»


Фактические параметры

При вызове происходит:
Вычисление всех параметров-выражений
Приведение типов фактических параметров к типу формальных

Имя
функции


Слайд 12
Объявление (прототип) функции© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»int sum_count(int quant,int
Текст слайда:

Объявление (прототип) функции

© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»

int sum_count(int quant,int nums[]);
{
int i, sum = 0;
for(i=0;i sum += nums[i];
}
return sum;
}


Формальные параметры:
локальные переменны, которые получают свое значение при вызове функции.


Тело
функции

Имя
функции

Тип возвращаемого значения

Прототип необходим в тех случаях,
когда вызов функции необходимо выполнить до ее определения
ИЛИ если определение функции располагается в ДРУГОМ файле.


Слайд 13
Объявление (прототип) функции (2)© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»Прототип необходим
Текст слайда:

Объявление (прототип) функции (2)

© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»

Прототип необходим в тех случаях,
когда вызов функции необходимо выполнить до ее определения
ИЛИ если определение функции располагается в ДРУГОМ файле.

int sum_count(int quant,int nums[]); // прототип
. . . . .
int main(){
int mas[] = {1,2,3,4,5,6,7};
int sum = sum_count(sizeof(mas)/sizeof(int),nums); // вызов
return 0;
}
. . . . .
int sum_count(int quant,int nums[]) // определение
{
int i, sum = 0;
for(i=0;i sum += nums[i];
}
return sum;
}


Слайд 14
Изменение аргументов в функции© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»В языке
Текст слайда:

Изменение аргументов в функции

© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»

В языке си аргументы передаются по значению. Это означает, что значение из фактического параметра копируется в формальный. Все дальнейшие изменения формального параметра не затронут фактический.

int sum_sub(int x, int y, int sum, int sub){
sum = x + y;
sub = x – y;
}
int main(){
int s = 5, sm = 0, sub = 0;

sum_sub(10,s,sm,sub);
printf("sum = %d, sub = %d\n", sm, sub);
return 0;
}


Изменяются только формальные параметры!

sum = 0, sub = 0


Слайд 15
Изменение аргументов в функции (глобальные переменные)© Кафедра вычислительных систем ФГОБУ ВПО
Текст слайда:

Изменение аргументов в функции (глобальные переменные)

© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»

Данная возможность существует, однако использование глобальных переменных не рекомендуется, так как оно ограничивает способы использования функции (недопустимы рекурсивные вызовы), а также не является потоко-безопасным (не допускает многопоточность).
Требуется постоянно помнить имена глобальных переменных.

#include

int sum = 0, sub = 0;
int sum_sub(int x, int y, int sum, int sub){
sum = x + y;
sub = x – y;
}
int main(){
int s = 5, sm = 0, sub = 0;

sum_sub(10,s ,sm,sub);
printf("sum = %d, sub = %d\n", sm, sub);
return 0;
}

sum = 15, sub = 5


Слайд 16
Изменение аргументов в функции (указатели)© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»Указатели
Текст слайда:

Изменение аргументов в функции (указатели)

© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»

Указатели являются более предпочтительным вариантом, который не обладает недостатками, связанными с глобальными переменными.

#include

int sum_sub(int x, int y, int *sum, int *sub){
*sum = x + y;
*sub = x – y;
}
int main(){
int s = 5, sm = 0, sb = 0;
sum_sub(10, s, &sm, &sb);
printf("sum = %d, sub = %d\n", sm, sb);
return 0;
}

sum = 15, sub = 5


Слайд 17
Изменение аргументов в функции (массивы)© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»Имя
Текст слайда:

Изменение аргументов в функции (массивы)

© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»

Имя массива является указателем-константой. В языке Си массивы передаются по указателю, а не по значению. Поэтому все изменения, внесенные в массив, сохраняются после завершения функции.

#include

int sum_sub(int x, int y, int out[2]){
out[0] = x + y;
out[1] = x – y;
}
int main(){
int s = 5, m[2];
sum_sub(10, s, m);
printf("sum = %d, sub = %d\n", m[0], m[1]);
return 0;
}

sum = 15, sub = 5


Слайд 18
Текст слайда:

Перевод символов строки в число

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

Название подпрограммы: my_atoi.
Входные данные: строка символов, заканчивающаяся '\0'.
Выходные данные:
1) индикатор корректности данных: можно ли перевести входную строку в число.
2) если входные данные корректны – число в целочисленном формате.

Примеры входных данных:

"102345" ->

"-1132" ->

"123s54" ->


Слайд 19
Текст слайда:

Алгоритм решения задачи (корректные данные, положительные числа)

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

s = "102345" ->

Стратегия обработки положительных чисел?


Слайд 20
Текст слайда:

Алгоритм решения задачи (корректные данные, положительные числа)

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

s = "102345" ->

ОСОБЕННОСТИ ЗАДАЧИ
1. Первая цифра в строке – самая старшая! Пусть строка s содержит только корректные символы, n – длина s, тогда целочисленное представление s выглядит следующим образом:
v = s0∙10n-1 + s1∙10n-2 + s2∙10n-3 + … + sn-2∙101 + sn-1∙100
2. Цифра представлена символом, т.е. его ASCII-кодом:



Цифры располагаются в таблице ASCII кодов по возрастанию и непрерывно. Поэтому для перевода цифры из символьного представления в целочисленное достаточно отнять код '0'!

->


Слайд 21
Алгоритм решения задачи (корректные данные, положительные числа)© Кафедра вычислительных систем ГОУ
Текст слайда:

Алгоритм решения задачи (корректные данные, положительные числа)

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

s

s[i] != '\0'

v = v*10 + (s[i] – '\0')
i = i + 1

i=0
v = 0


v

ДА

НЕТ


Слайд 22
Текст слайда:

Алгоритм решения задачи (корректные данные, положительные числа)

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

s = "-1132" ->

Стратегия обработки отрицательных чисел?


Слайд 23
Текст слайда:

Алгоритм решения задачи (корректные данные, положительные числа)

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

s = "-1132" ->

ОСОБЕННОСТИ ЗАДАЧИ
1. Перевод модуля числа выполняется по тому же алгоритму, что и для целых положительных чисел:
v = s0∙10n-1 + s1∙10n-2 + s2∙10n-3 + … + sn-2∙101 + sn-1∙100
2. Если первым в строке обнаружен символ "минус" знак числа необходимо изменить на противоположный путем умножения его на -1.


Слайд 24
Алгоритм решения задачи (корректные данные, положительные числа)© Кафедра вычислительных систем ГОУ
Текст слайда:

Алгоритм решения задачи (корректные данные, положительные числа)

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

s

s[i]!='\0'

v = v*10 + (s[i]–'\0')
i = i + 1

i=0
sign = 1
v = 0


v*sign

s[0]=='-'

sign = -1
i = i + 1


НЕТ

ДА

ДА


Слайд 25
Текст слайда:

Алгоритм решения задачи (некорректные данные)

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

s = "123s54 " ->

Стратегия обработки некорректных данных?


Слайд 26
Текст слайда:

Алгоритм решения задачи (некорректные данные)

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

s = "123s54 " ->

ОСОБЕННОСТИ ЗАДАЧИ

1. Перед обработкой каждый символ необходимо проверять на принадлежность интервалу ASCII-кодов, соответствующих цифрам:

s[i] >= '0' && s[i] <= '9'

Читается: s[i] больше или равно ASCII-коду нуля ('0') и одновременно s[i] меньше или равно ASCII-коду девяти ('9').


Слайд 27
Символьные константы (вопросы)© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»1) '!' >=
Текст слайда:

Символьные константы (вопросы)

© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»

1) '!' >= '0' – false, '!' <= '9' – true => ('!' >= '0') && ('!' <= '9') – false
2) 'A'>='0' – true, 'A'<='9' – false => ('!' >= '0') && ('!' <= '9') – false
2) '1'>='0' – true, '1'<='9' – true => ('!' >= '0') && ('!' <= '9') – true


Слайд 28
Алгоритм решения задачи (произвольные данные)© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»ss[i]!='\0'
Текст слайда:

Алгоритм решения задачи (произвольные данные)

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

s

s[i]!='\0' &&
isOK(s[i])

v = v*10 + (s[i]–'\0')
i = i + 1

i=0
sign = 1
v = 0


v*sign

s[0]=='-'

sign = -1
i = i + 1


НЕТ

ДА

ДА

s[0]=='\0'


ДА

error

НЕТ


Слайд 29
Проверка допустимости символа© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»#include int isOK(char
Текст слайда:

Проверка допустимости символа

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

#include
int isOK(char c){
if( (c >= '0' && c <= '9'))
return 1;
return 0;
}


Слайд 30
Функция перевода строки в число© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»int
Текст слайда:

Функция перевода строки в число

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

int my_atoi(char s[], int *val)
{
int i = 0, sign=1;
if( s[0] == '-' ){
sign = -1;
i++;
}
*val = 0;
for(;s[i]!='\0' && isOK(s[i]); i++)
*val = (*val)*10 + (s[i] - '0');
if( s[i] != '\0' ) return -1;
*val *= sign;
return 0;
}


Слайд 31
Демонстрационная программа© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»#include int isOK(char c){
Текст слайда:

Демонстрационная программа

© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

#include
int isOK(char c){
if( (c >= '0' && c <= '9'))
return 1;
return 0;
}
int my_atoi(char s[], int *val)
{
int i = 0, sign=1;
if( s[0] == '-' ){
sign = -1;
i++;
}
*val = 0;
for(;s[i]!='\0' && isOK(s[i]); i++)
*val = (*val)*10 + (s[i] - '0');
if( s[i] != '\0' ) return -1;
*val *= sign;
return 0;
}

int main()
{
int i;
char s1[] = "102345212";
char s2[] = "-1132";
char s3[] = "123s54";

if( my_atoi(s1, &i) == 0 )
printf("s = %s, v=%d\n", s1,i);
else
printf("s = %s, error!\n", s1,i);
if( my_atoi(s2, &i) == 0 )
printf("s = %s, v=%d\n", s2,i);
else
printf("s = %s, error!\n", s2,i);
if( my_atoi(s3, &i) == 0 )
printf("s = %s, v=%d\n", s3,i);
else
printf("s = %s, error!\n", s3,i);
}


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика