- •Министерство образования российской федерации
- •1. Вычисление значений функции
- •Упражнения
- •2. Выделение областей
- •Упражнения
- •3. Суммирование рядов
- •Упражнения
- •4. Позиционная запись числа
- •Упражнения
- •5. Делители целого числа
- •Упражнения
- •6. Преобразование и построение одномерных массивов
- •6.1 Линейный поиск в массиве
- •6.2 Построение массива без повторений
- •Упражнения
- •7. Максимальный и минимальный элементы массива.Сортировка
- •Упражнения
- •8. Обработка последовательностей символов
- •Упражнения
- •9. Преобразование и построение Матриц
- •Упражнения
- •Литература
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.
6.
7. 8.
10.
11. 12.
14.
15. 16.
18.
19. 20.
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;
}
}