Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OAIP_shpory_teoria.doc
Скачиваний:
5
Добавлен:
16.04.2019
Размер:
292.86 Кб
Скачать

Алгоритм - последовательность действий, в результате которых из исходных данных получается искомый результат.

Графическое построение алгоритма:

-операция

-ввод-вывод

-начало и конец

-условие

-вывод на печать

-цикл

Система программирования – совокупность языка программирования и вирт. машины, обеспеч. вып. написанных на данном языке программ.

Вирт. машина содержит: транслятор (компилятор, интерпретатор), библиотеки стандартных программ, отладчик, компоновщик.

Состав языка С++:

Алфавит (состоит из прописных и строчных букв, арабских цифр, пробелов и разделит. символов, спец. символов);

Идентификатор (имя) – послед. букв, цифр и спец. символов. Первым симв. может быть буква или подчёркивание. (первые 32 симв. – значимые);

Ключевые слова (auto, double, int struct, else, long, switch, typedef, char, extern, void, case, float, default, for, signed, do if, sizeof, enum, short, while, break, return, union, continue);

Знаки операций – один или несколько символов, определяющих действия над операндами. Арифметич. операции: +, -, /, *. %-остаток от целочисл. деления; операции присваивания (=);

Программа сост. из одной или нескольких функций, main() – обязат.;

Структура программы:

-директивы препроцессора, -описание типов пользователя, -прототипы функции, -описание глобальных переменных, -тело функции;

Описание глобальных переменных – вне всех функций и один раз.

Операция присваивания:

операнд 1=операнд 2

оп.1 – только переменная, оп.2 – константа, переменная, выражение, функция.

Формы оп. присваивания (арифм. операц. с присваив.):

сложение с замещением, вычитание с замещением, умножение с замещением, деление с замещением, а%=с – устанавливает а равным остатку от деления на с.

Инкремент – увеличивает значение своего операнда на 1, декремент – уменьшает на 1.(префиксная форма – сначала действие, затем операнд используется, в постфиксной наоборот)

Функции библиотеки math.lib:

Переменная – именованная область памяти компьютера (значение переменной изменяется при работе программы).

Арифметические операции: +, -, *, /, %, ++, --.

Преобразование типов:

Неявное: char -> short -> int -> long -> float -> double -> long double;

Явное: static_cast <тип> (переменная);

Операция – действие, выполняемое над операндами, каждая операция обозначается определённым знаком.

Выражение – конструкция языка (формула) для вычисления значения в соответствии со значением операндов.

Базовые типы данных:

int целые (-32768 до 32767)

short (-||-)

long ( -2147483648 до 214748364)

char (-128 до 127)

bool (true, false)

double вещественные (1,7*10-308 до 1,7*10308)

float (3,14*10-38 до 3,14*1038)

long double (3,4*10-4932 до 3,4*104932)

Операции сравнения:

== - равенство (выводится 1, если true); != - неравенство; < - меньше; > - больше; <= - меньше или равно;

>= - больше или равно;

Логические операции:

Отрицание !; конъюнкция && (и); дизъюнкция || (или);

Побитовые операции (работают с числами побитово):

~ - (не) каждый бит меняет своё знач. на противопол.; & - (и) выполняет и с парами битов левого и правого операнда; |- (или); ^ - исключающее или (true, если истинным является только какой-то один); >> - сдвигает биты левого операнда на число разрядов правого;

Блок – составной оператор, состоит из одного или большего числа операторов любого типа, заключённых в фигурные скобки.

Оператор безусловной передачи управления goto:

goto метка; метка: оператор;

Оператор условного перехода if else: Оператор альтернативного выбора switch:

if (условие) оператор 1; switch (выражение)

else оператор 2; { case константа 1: оператор 1;

case константа N: оператор N;

default: оператор}

Тернарный оператор «?:»:

выражение 1 ? выражение 2 : выражение 3;

Компактная форма условного оператора if else.

Операторы передачи управления:

continue; (используется только внутри циклов) – досрочное завершение текущего шага и переход к следующему.

break; позволяет выйти из блока.

Операция последовательного вычисления «,»:

-организация строгой последовательности вычисления выражений.

выражение 1, выражение 2, … , выражение N;

Оператор с предусловием while:

while (выражение) код цикла; (вычисляется выражение, если выражение истинно – выполняется код цикла и управление переходит к началу цикла)

Оператор с постусловием do while:

do код цикла; while (выражение); (выполняется код цикла, а затем, если выражение истинно, выполняется ещё раз)

Оператор с предусловием и коррекцией for:

for(выражение 1; выражение 2; выражение 3) код цикла;

(если выражение 2 истинно, то выполняется код цикла и выражение 3)

Декларация статических массивов:

тип идентификатор [размер]; – одномерный массив;

с[0] c[2]

тип идентификатор [размер 1][размер 2]…[размер N]; - многомерный;

c[0][0] c[0][1] c[0][2] c[1][0] c[1][1] c[1][2]

обращение – по индексу;

Ввод-вывод массивов осуществляется циклом.

Генерация последовательности случайных чисел:

функции: rand()-генерирует случайное число из диапазона от 0 до RAND_MAX;

srand()-изменяет начальное число генератора псевдослучайных чисел;

time()-возвращает текущ. календ. время, если время не задано возвращ. число -1.

Основные алгоритмы работы с массивами:

Сумма элементов: s=0; for(int i=0;i<n;i++) s+=a[i];

Произведение элементов: s=1; for(int i=0;i<n;i++) s*=a[i];

Нахождение максимального и минимального: max=min=a[0]; for(int i=1;i<n;i++)

{ if(a[i]<min) min=a[i]; else if(a[i]>max) max=a[i];}

Нахождение среднего значения: for(int i=0;i<n;i++) s+=a[i]; s/=n;

Указатель:

тип *идентификатор; (тип указателя должен совпадать с типом переменной, адрес которой он хранит)

Операции с указателями:

& - получить адрес переменной;

* - получить значение переменной по её адресу;

= - присвоить указателю адрес переменной;

++ - увеличить на 1(после увеличение указатель будет указывать на след. элемент массива)

-- - на предыдущий элемент массива;

+ - увеличить указатель на целое значение;

+= - увеличить существующий указатель на целое значение;

- - уменьш. указат. на целое значение или вычесть другой указ., если указ. на элементы одного и того же массива;

-= - -||- /существующий указатель/

сравнения;

new – выделение памяти (указатель на начало выделенного блока памяти);

delete – освобождение памяти (освободить выдел. блок и сделать указат. недоступным);

Указатель типа void применяется, если тип объекта заранее неизвестен.

Указатель на объект содержит адрес объекта известного типа.

Инициализация указателя нулевым значением: тип *идентификатор = NULL; - ни на что не указывает;

Идентификатор одномерного массива – адрес его первого элемента.

a[i]~*(a+i);

Создание двумерного динамического массива:

double **mas;

mas=new double*[n];

for(i=0;i<n;i++) mas[i]=new double[m];

Освобождение памяти:

for(i=0;i<n;i++) delete []mas[i];

delete []mas;

mas=NULL;

Функции библиотеки malloc.lib:

void *malloc (size) – выделяет область памяти размером size байт и возвращ. адрес выдел. блока памяти; void *calloc (n,size) - выделяет область памяти размером n блоков по size байт (под массивы); void *realloc(*u,size) – измен. размер памяти связ. с указателем u на новое число байт; void free(*u) – освобождает участок памяти, связ. с указателем *u;

Строка:

char имя строки [размер];

строка обязательно заканчивается нулевым символом “\0”;

Функции библиотеки string.lib:

Структура – объединяет логически связанные данные разных типов и представляет собой набор переменных, которые объединены общим именем.

Отдельн. данные – поля.

Вложенные структуры – элементы структуры тоже структуры.

struct идентификатор {тип эл.1 имя эл.1;

тип эл.2 имя эл.2;};

(struct Address{…}a; ~ Address a;) – структурная переменная.

Операция точка(.) – для доступа к элементам структуры по имени переменной типа структуры; (cin>>a.city>>a.street)

Операция стрелка(->) – для доступа к элементам структуры через указатель на переменную;(Address *p=new Address; cin>>p->city>>p->street;)

Присваивание структур (Address copy; copy=a;copy=*p;)

Объединения(union):

Размещают под одним именем совокупность данных таким образом, что размер выдел. памяти был достаточен для размещения данного, имеющего max размер. Используется в случае, когда отдельные поля существуют в различные моменты времени. union имя{набор полей};

Перечисления(enum):

Задают множество значений для заданной пользователем переменной.

enum имя{набор значений};

Функция – именованная группа операторов, которая выполняет обработку данных и которую можно неоднократно вызывать из различных частей программы.

тип имя (список типов параметров); - прототип функции (объявление).

тип имя (тип параметра идентифик. параметра) {тело функции} – определение ф-и.

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

имя (список параметров/*может отсутствовать*/)

(*указатель на функцию) (спис. пар.)

Передача данных в функцию:

по значению: формальному параметру присваивается копия фактического. Внутри функции изменения происходят с копией.

по ссылке: так же, как и по указателю. Но у ссылки нет адреса.

по указателю: внутри функции открывается доступ к фактическому параметру. Все изменения отражаются на работе фактического параметра.

Параметры ф-и по умолчанию:

Константное значение. Записывается в прототипе ф-и после типа и знака =. Используется, если при вызове не указывается фактический параметр.

Перегрузка функции:

Возможность называть несколько разных функций одним и тем же именем (для void): void func (void); void func (int n); void func (double d) – разные ф-ии.

Передача массивов в функцию:

в качестве параметра – адрес массива. В качестве ещё одного параметра – размер.

void func (const int* p, int size)

Функции с переменным числом параметров:

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

Указатели на функции:

тип (*переменная-указатель)(список параметров)-прототип;

переменная-указатель=ID функции – устанавливаем указатель на функцию;

Классы памяти - определяет время существования и область видимости программного объекта.

auto-локальные объекты, объявленные в коде функции, extern-позволяет функции использовать внешнюю переменную, даже если она определяется позже в этом или другом файле,static-в статической памяти, время жизни - постоянное,register-объекты целого типа и символы – в регистровой памяти.

Область действия объекта - часть кода программы, в которой его можно использовать. Переменная может быть локальной (внутренней) и глобальной (внешней).

Время жизни: постоянное – в течение выполнения программы, временное – в течение выполнения функции (блока) программы.

Функции библиотеки stdio.lib:

scanf - вводит строку до появления пробела

gets – ввод строки, которая может содержать пробелы

printf, puts – вывод строк

putc - записывает символы в файл

getc – берёт символы из файла

Директивы препроцессора:

#include – включает в текст программы содержимое указанного файла.

#define (#define идентификатор текст) – заменяет все последующие вхождения идентификатора на текст.

#undef – (#undef идентификатор) отмена действий #define.

1) min и max значение эл. одномерного массива

min=max=a[0];

for(i=1;i<n;i++){if(a[i]<min)min=a[i];else if(a[i]>max)max=a[i];}

2) отсортировать элементы по возрастанию

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

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

if(a[i]>a[j]) {t=a[i]; a[i]=a[j]; a[j]=t;}

3) удалить из одномерного массива все отрицат. числа

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

if(a[i]<0)

{ for (j=i+1;j<n;j++) a[j-1]=a[j]; n--; i--;}

4) расположить эл. массива в обратном порядке

for(i=0;i<n/2;i++) {t=a[i];a[i]=a[n-i-1]; a[n-i-1]=t;}

5) элементы массивов упорядочены по возрастанию. Объединить элем. этих 2х массивов в один так, чтобы он был тоже упорядочне по возраст

k=i=j=0;

while(i<n&&j<n) {if(x[i]<y[j]) {z[k]=x[i];i++;} else{z[k]=y[j];j++;} k++; }

while(i<n) {z[k]=x[i];i++;k++;}

while(j<n){z[k]=y[j];j++;k++}

6) ДВУМЕРН. Найти сумму эл. лежащ. на главной диагонали

s=0;

for(i=0;i<n;i++)s+=a[i][i];

7)Найти сумму элементов на побочной диагонали

s=0;

for(i=0;i<n;i++) s+=a[i][n-i-1];

8)Переставить местами две строки с номерами k1 и k2

for(j=0;j<m;j++) { t=a[k1][j]; a[k1][j]=a[k2][j]; a[k2][j]=t}

9)найти сумму элементов выше главной диагонали

s=0;

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

for(j=i+1;j<m;j++) s+=a[i][j];

10)выше побочной

s=0;

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

for(j=0;j<m-i-1;j++) s+=a[i][j];

11)транспонировать массив относительно главной диаг.

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

for(j=i+1;j<n;j++) { t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t;}

12) относительно побочной

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

for(j=0;j<n-i-1;j++) { t=a[i][j]; a[i][j]=a[n-j-1][m-i-1]; a[n-j-1][m-i-1]=t;}

13) сумму элементов леж. ниже главной и побочной

s=0;

for(i=n/2+1;i<n;i++)

for(j=n-1;j<i;j++) s+=a[i][j];

Параметры по значению:

#include <math.h>

#include <iomanip.h>

#include <iostream.h>

double fun(double,double,double,int,double);

int main()

{

double a,b,h,x,s;

int n;

cout<<"enter a ";

cin>>a;

cout<<"enter b ";

cin>>b;

cout<<"enter h ";

cin>>h;

cout<<"enter n ";

cin>>n;

cout<<setw(3)<<"x"<<setw(15)<<"S(x)"<<endl;

for(x=a;x<b+h/2.;x+=h)

{

s=fun(a,b,h,n,x);

cout<<setw(3)<<x<<setw(15)<<s<<endl;

}

return 0;

}

double fun(double a,double b,double h,int n,double x)

{

int j;

double s= /*Начальные значкния*/,c= /*Начальные значкния*/;

for(j=1;j<n;j++)

{

c*=/*Рекурентная часть*/;

s+=c/*Не рекурентная часть*/;

}

return s;

}

По ссылке:

#include <math.h>

#include <iomanip.h>

#include <iostream.h>

double fun(double &,double &,double &,int &,double &);

Int main()

{

double a,b,h,x,s;

int n;

cout<<"enter a ";

cin>>a;

cout<<"enter b ";

cin>>b;

cout<<"enter h ";

cin>>h;

cout<<"enter n ";

cin>>n;

cout<<setw(3)<<"x"<<setw(15)<<"S(x)"<<endl;

for(x=a;x<b+h/2.;x+=h)

{

s=fun(a,b,h,n,x);

cout<<setw(3)<<x<<setw(15)<<s<<endl;

}

return 0;

}

double fun(double &a,double &b,double &h,int &n,double &x)

{

int j;

double s=1/*Начальные значкния*/,c=1/*Начальные значкния*/;

for(j=1;j<n;j++)

{

c*=pow(x,2)/(2*j*(2*j-1))/*Рекурентная часть*/;

s+=c/*Не рекурентная часть*/;

}

return s;

}

По указателю:

#include <math.h>

#include <iomanip.h>

#include <iostream.h>

double fun(double* ,double* ,double* ,int* ,double* );

Int main()

{

double a,b,h,x,s;

int n;

cout<<"enter a ";

cin>>a;

cout<<"enter b ";

cin>>b;

cout<<"enter h ";

cin>>h;

cout<<"enter n ";

cin>>n;

cout<<setw(3)<<"x"<<setw(15)<<"S(x)"<<endl;

for(x=a;x<b+h/2.;x+=h)

{

s=fun(&a,&b,&h,&n,&x);

cout<<setw(3)<<x<<setw(15)<<s<<endl;

}

return 0;

}

double fun(double *a,double *b,double *h,int *n,double *x)

{

int j,m;

double y;

m=static_cast<int>(*n);

y=static_cast<double>(*x);

double s=1 /*Начальные значения*/,c=1 /*Начальные значения */;

for(j=1;j<m;j++)

{

c*=pow(y,2)/(2*j*(2*j-1))/*Рекурентная часть*/;

s+=c/*Не рекурентная часть*/;

}

return s;

}

Список товаров

#include <iomanip.h>

#include <iostream.h>

#include <string.h>

#include <stdio.h>

Int main()

{

struct sklad

{

Int data,cena,kolvo;

char naim[40];

}spisok[100];

int i,n;

cout<<"vvedite kol-vo predmetov"<<endl;

cin>>n;

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

{

cout<<"vvedite naimenovanie: "; cin>>spisok[i].naim;

cout<<"vvedite kolichestvo edinic: "; cin>>spisok[i].kolvo;

cout<<"vvedite ceny: "; cin>>spisok[i].cena;

cout<<"vvedite daty: "; cin>>spisok[i].data;

}

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

if (spisok[i].data>30 && spisok[i].cena>100000)

cout<<setw(10)<<spisok[i].naim<<" "<<"kolichestvo edinic:"<<spisok[i].kolvo<<endl;

return 0;

}

Справочная автовокзала

#include <iostream.h>

#include <iomanip.h>

#include <stdio.h>

#include <string.h>

Int main()

{

struct xx

{

int num;

char pnaz[20];

int ot, pr;

}

xxx[100];

int i,n,k=0;

cout<<"Vvedite kol-vo reisov: ";

cin>>n;

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

{

cout<<"Nomer avt: "; cin>>xxx[i].num;

puts("Punkt naznachenia"); gets(xxx[i].pnaz);

cout<<"Vvedite vremya otpravlenia: "; cin>>xxx[i].ot;

cout<<"Vvedite vremya pribitiya: "; cin>>xxx[i].pr;

cout<<endl;

}

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

if(xxx[i].ot>13 && xxx[i].ot<17)

k++;

cout<<"Kol-vo iskomich reisov: "<<k<<endl;

return 0;

}

Книги

#include <iomanip.h>

#include <iostream.h>

#include <string.h>

#include <stdio.h>

Int main()

{

struct biblioteka

{

Int god,nomer;

char avtor[40],nazv[40];

}kniga[100];

int i,n,g;

cout<<"vvedite kol-vo knig"<<endl;

cin>>n;

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

{

puts("vvedite avtora: "); gets(kniga[i].avtor);

puts("vvedite nazvanie: "); gets(kniga[i].nazv);

cout<<"vvedite registracionnbIi nomer: "; cin>>kniga[i].nomer;

cout<<"vvedite god izdaniia: "; cin>>kniga[i].god;

}

cout<<"zadaite nygnbIi god"; cin>>g;

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

if (kniga[i].god<g)

cout<<setw(10)<<kniga[i].nazv<<" "<<kniga[i].avtor<<endl;

return 0;

}

Абитуриенты

#include <iomanip.h>

#include <iostream.h>

#include <string.h>

#include <stdio.h>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]