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

2. Выделение областей

Пример. Определить принадлежность точки с координатами x,yзаштрихованной части плоскости:

#include <stdio.h>

#include <math.h>

#define sq(t) ((t)*(t))

main()

{float x,y; char yn,temp;

do {

printf("введите координату x...............");

scanf("%g",&x);

printf("введите координату y...............");

scanf("%g",&y);

if (!(x==0)&&(((sq(x-1)+sq(y-1)<=1)&&((y>=x)&&(y>=1/x)||

(y<=x)&&(y<=1/x)))||((sq(x-1)+sq(y-1)>=1)&&((y>=x)&&

(y<=1/x)&&(x<0)||(y<=x)&&(y>=1/x)&&(x>0)))))

printf("....принадлежит....\n");

else

printf("...не принадлежит....\n");

printf("Продолжить работу-y, закончить-n\n");

temp=getchar(); yn=getchar(); temp=getchar();

} while ((yn!='n')&&(yn!='N')); }

Тест:

x

y

результат

1

0.5

да

1

1.5

да

1

3

нет

4

2

да

-5

-1

да

-2

-0.01

нет

-1

1

нет

Упражнения

Определить принадлежность точки с координатами x,y заштрихованной части плоскости:

1. 2.

3. 4.

  1. 6.

7. 8.

  1. 10.

11. 12.

  1. 14.

15. 16.

  1. 18.

19. 20.

  1. 22.

23. 24.

25.

3. Суммирование рядов

Пример. Вычисление бесконечной суммы S=с заданной точностью . Считается , что заданная точность достигается ,если вычислена сумма нескольких первых слагаемых и очередное слагаемое оказалось по модулю меньше, чем

Реккурентная формула , связывающая значения последующего слагаемого с предыдущим имеет вид:

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

#include <iostream.h>

main()

{ long double eps,s,y,x;

int n;

n=0;

eps=1.e-5;

s=0;

y=1.;

cin>>x;

while(fabs(y)>eps)

{ s=s+y;

n=n+2;

y=(-1)*y*x*x/(n*(n-1));

}

cout<<s<<" "<<n-2;

}

Упражнения

Выполнить следующие вычисления:

а) задавая xиn(число членов суммы ряда), найти суммуSи

;

б) задавая xиn(число членов суммы ряда), найти суммуSв порядке убывания индекса до нуля;

в) задавая xи, найти суммуSи число членов суммыn. Суммирование выполнять до тех пор, пока не выполнится условие:

4. Позиционная запись числа

Пример 1. Найти количество цифр в числе и поменять их порядок на обратный.

Для решения задачи используем позиционную запись числа в десятичной системе счисления: n=ak-110k-1+ak-210k-2+ ...+a1101+a0. Остаток от деленияnна 10 дастa0. Разделимnна 10 , а результат обозначим черезn1:n1=ak-110k-2+ak-210k-3+ ...+a2101+a1. Остаток от деленияn1 на 10 дастa1. Повторяя операцию деления до тех пор , пока не результат не будет равен 0, найдем все цифры числаn. При этом число шагов деления совпадает с количеством цифр в числе. Образуя сумму по реккурентной формулеmk=mk-110+ak-1, получим значение числа с обратным порядком цифр.

#include <iostream.h>

#include<math.h>

main()

{ int n,m,k;

m=0;

k=0;

cin>>n;

while(n>0)

{ m=10*m+n%10;

n=n/10;

k=k+1;

}

cout<<"число цифр :"<<k<<endl;

cout<<"палиндром :"<<m<<endl;

Пример 2. Дано натуральное число n. Выбросить из записи числаnцифры 0 и 5,оставив прежним порядок остальных цифр.

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

#include <iostream.h>

#include<math.h>

main()

{ long int n,m,k,l;

m=0;

k=1;

cin>>n;

while(n>0)

{ l=n%10;

if(l!=5 && l!=9)

{ m=m+k*l;

k=k*10;

}

n=n/10;

}

cout<<m<<endl;

}

Пример 3. Найти все трехзначные десятичные числа, сумма цифр которых равна заданному натуральному числу

Решение содержит два вложенных цикла по числу единиц и числу десятков. Число сотен вычисляется по заданной сумме цифр.

#include <iostream.h>

main()

{int n;

int i,j,k;

do

cin>>n;

while(n<=0 && n>27);

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

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

{ k=n-i-j;

if(k>=1 && k<=9)

cout<<i+j*10+k*100<<endl;

}

}