Программирование на C++

Использование указателей и ссылок в программировании на C++. Определение, объявление и перегрузка функций. Работа с многомерными массивами. Рекурсивное описание алгоритмов обработки и их программная реализация. Структуры, объединения и поля битов.

Рубрика Программирование, компьютеры и кибернетика
Вид отчет по практике
Язык русский
Дата добавления 14.03.2014
Размер файла 291,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

4.2 Практическая часть

Задание 4.2.1

Текст программы:

#include "stdafx.h"

#include <stdlib.h>

#include <conio.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{const int n=3;

const int m=4;

char a [n] [m];

int i, j;

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

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

a [i] [j] = char (97+rand() %26);

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

{for( j=0; j< 3; j++)

printf ("%2c",a[i][j]);

printf ("\n");}

_getch();

return 0;}

Задание 4.2.2

Текст программы:

#include "stdafx.h"

#include <stdlib.h>

#include <conio.h>

using namespace std;

const int n=10;

const int m=5;

int _tmain(int argc, _TCHAR* argv[])

{static int a [n] [m];

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

for (int j=0; j<m; j++)

{a [i] [j] = 1 +rand() % 10;

printf (" %7d %c", a [i] [j], (j==m-1)?'\n':' ');}

_getch();

return 0;}

Задание 4.2.3

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <conio.h>

using namespace std;

const int n = 10;

const int m = 5;

int _tmain(int argc, _TCHAR* argv[])

{static int a[n] [m];

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

{ for (unsigned j=0; j<m; j++)

cout << setw (8) << a [i] [j];

cout <<endl;}

_getch();

return 0;}

Задание 4.2.4

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <conio.h>

using namespace std;

const int n = 9;

const int m = 3;

int _tmain(int argc, _TCHAR* argv[])

{static int a [n] [m];

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

for (unsigned j=0; j<m; j++)

printf ("a[%d][%d]=%d \t%c", i,j, a[i][j], (j==m-1)? '\n': ' ');

_getch();

return 0;}

Задание 4.2.5

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <conio.h>

using namespace std;

const int n = 10;

const int m = 5;

int _tmain(int argc, _TCHAR* argv[])

{static int a[n][m];

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

for (unsigned j=0;j<m;j++)

printf ("%d \t%c", a[i][j], (j==m-1)? '\n': ' ');

_getch();

return 0;}

Задание 4.2.6

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <conio.h>

using namespace std;

const int n = 9;

const int m = 3;

int _tmain(int argc, _TCHAR* argv[])

{static int a[n][m];

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

{for (unsigned j=0;j<m;j++)

printf ("a[%d][%d]=%8d \t",i,j,a[i][j]);}

_getch();

return 0;}

Задание 4.2.7

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <conio.h>

#define n 9

#define m 3

int _tmain(int argc, _TCHAR* argv[])

{static double a [n][m];

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

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

{a[i][j]=rand();

printf ("%10.4lf %c", a[i][j], (j==m-1)? '\n': ' ');}

_getch();

return 0;}

Задание 4.2.8

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <conio.h>

using namespace std;

const int n=10;

const int m=5;

int _tmain(int argc, _TCHAR* argv[])

{static int a[n][m];

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

for (unsigned j=0; j<m;j++)

{a[i][j]=rand();

cout<<setw(10);

cout<<setprecision(4) << setiosflags(ios::fixed);

cout << a[i][j];

if (!((j+1) %m)) cout << endl;}

_getch();

return 0;}

Задание 4.2.9

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <conio.h>

using namespace std;

const int n=10;

const int m=5;

int _tmain(int argc, _TCHAR* argv[])

{static int a[n][m];

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

{ for(unsigned j=0; j< m; j++)

{a[i][j] = rand(); //получение элементов матрицы

cout << setw(10);

cout << setprecision(4) << setiosflags(ios::fixed);

cout << a[i][j]; //вывод элементов матрицы}

cout << endl;}

_getch();

return 0;}

Задание 4.2.10

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <conio.h>

using namespace std;

const int D = 4;

const int M = 3;

void display (double [D][M]);

int main()

{static double sales [D][M] = { {1432.07, 234.50, 654.01},

{322.00, 13838.32, 17859.88},

{9328.34, 934.00, 4492.30},

{12838.29, 2332.63, 32.93} };

display (sales);

cout<< endl;

_getch();

return 0;}

void display (double funsales [D][M])

{ int d, m;

for (d=0; d<D; d++)

{ for (m=0; m<M; m++)

cout << setiosflags (ios::fixed) << setw(10)

<< setiosflags (ios::showpoint) << setprecision(2)

<< funsales [d][m];

cout << endl;}}

Задание 4.2.11

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <string.h>

#include <iomanip>

#include <conio.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{const int n=10;

const int m=7;

int a[n][m], b[n][m];

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

for (unsigned j=0; j<m;j++)

b[i][j]=1 +rand() % 10;

memcpy (a, b, sizeof (b) );

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

for (unsigned j=0; j<m;j++)

printf ("%3d%c", b [i][j], (j==m-1)? '\n':' ');

_getch ();

return 0;}

Задание 4.2.12

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <string.h>

#include <iomanip>

#include <conio.h>

using namespace std;

const int n=3;

const int m=4;

int _tmain(int argc, _TCHAR* argv[])

{int i,j;

int *A = new int[n*m];

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

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

A[i*m+j]=i*m+j;

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

{for (j=0; j<m;j++)

cout << setw(4) << A [i*m+j];

cout << endl;}

delete [ ] A;

_getch();

return 0;}

Задание 4.2.13

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <string.h>

#include <iomanip>

#include <conio.h>

using namespace std;

const int n=2;

const int m=3;

int adder (int [n][m]);

int _tmain(int argc, _TCHAR* argv[])

{ int isum;

static int iarray[n][m]={5, 1, 6, 20, 15, 0};

isum= adder(iarray);

cout << "isum=" << isum << endl;

return 0;}

nt adder (int iarray[n][m])

int ipartial =0;

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

for (int j=0; j<m; j++)

ipartial +=iarray[i][j];

return (ipartial);}

Задание 4.2.14

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <string.h>

#include <iomanip>

#include <conio.h>

using namespace std;

const int NROW =5;

const int NCOL =4;

void vvod_ar(int arra[NROW][NCOL], int m, int n);

void vyvod_ar(int arra[NROW] [NCOL], int m, int n);

int main()

{int m=4; // число строк реального статического массива

int n=3; // число столбцов реального статического массива

int arra [NROW][NCOL] ={{1}, {2}, {3}, {4}, {5}};

vyvod_ar(arra, NROW, NCOL);

vyvod_ar(arra, m, n);

vvod_ar(arra, m, n);

vyvod_ar(arra, m, n);

vyvod_ar(arra, NROW, NCOL);

_getch();

return 0;}

void vyvod_ar(int arra[NROW][NCOL], int m, int n) //функция вывода массива

{for (int i=0; i<m; i++)

{ cout << "\n stroka " << (i+1) << ":";

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

cout << setw(3) << arra[i][j];}

cout << endl;}

void vvod_ar(int arra [NROW][NCOL], int m, int n) //функция ввода массива

{for (int i=0; i<m; i++)

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

arra[i][j] = 1+ rand()%5;}

Задание 4.2.15

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <string.h>

#include <iomanip>

#include <conio.h>

using namespace std;

const int n=2; //глобальные параметры - размеры матрицы

const int m=3;

int adder (int [ ][m]);

int main()

{int isum;

static int iarray[n][m]={5, 1, 6, 20, 15, 0};

isum= adder(iarray);

cout << "isum=" << isum << endl;

//или cout << "isum=" << adder(iarray) << endl;

_getch();

return 0;}

int adder (int iarray[ ][m])

{int ipartial=0;

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

for (int j=0; j<m; j++)

ipartial +=iarray[i][j];

return (ipartial);}

Задание 4.2.16

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <string.h>

#include <iomanip>

#include <conio.h>

#include <stdlib.h>

using namespace std;

void vvod_ar(double *, int, int);

void vyvod_ar(double *, int, int);

int main ()

{const int n=3;

const int m=3;

static double *par = (double *)malloc (n*m * sizeof(double));

// или new double [n*m];

vvod_ar(par, n, m); //ввод элементов двумерного массива

vyvod_ar(par, n, m); //вывод элементов двумерного массива

free (par); //или delete [ ] par;

_getch();

return 0;}

void vvod_ar(double * ar, int n, int m) //функция ввода

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

for (int j=0; j<m; j++)

scanf("%lf", &ar[i*m+j] ); // или (ar+i*m+j)}

void vyvod_ar(double * ar, int n, int m) //функция вывода

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

{for (int j=0; j<m; j++)

printf ("%10.3lf", ar[i*m+j]); // или *(ar+i*m+j)

printf ("\n");}}

Задание 4.2.17

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <string.h>

#include <iomanip>

#include <conio.h>

#include <stdlib.h>

using namespace std;

const int DAYS = 7; //число строк в массиве

const int MAX = 10; //максимальный размер строки

void VyvodStr (char (* st)[MAX], const int ) ; //функция вывода строк

int main()

{ //инициализация строк при определении массива

char star[DAYS][MAX] = { "Sunday",

"Monday",

"Tuesday",

"Wednesday",

"Thursday",

"Friday",

"Saturday" };

VyvodStr (star, DAYS); //вывод строк

_getch();

return 0;}

void VyvodStr (char (* st)[MAX], const int DAYS)

{for(int j=0; j<DAYS; j++) //вывод строк

cout << st[j] << endl;

return;}

Задание 4.2.18

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <string.h>

#include <iomanip>

#include <conio.h>

#include <stdlib.h>

using namespace std;

#define LINE_STOP ""

const int DAYS = 7; //число строк в массиве

const int MAX = 10; //максимальный размер строки

void VyvodStr (char (* st)[MAX], const int ) ; //вывод n строк массива

void VvodStr (char (* st)[MAX], const int ) ; //ввод n строк массива

void VvodStr1 (char st[][MAX], const int n); //ввод строк массива до CTRL+Z

void VvodStr2 (char st[][MAX], const int n); //ввод строк до пустой строки

int _tmain(int argc, _TCHAR* argv[])

{int n=3, m=4;

char star[DAYS][MAX] ;

VvodStr (star, n); //ввод строк

VyvodStr (star, n); //вывод строк

VvodStr1 (star, n); //ввод строк, способ 2

VyvodStr (star, n); //вывод строк

VvodStr2 (star, n); //ввод строк, способ 3

VyvodStr (star, n); //вывод строк

_getch();

return 0;}

void VvodStr (char st[][MAX], const int n)

{cout << "vvod strok: ?" << endl;

int i=0;

while(cin.getline(st[i], MAX) && i < n-1) //ввод n строк массива

i++;}

void VvodStr1 (char st[][MAX], const int n)

{cout << "vvod strok: ?" << endl;

int i=0;

while(cin.getline(st[i++], MAX)); //ввод строк массива до CTRL+Z}

void VvodStr2 (char st[][MAX], const int n) //ввод строк до пустой строки

{cout << "vvod strok: ?" << endl;

int i=0;

while( cin.getline(st[i], MAX) && (strcmp(st[i], LINE_STOP)))

i++;}

void VyvodStr (char st[][MAX], const int n)

{cout << "\nvyvod strok: ?" << endl;

for(int j=0; j<n; j++) //вывод строк

cout << st[j] << endl;

return;}

4.3. Индивидуальное задание

Вариант 13

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

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <algorithm>

#include <string>

#include <functional>

using namespace std;

bool IsWordSeparator(char ch)

{ // если сивмол не буква и не цифра, то это разделитель слов

return !isalpha(ch) && !isdigit(ch);}

void SortWords(string& str)

{ for (string::iterator iter = str.begin(), end = str.end(); iter != end;)

{ // ищем первый не разделитель слов

iter = find_if(iter, end, not1(ptr_fun(IsWordSeparator)));

if (iter != end)

{// нашли. теперь ищем разделитель слов, начиная со следующего за неразделителем символа

string::iterator wordEnd = find_if(iter + 1, end, &IsWordSeparator);

// полученные итераторы (iter и wordEnd) - это итераторы на начало и конец слова.

// сортируем этот интервал

sort(iter, wordEnd);

// подготовка к следующей итерации

iter = wordEnd;

if (iter != end)

++iter;}}}

int main()

{string str = "321, dsf, dfd, gdfs gda;,";

cout << "Before sorting: " << str << endl;

SortWords(str);

cout << "After sorting: " << str << endl;

return 0;}

5. РЕКУРСИВНЫЕ ФУНЦИИ

5.1 Теоретическая часть

Понятие рекурсии затруднено даже для программистов с опытом. Для вычислительных задач более эффективной, чем рекурсия, оказывается итерация. Как мы знаем, итерация - это повторяемое выполнение процесса до тех пор, пока не будет удовлетворено некоторое условие (while или do while). Рекурсивное описание алгоритмов обработки и их программная реализация, как правило, не экономичны - они требуют много памяти и времени. Следует избегать рекурсии там, где есть очевидное итерационное решение. Но для сложной структуры - рекурсия предпочтительней.
Рекурсия - это использование рекурсивных определений. Рекурсивное определение задает элементы множества с помощью других элементов этого же множества. Рекурсивная задача разбивается на этапы. Для ее решения вызывается рекурсивная функция, которая знает, как решать только простейшую часть задачи - базовую задачу. Если эта функция вызывается для решения базовой задачи, то она просто вызывает результат. Если функция вызывается для выполнения более сложной задачи, то она делит
эту задачу на две части: одну часть, которую функция умеет решать, и другую, которую функция решать не умеет. Чтобы сделать рекурсию выполнимой, последняя часть должна быть похожа на исходную задачу, но быть по сравнению с ней несколько проще или несколько меньше. Эта новая задача подобна исходной, поэтому функция вызывает новую копию самой себя, чтобы начать работать над меньшей проблемой. Это называется шагом рекурсии. Шаг рекурсии содержит ключевое слово return, так как в дальнейшем результат шага будет объединен с той частью задачи, которую функция умеет решать, и сформируется конечный результат, который будет передан в исходное место вызова, возможно в main.
Рекурсивная функция - функция, содержащая вызовы самой себя. Выполнение рекурсивной функции происходит в два этапа: первый этап завершается выполнением так называемого условия завершения рекурсии; второй этап - вычисление действий на основе рекурсивных соотношений.
На первом этапе осуществляется построение рекурсивных соотношений и частичное вычисление (с задержкой выполнения действий, которые не могут быть выполнены на данном отрезке). Задержка вычислений обуславливается тем, что в описании рекурсивной функции всегда присутствует обращение к той же самой функции. Выделение таких фрагментов памяти происходит и при каждом вызове очередного «поколения» рекурсивной функции.
При вызове рекурсивной функции с некоторым значением аргумента ее выполнение не завершается до конца, а порождает новый вызов с другим значением аргумента. Каждый рекурсивный вызов порождает новое «поколение» рекурсивной функции, сопровождаемое, в частности, выделением стековой памяти под параметры-значения и локальные переменные. Любой локальной переменной Х на разных уровнях рекурсии будут соответствовать различные ячейки памяти, которые могут иметь различные значения. Поэтому выполнение вычислений с большой глубиной рекурсии (числом поколений) нередко приводит к нехватке этой памяти (сегмента стека).
Формы рекурсивных функций
Определены следующие формы рекурсивных функций:

- форма с выполнением действий на рекурсивном спуске (до рекурсивного вызова);

- форма с выполнением действий на рекурсивном возврате (после

рекурсивного вызова);

- форма с выполнением действий, как на рекурсивном спуске, так и на рекурсивном возврате (как до, так и после рекурсивного вызова).

Виды рекурсий

Существуют два вида рекурсий. Прямая рекурсия - функция содержит вызовы самой себя. Косвенная рекурсия - кольцо - функция обращается к себе через вызов в другой функции. Глубина рекурсии вызова функции - максимальное количество незаконченных вызовов. Текущий уровень рекурсии - число рекурсивных вызовов в данный момент времени. Общее количество вызовов - количество вызовов всего, порожденных вызовом рекурсивной функции. Следует учитывать одну особенность, характерную для рекурсивных программ. Например, как было вычислено, для нахождения n-го числа Фибоначчи количество рекурсивных вызовов будет порядка 2n. Это называется экспоненциальной сложностью. Поэтому при написании программ рекурсию используйте, только убедившись, что она не вызовет очень большое число рекурсивных вызовов.

Обобщенные алгоритмы

Нередко алгоритмы описываются как некоторые «обобщенные» алгоритмы, применяемые не только к разным данным, но и инвариантные относительно разных действий. Обобщенные алгоритмы описываются в виде подпрограмм, имеющих в качестве параметров функции (в С++ такие параметры являются указателями на функцию). При обращении к таким подпрограммам в качестве аргумента должно быть задано имя функции, имеющей ту же сигнатуру (количество и тип параметров), что и формальный параметр.

Вычисление интеграла по методу правых прямоугольников

Рассмотрим вычисление интеграла по методу правых прямоугольников (функция Vych_Int_rpram). Организуем иначе и саму процедуру вычисления интеграла. Откажемся от выделения процедуры одноразового вычисления площади в виде отдельной функции Sum и «растворим» эту процедуру в теле функции Vych_Int_rpram, наряду с процедурой двойного пересчета. Оптимизируем процесс вычисления площади.

5.2 Практическая часть

Задание 5.2.1

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

void PopeAndDoge1();

int main ()

{PopeAndDoge1();

_getch();

return 0;}

void PopeAndDoge1()

{cout << " У попа была собака, он её любил." << endl;

cout << " Она съела кусок мяса, он её убил." << endl;

cout << " похоронил и надпись написал: " << endl;

PopeAndDoge1();}

Задание 5.2.2

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

void PopeAndDoge1();

int main ()

{PopeAndDoge1();

_getch();

return 0;}

void PopeAndDoge1()

{PopeAndDoge1();

cout << " У попа была собака, он её любил." << endl;

cout << " Она съела кусок мяса, он её убил." << endl;

cout << " похоронил и надпись написал: " << endl;}

Задание 5.2.3

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

double Rec_Fact_Up (int);

int main()

{ int i=5;

double Fact;

Fact = Rec_Fact_Up (i);

cout << i << "!= " << Fact << endl;

_getch();

return 0;}

double Rec_Fact_Up (int n)

{if (n<=1) return 1.0;

else return Rec_Fact_Up(n-1) * n;}

Задание 5.2.4

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

double Rec_Fact_Dn (double, int, int);

int main()

{ int i=5; int n=1;

double Fact;

Fact = Rec_Fact_Dn(1.0, 1, n);

cout << i << "! = " << Fact << endl;

_getch();

return 0;}

double Rec_Fact_Dn (double Mult, int i, int m)

{Mult=Mult*i;

if (i==m) return Mult;

else return Rec_Fact_Dn (Mult, i+1, m);}

Задание 5.2.5

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

void Reverse ();

int main ()

{ cout << "Input string:\n";

Reverse();

cout << endl;

_getch();

return 0;}

void Reverse ()

{ int ch;

if (( ch = _getche() ) !='\r')

{Reverse (); _putch(ch);}}

Задание 5.2.6

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

double rec_degree(double, int );

int main ()

{ double x;

double y;

int n;

cout << " Input (X<= 10) Input (-90<=N<=90) ?: " << endl;

cin >> x >> n ;

y = rec_degree(x, abs(n));

cout << x << " " << n << " " << (n>0 ? y : 1/y) << endl;

_getch();

return 0;}

double rec_degree(double x, int n)

{ double r;

if (!n ) return 1;

if ( !(n% 2)) return r=rec_degree(x, n/2), r*r;

else return x *rec_degree(x, n-1);}

Задание 5.2.7

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

void printd (int);

int main ()

{ int a=12345;

printd(a);

cout << endl;

_getch();

return 0;}

void printd (int n)

{ if (n < 0) {putchar ('-');

n=-n;}

if (n)

{printd (n/10);

putchar ( n%10 + '0');} }

Задание 5.2.8

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int NOD_iter (int, int);

int NOD_rec (int, int);

int main ()

{ int m=32;

int n=16;

cout << m <<" " << n << " " << NOD_iter (m, n) << endl;

cout << m <<" " << n << " " << NOD_rec (m, n) << endl;

_getch();

return 0;}

int NOD_iter (int m, int n)

{int r;

do { r = m % n;

m=n;

n=r;} while (r);

return m;}

int NOD_rec (int m, int n)

{if (!(m % n)) return n;

else return NOD_rec(n, m %n);}

Задание 5.2.9

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

unsigned long fib (unsigned long);

int main ()

{ unsigned long number;

cout << " Input number:" << endl;

cin >> number;

cout << "Fib number (" << number << ") = " << fib (number) << endl;

_getch();

return 0;}

unsigned long fib (unsigned long n)

{if ( n==0 || n==1 ) return n;

else return fib(n-1)+fib(n-2);}

Задание 5.2.10

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <iomanip>

using namespace std;

double sum (int [], int);

const int con = 5;

int main ()

{int array[con]= {1,2,3,4,5};

for (int i=0; i<con; i++)

cout << setw(3) << array[i];

cout << endl;

cout << sum (array, con) << endl;

_getch();

return 0;}

double sum (int s[], const int n)

{if (n==1) return s[0];

else return sum(s, n-1) + s[n-1];}

Задание 5.2.11

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int dif (int, int);

int sum (int, int);

int main()

{int (*func_ptr) (int, int);

int var1=20;

int var2=5;

int ret;

func_ptr=dif;

ret=(*func_ptr)(var1, var2);

cout << ret << endl;

func_ptr=sum;

ret=(*func_ptr) (var1, var2);

cout << ret << endl;

_getch();

return 0;}

int dif(int a, int b)

{return a-b;}

int sum(int a, int b)

{ return a+b;}

Задание 5.2.12

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <iomanip>

using namespace std;

void Vych_Int_1pram(double a, double b, double eps, double (*pf) (double), double *I, int *k) {};

void Sum (double a, double b, double h, double (*pf) (double), double *S) {};

double f1 (double) {return 0;}

double f2 (double) {return 0;}

int main ()

{double a, b, eps;

double Int;

int K_iter;

cout << "Input a, b, eps \n";

cin >> a >> b >> eps;

Vych_Int_1pram(a, b, eps, &f1, &Int, &K_iter);

cout << "Integral for f1 = " << Int << " K_iter = " << K_iter << endl;

Vych_Int_1pram(a, b, eps, &f2, &Int, &K_iter);

cout << "Integral for f2 = " << Int << " K_iter = " << K_iter << endl;

_getch();

return 0;}

Задание 5.2.13

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

void Vych_Int_lpram(double a, double b, double eps, double (*pf) (double),

double *I, int *k);

void Sum (double a, double b, double h, double (*pf) (double), double *S);

double f1 (double);

double f2 (double);

int main ()

{ double a, b, eps;

double Int;

int K_iter;

cout << "Input a, b, eps\n";

cin >> a >> b >> eps;

Vych_Int_lpram(a, b, eps, &f1, &Int, &K_iter);

cout << "Integral for f1 =" << Int << " K_iter= "<< K_iter << endl;

Vych_Int_lpram(a, b, eps, &f2, &Int, &K_iter);

cout << "Integral for f2 =" << Int << " K_iter = " << K_iter << endl;

_getch();

return 0;}

void Vych_Int_lpram(double a, double b, double eps, double (*pf) (double),

double *I, int *k)

{int n=20;

double h=(b-a)/n;

double S1=0, S2=0;

Sum (a, b, h, (*pf), &S1);

*k=0;

do

{ S2= S1;

n *=2;

h=(b-a)/n;

Sum (a, b, h, pf, &S1);

*k +=1;}while (fabs(S1-S2) > eps) ;

*I=S1;}

void Sum(double a, double b, double h, double (*pf) (double), double *S)

{ double x, sum;

x=a;

sum=0;

while (x<b)

{sum=sum+(*pf)(x);

x=x+h;}

*S=h*sum; }

double f1 (double x)

{return cos(x)/exp(0.333333*log(x));}

double f2 (double x)

{return cos(x*x*x)/sqrt(sqrt(x)); }

6. СТРОКИ

6.1 Теоретическая часть

Основные понятия

В С отсутствует специальный строковый тип и поэтому используются массивы элементов типа char, всегда содержащие в конце последовательности значащих символов код '\0', (концевой символ строки, иначе - ее терминальный символ). Этот тип называют также char*-строками, так как он может быть представлен в виде указателя на char.

В С++ сохранены те же возможности и разрешено использовать все библиотечные функции языка С для р бао ыт со стр оамки (будем называть их С-строки). Для подключения этих библиотечных средств к программам используются заголовки <cstring> и <string.h>.

Применение С-строк в ряде случаев неудобно : во-первых, С-строка всегда ограничена тем массивом с элементами типа char, который выделен для ее представления; во-вторых, в функциях для работы с С-строками нет контроля за их границами. Поэтому в стандартную библиотеку языка С++ введено несколько классов, позволяющих определять строковые переменные в виде объектов и выполнять над ними ряд операций (например, строку как объект класса string будем рассматривать во 2-ом семестре). Тем не менее, свое знакомство со строками мы начнем с С-строк.

Как и другие типы данных, строки могут быть: переменными и константами.

Особенности работы с С-строками в С++

- для представления С-строк используются массивы элементов типа char, содержащие в конце последовательности значащих символов код '\0';

- С-строка ограничена размером массива, который выделен для ее представления; размер нединамической С-строки должен быть задан только константным выражением;

- cтрока может быть проинициализирована как поэлементно символьными значениями (с обязательным завершающим символом `\0'), так и значением строкового литерала (завершающий символ `\0' формируется в этом случае в конце строки автоматически);

- нулевая строка - это строка, которая начинается с 0-символа `\0' (ее длина равна нулю, но в памяти она может занимать больше одного байта); нулевой указатель на строку (char *p_str = NULL;) не является эквивалентом нулевой строки;

- текущая длина строки отслеживается в процессе выполнения действий над строкой;

Операции со строками

Для работы с С-строками используются библиотечные функции языка С, описанные в заголовках <string.h> и <сstring>, однако надо учитывать, что в этих функциях нет контроля за границами строк.

Инициализация строки

Строка-массив может быть проинициализирована символьными значениями поэлементно. Чтобы символьный массив был представлен как строка, в его конец необходимо поместить завершающий символ `\0'- признак конца строки. В этом случае в процессе выполнения программы отслеживается текущая длина строки, а при выводе (помещении в поток cout идентификаторамассива) - выводится его содержимое, а не адрес (как для обычного массива).

Ввод-вывод строк

Для ввода-вывода С-строк используются функции printf (),scanf (),gets() и puts(), унаследованные из библиотеки С. Функция gets(s) читает символы с клавиатуры, в том числе и пробелы (до символа новой строки), и помещает их в строку, завершая ее 0-символом; функция puts(s) выводит строку, заменяя 0-символ символом новой строки.

6.2 Практическая часть

Задание 6.2.1

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int main ()

{char str1[] = "string-array";

cout << str1 << endl;

str1[0]='a';

cout << str1[0] << endl;

char* str2 = "string-pointer";

cout << str2 << endl;

str2++;

cout << str2 << endl;

_getch();

return 0;}

Задание 6.2.2

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int main()

{ char otvet[][10] = {"odin", "dwa"};

cout << otvet[0] << endl;

cout << otvet[1] << endl;

//otvet[0]++; //error!!!, otvet - указатель-константа

otvet [0][0]='a';

cout << otvet [0][0] << endl;

char* otvet1[] = {"odin", "dwa"};

cout << otvet1[0] << endl;

cout << otvet1[1] << endl;

otvet1[0]++;

cout << otvet1[0] << endl;

_getch();

return 0;}

Задание 6.2.3

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int main()

{ const int MAX = 80;

char str [MAX];

cin >> str;

char s[ ] = "abc";

char m[ ] = {'a','b','c'};

cout << m << endl;

char ss[ ] = {'a','b','c', '\0'};

char str1[] = "Minsk";

_getch();

return 0;}

Задание 6.2.4

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <iomanip>

using namespace std;

int main()

{const int MAX = 80;

char str[MAX];

printf ("Enter a string: ");

scanf_s ("%s", str);

printf ("%s", str);

printf (" %3s\n", str);

printf (" %10.2s\n", str);

printf (" %-10.2s\n", str);

printf (" string?\n");

scanf_s ("%s", str);

printf (" %s\n", str);

printf (" string?\n");

scanf_s("%s", str);

printf (" %s\n", str);

_getch();

return 0;}

Задание 6.2.5

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <iomanip>

using namespace std;

int main()

{const int MAX = 10;

char str[MAX];

printf ("Enter a string: ");

gets_s(str);

puts(str);

_getch();

return 0;}

Задание 6.2.6

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int main()

{ const int MAX = 10;

char str[MAX];

printf ("Enter a string: ");

for (int i=0; i<MAX; i++)

scanf_s ("%c", &str[i]);

str[MAX-1]='\0';

printf ("%s", str);

int i=0;

printf ("\n Enter a string: ");

while ( (str[i] = _getch() ) !=13 )

_putch (str[i++]);

str[i] = '\0';

_putch ('\n'); _putch ('o'); _putch('k');

printf ("\n%s", str);

_getch();

return 0;}

Задание 6.2.7

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int main()

{const int MAX = 80;

char str[MAX];

cout << "Enter a string: ";

cin >> str;

cout << "You enterd: " << str << endl;

_getch();

return 0;}

Задание 6.2.8

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int main()

{const int MAX = 10;

char str[MAX];

cout << "Enter a string: ";

for (int i=0; i<MAX; i++)

cin >> str[i];

str[MAX-1]='\0';

cout << "You entered: " << str << endl;

_getch();

return 0;}

Задание 6.2.9

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int main()

{const int MAX = 10;

char str[MAX];

cout << "Enter a string: ";

for (int i=0; i < MAX-1; i++)

cin.get(str[i]);

str[MAX-1]='\0';

cout << "You entered: " << str << endl;

_getch();

return 0;}

Задание 6.2.10

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int main()

{const int MAX = 80;

char str[MAX];

cout << "\n Enter a string: ";

cin.getline (str, MAX);

cout << "You entered: " << str << endl;

_getch();

return 0;}

Задание 6.2.11

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

const int MAX = 2000;

char str[MAX];

int main()

{cout << "\n Enter a string: \n";

cin.get(str, MAX, '$');

cout << "You entered: \n" << str << endl;

_getch();

return 0;}

Задание 6.2.12

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

int main()

{const int n =80;

char s[n];

while (cin.getline(s, n)) {

cout << s << endl;}

_getch();

return 0;}

Задание 6.2.13

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <iomanip>

using namespace std;

int main()

{const int MAX = 10;

char str[MAX];

cout << "\nEnter a string: ";

cin >> setw(MAX) >> str;

cout << "You entered: " << str << endl;

_getch();

return 0;}

Задание 6.2.14

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

void dispstr(char *);

int main()

{char str[] = "Idle people have the least leisure.";

dispstr(str);

_getch();

return 0;}

void dispstr(char* ps)

{while ( *ps )

cout << *ps++;

cout << endl;}

Задание 6.2.15

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <iomanip>

using namespace std;

int main ()

{ static char h[ ]="Press any key!";

static char *hd ="Press any key!";

int i;

for (i=0; i<15; i++) putchar (*(h+1));

putchar ('\n');

for (i=0; i,15; i++) putchar (*(hd+i));

putchar ('\n');

while (*hd !='\0') putchar (*hd++);

putchar ('\n');

putchar ('\n');

_getch();

return 0;}

Задание 6.2.16

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <cstring>

using namespace std;

int main()

{ char str1[] = "Oh, Captain, my Captain! "

"our fearful trip is done";

const int MAX = 80;

char str2[MAX];

unsigned j;

for(j=0; j<strlen(str1); j++)

str2[j] = '\0';

str2[j] = str1[j];

cout << str2 << endl;

_getch();

return 0;}

Задание 6.2.17

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <iomanip>

using namespace std;

void vvodstr (char*, const int);

void vyvodstr (char*);

void copystr (char*, const char*);

int main()

{ const int MAX = 80;

char str1[MAX];

char str2[MAX];

vvodstr (str1, MAX);

vyvodstr (str1);

copystr(str2, str1);

cout << "new ";

vyvodstr (str2);

_getch();

return 0;}

void vvodstr(char* st, int n)

{ cout << "string? " << endl;

cin.getline(st, n);}

void vyvodstr(char* st)

{ cout << "string: " << endl;

cout << st << endl;}

void copystr (char* dest, const char* src)

{ while (*src)

*dest++ = *src++;

*dest = '\0';}

Задание 6.2.18

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

void scpy ( char*, char* );

int main ()

{ char* str1 = " Press any key!";

char str2[80];

scpy (str2, str1);

cout << str2 << endl;

_getch();

return 0;}

void scpy (char s[], char t[])

{int i=0;

while ((s[i]= t[i]) !='\0')

i++;}

Задание 6.2.19

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <stdlib.h>

using namespace std;

int main()

{const int MAX = 80;

char str[MAX] = "a";

char *endptr;

long il;

il = strtol(str, &endptr, 2);

cout <<il<< " " <<endptr << endl;

cout << endl;

il = strtol(str, &endptr, 16);

cout << il << " " << endptr << endl;

_getch();

return 0;}

Задание 6.2.20

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <stdlib.h>

using namespace std;

int main()

{const int MAX = 80;

char str[MAX] = "3.1415", str1[MAX]="3.1415e+00", str2[MAX]="3.14#00";

char *endptr;

double d;

d = strtod(str, &endptr);

cout<<d<<" " << endptr << endl;

d = strtod(str1, &endptr);

cout<<d<<" " << endptr << endl;

d = strtod(str2, &endptr);

cout<<d<<" " << endptr<<endl;

_getch();

return 0;}

Задание 6.2.21

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <stdlib.h>

using namespace std;

int main()

{char a[ ] = "10) rost - 184 cm, ves - 67 kg";

int num;

long rost;

double ves;

num = atoi(a);

rost = atol (&a[11]);

ves = atof (&a[25]);

cout << num << " " << rost << " " << ves;

_getch();

return 0;}

Задание 6.2.22

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <string.h>

#include <stdlib.h>

using namespace std;

int main()

{char string[ ] = "this sentence;has-5words.";

char *tokenPtr;

cout << string << endl << "by the words:" << endl;

tokenPtr = strtok_s (string, " ;-.");

while (tokenPtr !=NULL)

{cout << tokenPtr << endl;

tokenPtr = strtok_s (NULL, " ;-.");}

_getch();

return 0;}

Задание 6.2.23

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <string.h>

using namespace std;

int main()

{char* str = "aaaa bbbbbbbb ccc ddd eeeeee fffffff";

size_t len = strlen(str);

char* ptr = new char (len+1);

strcpy_s (ptr, len+1, str);

cout << "ptr=" << ptr << endl;

delete[] ptr;

_getch();

return 0;}

Задание 6.2.24

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

void convertToUppercase (char *);

int main()

{char string [ ] = "aaaaaaaa";

cout << string << endl;

convertToUppercase(string);

cout << string << endl;

_getch();

return 0;}

void convertToUppercase (char*sPtr)

{while (*sPtr !='\0') {

*sPtr = toupper(*sPtr);

++sPtr;}}

Задание 6.2.25

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

void convertToUppercase ( const char *);

int main()

{char string [ ] = "aaaaaa";

cout << string << endl;

convertToUppercase (string);

cout << string << endl;

_getch();

return 0;}

void convertToUppercase (const char *sPtr)

{for ( ; *sPtr != '\0'; sPtr++);

{cout << *sPtr;}}

Задание 6.2.26

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

void convertToUppercase (char *sPtr);

int main()

{char *s1= "pointer";

cout << s1 << endl;

convertToUppercase (s1);

cout << s1 << endl;

_getch();

return 0;}

void convertToUppercase (char *sPtr)

{ while (*sPtr != '\0') {

++sPtr; }}

7. СТРУКТУРЫ. ОБЪЕДИНЕНИЯ. ПОЛЯ БИТОВ В СТРУКТУРАХ

7.1 Теоретическая часть

Структура как пользовательский тип и совокупность данных

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

Определение структуры (структурного типа, шаблона структуры) задает внутреннюю организацию структурных переменных после их определения и никак не связано с резервированием памяти компилятором, не создает никаких переменных.

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

Имена полей в одном шаблоне структуры должны быть уникальными. Однако в разных шаблонах можно использовать совпадающие имена полей. Более того, имя шаблона может совпадать с именами полей и переменных. Поскольку имена полей «скрыты» внутри шаблона, они могут дублировать «внешние» переменные и поля в других описаниях структур.

Область видимости шаблона структуры:

- локальный шаблон структуры описан внутри блока { } и видим только из пределов данного блока, в частности из пределов конкретной функции;

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

Расположение структурных переменных в памяти Изучая структуры, имеет смысл обращать внимание на их представление в памяти компьютера. Порядок описания полей в определении структурного типа задаёт порядок их расположения в памяти.

Объединение как пользовательский тип и совокупность данных

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

Основное назначение объединения - обеспечить возможность доступа к одному и тому же участку памяти с помощью объектов разных типов.

Размер памяти, выделяемый объединению, равен максимальному из размеров памяти, выделяемых для отдельных полей шаблона. Тип поля может быть любым, в том числе и структурой. Структуры могут быть членами объединения, и объединение может быть членом структуры. Разрешается создание и массива объединений.

Переменные типа объединение могут быть формальными параметрами и аргументами вызова функций. Чтобы функция не изменила аргумент-объединение при передаче по указателю или ссылке, соответствующий параметр объявляется со спецификатором const. Функция может возвращать переменную-указатель или ссылку типа оъбединение.

7.2 Практическая часть

Задание 7.2.1

Текст программы:

#include <iostream>

#include <conio.h>

using namespace std;

struct complex {float re, im;};

complex read();

void print (complex);

void add (complex, complex, complex*);

void add1 (complex&, complex&, complex&);

int main()

{complex c1, c2, c3, c4;

c1 = read();

c2 = read();

add(c1, c2, &c3);

print (c1); cout <<"\t + \t" << endl;

print (c2); cout << " = " << endl;

print (c3);

cout << endl;

add1 (c1, c3, c4);

print (c1); cout <<"\t + \t" << endl;

print (c3); cout << " = " << endl;

print (c4);

_getch();

return 0;}

complex read()

{complex c;

cout <<"re, im" << endl;

cin >> c.re >> c.im;

return c;}

void print (complex c)

{cout << c.re << " + i*" << c.im << endl;

return;}

void add (complex c1, complex c2, complex *c3)

{c3->re = c1.re + c2.re;

c3->im = c1.im + c2.im;

return;}

void add1 (complex &c1, complex &c2, complex &c3)

{c3.re = c1.re + c2.re;

c3.im = c1.im + c2.im;

return;}

Задание 7.2.2

Текст программы:

#include <iostream>

#include <conio.h>

using namespace std;

struct raction {int chis, znam;};

void put (raction);

raction sokr (raction A);

void div (raction A, raction B, raction *C);

int main(){

raction A, B, C;

puts ("raction1, raction2 : ?");

scanf ("%d%d%d%d", &A.chis, &A.znam, &B.chis, &B.znam);

div (A, B, &C);

printf (":"); put(A);

printf ("\tna\t"); put (B);

printf ("\n="); put (C);

_getch();

return 0;}

void put (raction A)

{if (A.chis * A.znam <0) printf ("-");

A.chis = abs( A.chis);

A.znam = abs(A.znam);

printf("%d/%d", A.chis, A.znam);}

void div (raction A, raction B, raction *C)

{A=sokr(A);

B=sokr(B);

C->chis = A.chis*B.znam;

C->znam = A.znam*B.chis;

*C=sokr (*C);}

raction sokr (raction A)

{int i, min;

if (abs(A.chis) > abs( A.znam)) min = abs(A.znam);

else min = abs(A.chis);

for (i=min; i>1; i--)

if (A.chis % i ==0 && A.znam % i ==0) break;

A.chis /=i;

A.znam /=i;

return A;}

Задание 7.2.3

Текст программы:

#include <iostream>

#include <conio.h>

using namespace std;

struct date {int d, m, y;

char *mname;} md;

static int dofm[2][12]={

{31, 28, 31,30, 31, 30, 31, 31, 30, 31, 30, 31},

{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30 ,31}};

static char *name[ ]={"janvar", "fevral", "mart", "aprel", "maj", "ijun", "ijul",

"avgust", "sentabr", "oktyabr", "nojabr", "decabr"};

void monthd(date *, int);

int main(){

int yd;

cout << "god, den ??";

cin >> md.y >> yd;

monthd (&md, yd);

md.mname = name[md.m];

cout << md.d <<" " <<md.mname << endl;

_getch();

return 0;}

void monthd(date *md, int yd)

{int i, v;

v=(!(md->y%4)&&(md->y%100) || ! (md->y%400));

if (yd>365+v)

{cout << "neverno nomer" ; exit(1);}

md->d = yd;

for (i=0; md->d > dofm[v][i]; i++)

md->d -=dofm[v][i];

md->m=i;}

Задание 7.2.4

Текст программы:

#include <iostream>

#include <conio.h>

using namespace std;

union bits{

double d;

unsigned char c [sizeof (double)];};

int main()

{bits ob={199.5};

for (int j=sizeof(double)-1; j>=0; j--)

{cout << "byte" <<j<<": ";

for(int i=128; i; i >>=1)

if (i & ob.c[j]) cout << "1";

else cout << "0";

cout << "\n"; }

_getch();

return 0;}

Задание 7.2.5

Текст программы:

#include <iostream>

#include <conio.h>

using namespace std;

union

{char simb;

struct {int x:5;

int y:3;}hh;}cod;

int main(){

cod.hh.x=4;

cod.hh.y=2;

cout<<cod.simb;

_getch();

return 0;}

Задание 7.2.6

Текст программы:

#include <iostream>

#include <conio.h>

using namespace std;

unsigned char cod (int a, int b)

{union {unsigned char z;

struct {unsigned int x:4;

unsigned int y:4;} hh;}un;

un.hh.x=a%16;

un.hh.y=b%16;

return un.z;}

int main()

{int a=36, b=20;

cout << cod(a, b) << endl;

_getch();

return 0;}

Задание 7.2.7

Текст программы:

#include <iostream>

#include <conio.h>

using namespace std;

unsigned char cod (int a, int b);

void binary (unsigned char ch);

int main(){

int k, m, n;

cout <<"m=? n=? :";

cin >> m >> n;

k = cod (m, n);

cout << "cod=" << hex << k << endl;

cout << "simvol=" << char(k) << endl;

cout <<dec << endl;

binary(k);

_getch();

return 0;}

unsigned char cod (int a, int b)

{union{unsigned char z;

struct {unsigned int x:4;

unsigned int y:4;}hh;}un;

un.hh.x=a%16;

un.hh.y=b%16;

return un.z;}

void binary (unsigned char ch)

{ union {unsigned char ss;

struct {

unsigned a0:1;

unsigned a1:1;

unsigned a2:1;

unsigned a3:1;

unsigned a4:1;

unsigned a5:1;

unsigned a6:1;

unsigned a7:1;} byte;} cod;

cod.ss=ch;

cout <<"nomera bitov: 7 6 5 4 3 2 1 0\n";

cout <<"znachenie: ";

cout << " " << cod.byte.a7 << " " << cod.byte.a6;

cout << " " << cod.byte.a5 << " " << cod.byte.a4;

cout << " " << cod.byte.a3 << " " << cod.byte.a2;

cout << " " << cod.byte.a1 << " " << cod.byte.a0;

cout << endl;}

7.3. Индивидуальное задание

Вариант 13

Скопировать из файла F1 в файл F2 все строки, начинающиеся на букву «А» и расположенные между строками с номерами N1 и N2.

Определить номер той строки, в которой больше всего согласных букв, файла F2.

Текст программы:

#include "stdafx.h"

#include <iostream>

#include <fstream>

#include <vector>

#include <string>

using namespace std;

const char *fname1 = "F1.txt";

const char *fname2 ...


Подобные документы

  • Разработка блок-схемы и программы обработки одномерного массива с доступом к элементам с помощью индексов и с помощью указателей. Словесное описание алгоритма и пользовательского интерфейса, листинг программы обработки матрицы и результат её выполнения.

    курсовая работа [391,1 K], добавлен 30.09.2013

  • Запись кодов команд программы и констант в FlashROM, кодов исходных данных в EEPROM, требуемых значений установочных битов (Fuse Bits) и битов защиты (Lock Bits). Запись и чтение кодов при программировании, способы программирования в микроконтроллерах.

    контрольная работа [24,2 K], добавлен 22.08.2010

  • Изучение функций и возможностей среды разработки языка программирования Pascal. Рассмотрение работы с одномерными и двумерными массивами, со строками и числами. Математическая формулировка задач. Разработка алгоритмов, описание структуры программ.

    курсовая работа [879,8 K], добавлен 11.02.2016

  • Изучение применяемых в программировании и информатике структур данных, их спецификации и реализации, алгоритмов обработки данных и анализ этих алгоритмов. Программа определения среднего значения для увеличивающегося количества чисел заданного типа.

    контрольная работа [16,0 K], добавлен 19.03.2015

  • Решение инженерных задач при работе с визуальными данными. Базовые структуры данных. Базовые операции над многомерными числовыми массивами. Калибровка камер, элементы восстановления пространственной структуры. Анализ движения, слежение за объектами.

    курсовая работа [4,5 M], добавлен 21.06.2011

  • Вычисление выражений, использование стандартных функций; работа с графикой. Порядок действий при вычислении, способы ввода данных с клавиатуры. Построение таблиц функций. Организация циклов в программе, итерационные процессы. Работа с массивами чисел.

    контрольная работа [614,7 K], добавлен 16.09.2012

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

    курсовая работа [1,3 M], добавлен 11.03.2014

  • Изучение определения, описания и вызова функций, указателей и ссылок на них. Написание функции умножения произвольного столбца двумерного массива на const. Умножение 2 столбцов массива на константы. Составление блок-схемы алгоритма и текста программы.

    лабораторная работа [182,3 K], добавлен 09.01.2012

  • Описание особенностей программирования циклических алгоритмов на С/С++. Использование операторов цикла для организации повтора в программе определенных действий. Создание и реализация программы приближенного вычисления интеграла методом трапеций.

    лабораторная работа [86,3 K], добавлен 25.03.2019

  • Целые числа в позиционных системах счисления. Недостатки двоичной системы. Разработка алгоритмов, структур данных. Программная реализация алгоритмов перевода в различные системы счисления на языке программирования С. Тестирование программного обеспечения.

    курсовая работа [593,3 K], добавлен 03.01.2015

  • Составление алгоритмов и написание программ циклической структуры с использованием векторов, указателей и векторов указателей на вектор на языке C++. Статическое и динамическое распределение памяти. Функция ввода и обработки элементов вектора или матрицы.

    контрольная работа [210,5 K], добавлен 25.03.2015

  • Введение в API-программирование. Транслирование клавиатурных сообщений в ASCII-коды. Текст программы на 32-битном ассемблере с применением API-функций. Функция для создания диалогового окна. Определение открываемого диска, каталога и имени файла.

    курсовая работа [40,6 K], добавлен 18.05.2014

  • Специфика понятия "плагиат" в программировании. Схема работы модулей инструментальной системы поиска плагиата. Основы поиска в исходных кодах программ, в произвольных текстах. Обзор инструментальных средств. Программная реализация модуля PlagiatSearch.

    магистерская работа [4,9 M], добавлен 27.06.2014

  • Разработка иерархии классов, содержащей не менее трех уровней. Определение базовых и производных классов. Анализ технического задания. Проектирование структуры программы и базовых алгоритмов. Программная реализация разработанной структуры и алгоритмов.

    курсовая работа [34,9 K], добавлен 11.01.2011

  • Общие сведения о языке С++. Операции и выражения, стандартные функции и структура программы. Использование функций при программировании на С++. Основные алгоритмы обработки массивов. Статические и динамические матрицы. Организация ввода-вывода в C++.

    учебное пособие [6,7 M], добавлен 28.03.2014

  • Анализ затрат и прибыли. Создание программного проекта для решения задачи о прибыли и убытках на языке программирования C#. Использование функций и переменных, компиляция программы. Алгоритмы и структуры данных. Тестирование программного обеспечения.

    курсовая работа [1,2 M], добавлен 03.01.2015

  • Понятие процедур и функций, их параметры, отличия и особенности спецификаций и тела. Вызов процедур и функций. Использование хранимых функций в SQL-операторах, уровни строгости для их вызова. Синтаксис удаления процедуры. Перегрузка модульных подпрограмм.

    презентация [259,9 K], добавлен 14.02.2014

  • Различные способы обработки информации и программирование в среде Pascal. История создания языка. Блок схема с использованием заголовка функций задания. Описание подпрограмм. Сущность структурного программирования в аспекте написания алгоритмов программ.

    курсовая работа [331,9 K], добавлен 18.01.2016

  • Основные типы циклов программирования. Методы применения специальных функций break, continue и цикла while. Обработка массивов информации. Условия применения циклических алгоритмов на языке программирования С++. Инициализация одномерного массива.

    курсовая работа [1,7 M], добавлен 06.01.2014

  • Приобретение навыков структурных блок-схем и листингов программ на языке "Ассемблер" для простых микропроцессорных систем управления процессами. Типовые структуры блок-схем алгоритмов обработки данных. Программная реализация типовых функций управления.

    методичка [1007,8 K], добавлен 01.10.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.