приложение. Примеры программ
Пример 1. Преобразование массивов путем удаления (включения) одного или нескольких элементов.
Задание. Дан массив Х1,Х2,...,Х15. Исключить из него 5-ый и 7-ой отрицательные элементы.
#invlude<iostream.h> //подключение заголовочного файла библиотеки
//ввода-вывода
void main(void)
{ //Здесь начинается тело функции main
int mas[15]={-5,3,1,-8,7,-7,-6,-5,4,-5,-5,-4,-3,-7, -9}; //описание и
//инициализация массива
int mas1[13]; int i, n=0, j=0; //Описание и инициализация данных
for(i=0;i<15;i++) //Цикл для просмотра и преобразования элементов массива
{if(mas[i]>=0){mas1[j]=mas[i];j++;}
else{n++;
if((n!=5)&&(n!=7)){mas1[j]=mas[i];j++;}}};
cout<<"Заданный массив: \n";
for (i=0;i<15;i++) //Цикл для вывода заданного массива
cout<<mas[i];
cout<<"\nМассив после преобразования:\n";
for(j=0;j<13;j++) //Цикл для вывода преобразованного массива
cout<<mas1[j];
cout<<"\n";} //Конец функции main
Результат работы программы:
Заданный массив:
-5 3 1 -8 7 -7 -6 5 4 -5 -5 -4 -3 -7 -9
Массив после преобразования:
-5 3 1 -8 7 -7 -6 5 4 -5 -3 -7 -9
Пример 2. Табулирование функций. Использование итерационных циклов.
Задание. Выполнить табулирование заданной функции, используя функции, вычисляющие сумму ряда. При вычислении суммы ряда использовать рекуррентные соотношения. Сделать проверку, используя стандартные функции.
Y=2sinx+cosx
#include<iostream.h>
#include<math.h>
#include<iomanip.h>
double msin(double x) { //Функция для вычисления суммы ряда sinx
double E=1e-3;
double u=x, x2=x*x, s=x, m=2; do{
u=-u*x2/(m*(m+1));
s+=u;
m+=2;}
while (fabs(u)>E);
return s;}
double mcos(double x) { //Функция для вычисления суммы ряда cosx
double E=1e-3;
double s=0, u=1, m=0, x2=x*x; do {
s+=u;
u=u*x2/((m+1)*(m+2));
m+=2;}
while (fabs(u)>E);
return s;}
void main() { //Главная функция
double i;
cout <<"\n";
cout <<"________________________________________\n";
cout <<"| При разложении || Проверка |\n";
cout <<"----------------------------------------------------------------\n";
cout <<"| X | F(x) | Xст | F(x)ст | \n";
cout <<"----------------------------------------------------------------\n";
for (i=0;i<2*3.1415;i+=1){
cout <<"|"<<setw(7)<<i<<"|"<<setw(11)<<(2*msin(i)+mcos(i)*mcos(i))<< "|";
cout <<"|"<<setw(7)<<i<<"|"<<setw(11)<<(2*sin(i)+cos(i)*cos(i)<< "|\n";
cout <<"|_____|_______|________| |______|_________|";}
Результат работы программы:
При разложении в ряд | Проверка | |||
X | F(x) | Xст | F(x)ст | |
1.974837 | 1.974869 | |||
1.991547 | 1.991773 | |||
1.262242 | 1.262325 | |||
-1.086192 | -1.086355 | |||
-1.837085 | -1.837384 | |||
0.363365 | 0.363096 |
Пример 3. Обработка битовых последовательностей.
Задание. Реализовать алгоритм восстановления значения целого отрицательного числа по его дополнительному двоичному коду. Значение восстанавливаемого отрицательного числа вводится с клавиатуры, результат выводится на экран.
// Программа возвращает значение целого отрицательного числа по
// его дополнительному двоичному коду.
#include<iomanip.h>
#include<conio.h>
#include<math.h>
void main()
{ clrscr();
int a[16],f[16],i,k=15,c;
int b[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1};
int in,out=0, mask=1<<15;
cout<<endl<<"Введите целое отрицательное число (тип int) :"<<endl;
cin>>in;
cout<<endl;
//-------------------------Получение кода числа------------------------------
cout<<"Kод числа :"<<endl;
for ( c=0; c<=15; c++ )
{ if(in&mask) //Продвигаем маску по числу
a[c]=1; //и организовываем вектор "код"
else
a[c]=0;
cout<<setw(1)<<a[c];
in<<=1; }
cout<<endl<<endl;
//-------------------------Инвертируем вектор "код"------------------------------
for(i=0;i<=15;i++)
{ if(a[i]==1)
f[i]=0;
else
f[i]=1; }
//-------------------------Прибавляем 1 и получаем прямой код------------------
for(i=15;i>=0;i--)
if(b[i]==1)
if (f[i]==b[i])
{ f[i]=0;
b[i-1]=1;
}
else
f[i]=1;
cout<<"Восстановленное значение"<<endl;
//------По известной формуле переводим число в десятичный вид--------
for (i=0;i<=15;i++)
{ out+=f[i]*pow(2,k--);
}
out=-out;
cout<<out;
getch();
}
Результат:
Введите целое отрицательное число (тип int):
-123
Kод числа:
Восстановленное значение
-123
Пример 4. Функции. Передача параметров.
Задание. Вычислить интегралы: от функции f1 и f2, используя метод трапеции (Симпсона). В качестве формального параметра функции для вычисления интеграла необходимо использовать указатель на подынтегральную функцию. Выбрать интервалы интегрирования и шаг.
#include<iomanip.h>
#include<conio.h>
#include<math.h>
//Функция вычисления первого интеграла-integr1 y=
double integr1(double g)
{
return g*g*pow((4-g*g),0.5);
}
//Функция вычисления второго интеграла-integr2
double integr2(double g)
{ return pow(sin(g),2);}
//------------------------Пеовобразная для функции integr1-------------------
double int1 (double a,double b)
{return 2*asin(b/2)-sin(4*asin(b/2))-2*asin(a/2)-sin(4*asin(a/2));}
//------------------------Пеовобразная для функции integr2-------------------
double int2(double a,double b)
{ return b/2-0.25*sin(2*b)-a/2+0.25*sin(2*a);}
//------------------------Функция вычисления----------------------------------
double integral(double a,double b,int n, double (*integr)(double))
{ //a,b- границы интервала
//n- число шагов
//*integr- указатель на подынтегральную функцию
// применение см. ниже.
int i;
double x,h,s=0;//Вычисляем интеграл методом трапеций
h=(b-a)/n;
x=h;
for(i=1;i<=n;i++)
{
s+=integr(x);
x+=h;
}
return h*((pow(b,2)*pow((4-pow(b,2)),0.5))/2+s);
}
void main()
{
double x,h;
clrscr();
cout<<"!Значения, вычисленные методом трапеций!";
cout<<"Значения, вычисленные по первообразной !";
cout<<"! ";
cout<<integral(0,1.9999,96,*integr1);// В поле "указатель на функцию" записы-
// ваем указатель на функцию, интеграл
// которой необходимо вычислить.
cout<<" ! ";
cout<<int1(0,1.9999)<<" !";
cout<<"! ";
cout<<integral(0,3.14/2,96,*integr2);
cout<<" ! ";
cout<<int2(0,3.14/2)<<" !";
getch();
}
Результат:
!Значения, вычисленные методом трапеций ! Значения, вычисленные по первообразной !
3.139022 ! 3.161582
0.817752 ! 0.784602
литература
Основная
1. Буг Г. Объектно-ориентированное программирование с примерами применения. Киев: НИПО «ДиаСофт». 1993.
2. Вайнер Р., Пиксон Л. С++ изнутри. Киев: НИПО «ДиаСофт», 1993.
3. Дьюхарст. C., Старк. К. Программирование на С++ Киев: НИПО «ДиаCофт», 1993.
4. Касаткин А.И., Вальвачев А.Н. От Turbo C к Borland C++: Cправочное пособие. /Под общ. ред. А.И. Касаткина.- Минск:Выш. шк., 1992.
5. Подбельский А.А. Язык С++ :Учеб. пособие. - М.: Финансы и статиститка, 1995.
6. Цимбал А.А., Майоров А.Г., Козодоев М.А. Турбо С++: язык и применение М.: Джен АЙ Лтд, 1993.
Дополнительная
7. Белкин В. Обработка исключительных ситуаций в Си++: что, когда, как. PC Magazine/Russian Edition, 1995.- №4.- С. 180-186.
8. Бабэ Бруно. Просто и ясно о Borland C++. Пер. с англ.- М.: БИНОМ, 1995.- 400 с.
9. Дейтел Х., Как программировать на С++: Пер. с англ.- М.: ЗАО "Издательство БИНОМ", 1998.- 1024 с.: ил.
10.Касаткин И.А. Профессиональное программирование на языке Си. В 3т. Минск: Выш. шк., 1993.
11.Керниган Б., Ритчи Д. Язык программирования Си. -М.: Финансы и Статистика, 1992.
12.Кушниренко А.Г., Лебедев Г.В. Основы информатики и вычислительной техники. М.: Просвещение, 1990.
13.Лукас П. С++ под рукой. -Киев НИПО «ДиаСофт», 1993.
14.Липпман С. Б. С++ для начинающих: Пер. с англ.- М.: Унитех; Рязань: Гэлион, 1993.- Т. 1.- 304 с.; Т. 2.- 345 с.
15.Неформальное введение в С++ и Turbo Vision: Пер. с англ.- Санкт-Петербург: Галерея "ПЕТРОПОЛЬ", 1992, 384 с.
16.От Си к Си++ / Е. И. Козелл, Л. М. Романовская, Т. В. Русс и др.- М.: Финансы и статистика, 1993.- 272 с.
17.Пол Ирэ. ООП с использованием С++: Пер. с англ./ Киев: НИПО «ДиаСофт Лтд.», 1995.-480с.
18.Романов В. Ю. Программирование на языке С++. Практический подход.- М.: Компьютер, 1993.- 160 с.
19.Рассохин Д. Н. От Си к Си++.- М.: ЭДЭЛЬ, 1993.- 128 с.
20.Страуструп Б. Язык программирования Си++: Пер. с англ.- М.: Радио и связь, 1991.- 352 с.
21.Страуструп Б. Язык программирования Си++. Второе издание : Пер. с англ.- Киев: ДиаСофт, 1993. Часть 1.- 264 с. Часть 2.- 296 с.
22.Уэйт М., Прата С., Мартин Д. Язык Си. -М.: Мир, 1988.
23.Шнайберг Л.Л., Гончаров М.В. Справочное руководство по основам информатики и вычислительной техники. -М.: Финансы и статистика; Компьютерпресс, 1990.
24.Эллис М., Страуструп Б. Справочное руководство по языку программирования С++ с комментариями. Проект стандарта ANSI: Пер. с англ.- М.: Мир, 1992.- 445 с.
Дата добавления: 2017-01-29; просмотров: 673;