Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вот еще 2.5.8.11.14.17.20.23.26.29.32..docx
Скачиваний:
2
Добавлен:
25.09.2019
Размер:
30.36 Кб
Скачать

26.Рекурсивные алгоритмы.Проверка строки на симметричность.Вычисление суммы ряда.

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

Например, приведенное ниже определение двоичного кода является рекурсивным:

<двоичный код> ::= <двоичная цифра> | <двоичный код><двоичная цифра>

<двоичная цифра> ::= 0 | 1

Здесь для описания понятия были использованы, так называемые, металингвистический формулы Бэкуса-Наура (язык БНФ); знак "::=" обозначает "по определению есть", знак "|" — "или".

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

Вычисление суммы ряда:#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <time.h>

int summa(int N, int a[100]);

int i,n, a[100];

void main() { clrscr();

printf("\nКоличество элементов массива? "); scanf("%d", &n);

printf("\nВ сформированном массиве %d чисел:\n", n);

randomize();

for (i=0; i<n; i++)

{a[i]= -10+random(21); printf("%d ", a[i]);}

printf("Сумма: %d", summa(n-1, a)); }

int summa(int N, int a[100]) {

if (N==0) return a[0]; else return a[N]+summa(N-1, a); }

Проверка на симметричность:#include <stdio.h>

#include <conio.h>

#include <string.h>

char s[100];

int pal(char s[100]);

void main(){ clrscr();

printf("\nВведите строку: "); gets(s);

if (pal(s)) printf("Строка является палиндромом");

else printf("Строка не является палиндромом");}

int pal(char s[100])

{ int l; char s1[100];

if (strlen(s)<=1) return 1;

else {l=s[0]==s[strlen(s)-1];

strncpy(s1, s+1, strlen(s)-2);

s1[strlen(s)-2]='\0';

return l&&pal(s1);}}

29.Графические библиотеки.Основные функции и процедуры.

GD Graphics Library (GD) — программная библиотека, написанная Томасом Баутелом (Thomas Boutell) и другими разработчиками для динамической работы с изображениями.

#include <conio.h>

#include <graphics.h>

#include <stdlib.h>

#include <time.h>

Выбирает координаты для центра круга задаётся радиус и цвет, направление.

void Init(Object &a){

a.x=random(640);

a.y=random(480);

a.R=20;

a.dir=1; //направление

a.color=random(16);}

Рисование объекта

void DrawObject(Object a){

circle(a.x,a.y,a.R);

line(a.x-a.R*1.5, a.y-a.R-5, a.x+a.R, a.y-a.R+5);

line(a.x-a.R*1.5, a.y-a.R+5, a.x+a.R*1.5, a.y-a.R-5);

line(a.x-a.R/2, a.y+a.R+3, a.x+a.R/2, a.y+a.R+3);

line(a.x, a.y, a.x, a.y-a.R);

line(a.x, a.y, a.x+a.dir*a.R, a.y);}

Движение объекта

void Up(Object &a){a.y-=5;}

void Down(Object &a){a.y+=5;}

void Right(Object &a){a.dir=1;a.x+=5;}

void Left(Object &a){a.dir=-1;a.x-=5;}

Меняет цвет

void ChangeColor(Object &a){a.color=random(16);}

Какая клавиша, за что отвечает

void Choice(char ch,Object &a){

switch(ch){

case 'a': { Erase(a); Left(a); Draw(a); break;}

case 'w': { Erase(a); Up(a); Draw(a); break;}

case 's': { Erase(a); Down(a); Draw(a); break;}

case 'd': { Erase(a); Right(a); Draw(a); break;}

case 'c': { ChangeColor(a); break;}

case 'g': { Erase(a); Growth(a,2); Draw(a); break;}

case 'f': { Erase(a); Growth(a,0.5); Draw(a); break;}}}

32. Классы и объекты С++. Создание, инициализация данных, деструктор, методы для сохранения и извлечения значений полей объектов.

Класс – объединение свойств и действий.

/*Класс – это абстрактный тип данных, определяемый пользователем, и представляет собой модель реального объекта в виде данных и функций для работы с ними.

класс – набор методов и функций*/.

Объекты класса – конкретные переменные типа «класс»

class <имя>{

[ private: ]

<описание скрытых элементов>

public:

<описание доступных элементов>

};

Спецификаторы доступа private и public управляют видимостью элементов класса. Элементы описанные после private видимы только внутри класса. Интерфейс класса описывается после спецификатора public. Действие любого спецификатора распространяется до следующего спецификатора или до конца класса. Можно задавать несколько секций private и public, порядох их следования значения не имеет.

Поля класса:

• Могут иметь любой тип, кроме типа этого же класса (но могут быть указателями или ссылками на этот класс);

• Могут быть описаны с модификатором const, при этом они инициализируются только один раз (с помощью конструктора) и не могут изменяться;

• Могут быть описаны с модификатором static.

Инициализация полей при описании не допускается.

Классы могут быть локальными (объявленные внутри блока) и глобальными (объявленные вне любого блока)

Чтобы упростить процесс инициализации элементов данных класса, C++ использует специальную функцию, называемую конструктором, которая запускается для каждого создаваемого вами объекта. Подобным образом C++ обеспечивает функцию, называемую деструктором, которая запускается при уничтожении объекта.