Переменные-указатели и операции над указателями. Лекция 6 по алгоритмизации и программированию презентация

Содержание


Презентации» Информатика» Переменные-указатели и операции над указателями. Лекция 6 по алгоритмизации и программированию
Переменные-указатели и операции над указателями 
 Лекция 61) Что будет выведено на экран?    2) ЧтоУказатели 
 Указатели – это переменные, предназначены для хранения адресов памяти.Объявление указателя:     тип* имя;
 Объявление указателя: Указатель можно сразу проинициализировать:
 Указатель можно сразу проинициализировать:
 Примеры:
 int i;//целаяСпособы инициализации указателя
 с помощью операции получения адреса 
 int a=5;
Пример:
 Пример:
 int A; // выделяется память
 int* B; // памятьОбращаться к содержимому области памяти можно через переменные-указатели, для этого используетсяint **D; // значением этой переменной является значение переменной типа указатель
Действия над указателями
 Описание: int *p1, *p2, i;Передача параметров по значению 
 вычисляются значения выражений, стоящие на местеПример. Найти наибольший общий делитель (НОД) для значений x, y, x+y.Передача параметров по адресу
 В стек заносятся копии адресов параметров, следовательно,Локальные переменные 
 Переменные, которые используются внутри данной функции, называются локальными.Глобальные переменные
 Глобальные переменные – это переменные, описанные вне функций. ОниПример. Написать программу, запрашивающую N целых чисел и выводящих в текстовыйПодставляемые (inline) функции 
 Спецификатор inline определяет для функции так называемое/* функция возвращает расстояние от точки с координатами (x1,y1) (по умолчаниюРекурсия 
 Рекурсией называется ситуация, когда какой-то алгоритм вызывает себя прямоРекурсия — это способ определения множества объектов через само это множествоЗадачи
 Вычислить факториал (n!), используя рекурсию.
 Вычислить степень, используя рекурсию.
 ВычислитьЗадача 1. Вычислить факториал (n!), используя рекурсию.
 Задача 1. Вычислить факториал#include <iostream.h>
 #include <iostream.h>
 int fact(int n)
 {
 	if (n==0)return 1;Задача 2. Вычислить степень, используя рекурсию.
 Задача 2. Вычислить степень, используя#include <iostream.h>
 #include <iostream.h>
 int pow( int x,int n)
 {
 	if(n==0)returnВычисление суммы цифр числаАлгоритм ЕвклидаКак работает рекурсия?СтекРекурсия – «за» и «против»Пример. Написать программу, запрашивающую N целых чисел и выводящих в текстовый



Слайды и текст этой презентации
Слайд 1
Описание слайда:
Переменные-указатели и операции над указателями Лекция 6


Слайд 2
Описание слайда:
1) Что будет выведено на экран? 2) Что надо исправить для получения правильного результата для всех целых чисел?

Слайд 3
Описание слайда:
Указатели Указатели – это переменные, предназначены для хранения адресов памяти.

Слайд 4
Описание слайда:
Объявление указателя: тип* имя; Объявление указателя: тип* имя; Память под переменные-указатели выделяется только тогда, когда им присваивается какое-либо значение. Примеры int* i; double *f, *ff; char* c; int** a; // указатель на указатель const int* pci;

Слайд 5
Описание слайда:
Указатель можно сразу проинициализировать: Указатель можно сразу проинициализировать: Примеры: int i;//целая переменная; const int ci;//целая константа //указатель на целую переменную int* pi=&i; //указатель на целую константу const int* pci=&ci; //указатель-константа на переменную целого типа int* const cpi=&i; //указатель-константа на целую константу const int* const cpc=&ci;

Слайд 6
Описание слайда:
Способы инициализации указателя с помощью операции получения адреса int a=5; int* p=&a;// или int p(&a); с помощью проинициализированного указателя int* r=p; адрес присваивается в явном виде char* cp=(char*)0х В800 0000; где 0х В800 0000 – шестнадцатеричная константа, (char*) – операция приведения типа. присваивание пустого значения: int* N=NULL; int* R=0;

Слайд 7
Описание слайда:
Пример: Пример: int A; // выделяется память int* B; // память не выделяется ... A=10; B=&A; // &A – взятие адреса. Выделяется память под В и в нее записывается адрес области память, выделенной под А

Слайд 8
Описание слайда:

Слайд 9
Описание слайда:
Обращаться к содержимому области памяти можно через переменные-указатели, для этого используется операция разыменования. Для этого ставится «*» перед именем переменной-указателем: Обращаться к содержимому области памяти можно через переменные-указатели, для этого используется операция разыменования. Для этого ставится «*» перед именем переменной-указателем:

Слайд 10
Описание слайда:
int **D; // значением этой переменной является значение переменной типа указатель int **D; // значением этой переменной является значение переменной типа указатель D=&B;

Слайд 11
Описание слайда:
Действия над указателями Описание: int *p1, *p2, i;

Слайд 12
Описание слайда:

Слайд 13
Описание слайда:

Слайд 14
Описание слайда:
Передача параметров по значению вычисляются значения выражений, стоящие на месте фактических параметров; в стеке выделяется память под формальные параметры функции; каждому формальному параметру присваивается значение фактического параметра, при этом проверяются соответствия типов и при необходимости выполняются их преобразования.

Слайд 15
Описание слайда:

Слайд 16
Описание слайда:

Слайд 17
Описание слайда:
Пример. Найти наибольший общий делитель (НОД) для значений x, y, x+y. Пример. Найти наибольший общий делитель (НОД) для значений x, y, x+y. #include <iostream> using namespace std; int evklid(int m,int n) //данные передаются по значению { while (m!=n) if (m>n) m=m-n; else n=n-m; return (m); } int main () { int x,y,nod; cin>>x>>y; nod=evklid(evklid(x,y),x+y); cout<<"NOD="<<nod<<"\n"; system ("pause"); return 0; }

Слайд 18
Описание слайда:

Слайд 19
Описание слайда:
Передача параметров по адресу В стек заносятся копии адресов параметров, следовательно, у функции появляется доступ к ячейке памяти, в которой находится фактический параметр и она может его изменить.

Слайд 20
Описание слайда:

Слайд 21
Описание слайда:

Слайд 22
Описание слайда:
Локальные переменные Переменные, которые используются внутри данной функции, называются локальными. Память для них выделяется в стеке, поэтому после окончания работы функции они удаляются из памяти. Нельзя возвращать указатель на локальную переменную, т. к. память, выделенная такой переменной, будет освобождаться. int* f() { int a; … return &a;// ОШИБКА! }

Слайд 23
Описание слайда:
Глобальные переменные Глобальные переменные – это переменные, описанные вне функций. Они видны во всех функциях, где нет локальных переменных с такими именами.

Слайд 24
Описание слайда:
Пример. Написать программу, запрашивающую N целых чисел и выводящих в текстовый файл все цифры этих чисел через запятую в обратном порядке.

Слайд 25
Описание слайда:
Подставляемые (inline) функции Спецификатор inline определяет для функции так называемое внутреннее связывание, которое заключается в том, что компилятор вместо вызова функции подставляет команды ее кода. При этом может увеличиваться размер программы, но исключаются затраты на передачу управления к вызываемой функции и возврата из нее. Подставляемыми не могут быть: рекурсивные функции; функции, у которых вызов размещается до ее определения; функции, которые вызываются более одного раза в выражении; функции, содержащие циклы, переключатели и операторы переходов; функции, которые имеют слишком большой размер, чтобы сделать подстановку.

Слайд 26
Описание слайда:
/* функция возвращает расстояние от точки с координатами (x1,y1) (по умолчанию центр координат) до точки с координатами (x2,y2)*/ /* функция возвращает расстояние от точки с координатами (x1,y1) (по умолчанию центр координат) до точки с координатами (x2,y2)*/ inline float Line(float x1,float y1, float x2=0,float y2=0) { return sqrt(pow(x1-x2)+pow(y1-y2,2)); }

Слайд 27
Описание слайда:
Рекурсия Рекурсией называется ситуация, когда какой-то алгоритм вызывает себя прямо (прямая рекурсия) или через другие алгоритмы (косвенная рекурсия) в качестве вспомогательного. Сам алгоритм называется рекурсивным. Рекурсивное решение задачи состоит из двух этапов: исходная задача сводится к новой задаче, похожей на исходную, но несколько проще; подобная замена продолжается до тех пор, пока задача не станет тривиальной, т. е. очень простой.

Слайд 28
Описание слайда:
Рекурсия — это способ определения множества объектов через само это множество на основе заданных простых базовых случаев. Рекурсия — это способ определения множества объектов через само это множество на основе заданных простых базовых случаев.

Слайд 29
Описание слайда:
Задачи Вычислить факториал (n!), используя рекурсию. Вычислить степень, используя рекурсию. Вычислить n-ое число Фиббоначи

Слайд 30
Описание слайда:
Задача 1. Вычислить факториал (n!), используя рекурсию. Задача 1. Вычислить факториал (n!), используя рекурсию. Исходные данные: n Результат: n! Рассмотрим эту задачу на примере вычисления факториала для n=5. Более простой задачей является вычисление факториала для n=4. Тогда вычисление факториала для n=5 можно записать следующим образом: 5!=4!*5. Аналогично: 4!=3!*4; 3!=2!*3; 2!=1!*2 ; 1!=0!*1 Тривиальная (простая) задача: 0!=1. Можно построить следующую математическую модель:

Слайд 31
Описание слайда:
#include <iostream.h> #include <iostream.h> int fact(int n) { if (n==0)return 1; //тривиальная задача return (n*fact(n-1)); } void main() { cout<<"n?"; int k; cin>>k; //вводим число для вычисления факториала //вычисление и вывод результата cout<<k<<"!="<<fact(k); }

Слайд 32
Описание слайда:

Слайд 33
Описание слайда:
Задача 2. Вычислить степень, используя рекурсию. Задача 2. Вычислить степень, используя рекурсию. Исходные данные: x,n Результат: xn Математическая модель:

Слайд 34
Описание слайда:
#include <iostream.h> #include <iostream.h> int pow( int x,int n) { if(n==0)return 1;//тривиальная задача return(x*pow(x,n-1)); } void main() { int x,k; cout<<"n?"; cin>>x; //вводим число cin>>k; //вводим степень //вычисление и вывод результата cout<<x<<"^"<<k<<"="<<pow(x,k); }

Слайд 35
Описание слайда:
Вычисление суммы цифр числа

Слайд 36
Описание слайда:
Алгоритм Евклида

Слайд 37
Описание слайда:
Как работает рекурсия?

Слайд 38
Описание слайда:
Стек

Слайд 39
Описание слайда:
Рекурсия – «за» и «против»

Слайд 40
Описание слайда:

Слайд 41
Описание слайда:
Пример. Написать программу, запрашивающую N целых чисел и выводящих в текстовый файл все цифры этих чисел через запятую в обратном порядке.


Скачать презентацию на тему Переменные-указатели и операции над указателями. Лекция 6 по алгоритмизации и программированию можно ниже:

Похожие презентации