Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб1(Книга).doc
Скачиваний:
7
Добавлен:
23.12.2018
Размер:
369.66 Кб
Скачать
  1. Функции с одним результатом

1. Для каждого из двух введенных целых чисел найти сумму цифр, составляющих эти числа.

а) Самостоятельно составить вариант программы без функции.

б) Второй вариант с функцией

int SumDigits(long int ); // прототип функции

main()

{ long a,b; cout<<"The first number "; cin>>a;

cout<<"Sum of digits of "<<a<<" "<<SumDigits(a);

cout<<"\nThe second number "; cin>>b;

int r; r=SumDigits(b);

cout<<"Sum of digits of "<<b<<" "<<r;

getch(); return 0;

}

int SumDigits(long int x) // Описание функции

{ int ost,s; s=0;

while(x!=0)

{ ost=x%10; s=s+ost; x/=10;

}

return s;

}

2. Составить логическую функцию, которая определяет, принадлежит ли точка плоскости с координатами (x, y) части круга радиуса R, находящейся в первой или третьей четверти. Оси координат и окружность, ограничивающая указанные секторы, принадлежат области. В головной программе последовательно ввести координаты точек плоскости и для каждой из них вывести “Да” или “Нет” в зависимости от принадлежности точки указанной выше области.

bool Test(float, float, float); // или bool Test (float x, float y, float R);

main()

{ float X,Y, R;

do // ввод радиуса с контролем ввода

{ cout<<"R= "; cin>>R;

if (R<=0) cout<<"Radius must be positive, repeat\n ";

}

while (R<=0);

int gy; gy=wherey()+1;

cout<<"X=1000 && Y=1000 -- exit";

while (1)

{ gotoxy(2,gy); cin>>X; gotoxy(10,gy); cin>>Y;

if (X==1000 && Y==1000) break;

if (Test(X, Y, R))

{ gotoxy(20, gy++); cout<<"Yes\n";

}

else { gotoxy(30, gy++); cout<<"No\n";

}

}

return 0;

}

bool Test (float x, float y, float r)

{ return x*x+y*y<=r*r && x*y>=0;

// или return x*x+y*y<=r*r && (x>=0 && y>=0 || x<=0 && y<=0);

// или if (x*x+y*y<=r*r && x*y>=0) return true; else return false;

}

  1. Составить функцию, которая вычисляет значение бесконечной суммы ряда y = 1– c точностью . В головной программе вычислить значения этой функции для x = –1.6, –1.4, –1.2, …, 1.4, 1.6 и вывести их на экран.

float MyCos(float x);

main()

{ printf("\n x MyCos(x) cos(x)");

for(float X=-1.6; X<=1.600001; X+=0.2)

printf("\n%6.1f%11.7f%11.7f", X, MyCos(X), cos(X)); // для контроля

// выводим значение этой же суммы, вычисленное с помощью стандартной функции

getch(); return 0;

}

float MyCos(float x)

{ float y=0, u=1, k=-1, eps=1e-6; // или eps=0.000001;

while (fabs(u)>eps)

{ y+=u; k+=2; u*=(-1)*x*x/(k*(k+1));

}

return y;

}

4. В одномерном целочисленном массиве найти числа с наибольшим количеством единиц в его двоичном представлении.

unsigned NUM (int);

main()

{ const n=5; long A[n]={10, 7, 14, 2, 19};

unsigned maxnum=0, num2;

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

{ num2=NUM(A[i]);

if (num2>maxnum) maxnum = num2;

}

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

if (NUM(A[i])==maxnum) cout<<A[i]<<" ";

getch(); return 0;

}

unsigned NUM (int a) // функция находит количество единиц

{ unsigned num=0; // в двоичном представлении одного целого числа

while (a)

{ num+=a%2; a/=2;

}

return num;

}

  1. Задан массив точек плоскости, т. е. два одномерных массива одинаковой фиксированной размерности X[n] и Y[n], где (Xi, Yi) – координаты i-й точки. Составить следующие функции:

  • логическую функцию Test для определения, принадлежит ли точка с координатами (x, y) k-й четверти;

  • функцию Num, которая с помощью первой функции в массиве точек определяет их количество в k-й четверти;

  • функцию main, которая с помощью второй функции находит количество точек в каждой четверти.

const n = 10;

bool Test (float , float , unsigned );

unsigned Num (float x[], float y[],unsigned k);

main()

{ float X[n]={1.1, 2.2, 3, 44, 0.5, -6.6, -0.7, -88, -9, -10},

Y[n]={11, 0.2, 33, 0.4,-5.5, 66, 77, -8.8,-9.9,-10};

cout<<" Number of points in\n";

for(unsigned K=1; K<=4;K++)

cout<<" "<<K<<" quarter "<<Num(X,Y,K)<<endl;

getch(); return 0;

}

bool Test (float u, float v, unsigned k)

{ switch (k)

{ case 1: return u>0 && v>0;

case 2: return u<0 && v>0;

case 3: return u<0 && v<0;

case 4: return u>0 && v<0;

}

}

unsigned Num (float x[], float y[], unsigned k)

{ unsigned number=0;

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

if (Test (x[i], y[i], k)) number++;

return number;

}

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

  2. Составить и проверить функцию нахождения наибольшего общего делителя двух натуральных чисел.

  3. Составить и проверить функцию, которая переставляет цифры заданного целого числа N1 в обратном порядке и получает новое число N2. Например, если N1=425, то N2=524.

  4. В массиве целых чисел найти количество чисел с наименьшим количеством цифр. Например, в массиве {123, 34, 56, 1000, 20, 55000, 777, 11} таких чисел 4, это 34, 56, 20, 11. Составить и использовать функцию, которая определяет количество цифр одного целого числа.

  5. В целочисленном одномерном массиве все симметричные числа, т. е. числа, которые одинаково читаются слева направо и справа налево (палиндромы, перевертыши) заменить нулем. Составить и использовать логическую функцию для определения, является ли одно целое число симметричным.

  6. В последовательности целых чисел (не в массиве) найти количество чисел, у которых в 16-м представлении нет букв. Составить и использовать функцию для нахождения количества букв в 16-м представлении одного целого числа.

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

  8. Составить функцию для вычисления значения производной полинома n-й степени. В головной функции определить массив коэффициентов полинома и проверить функцию.

  9. По заданным трем массивам одинаковой размерности a[6], b[6], c[6] и величинам x и y вычислить

.

Составить и использовать функцию для вычисления значения одного полинома n-й степени.

  1. Методом Ньютона решить уравнения ex1 + bx3 = 0 для b = 1, 1.5, 2, …, 4 с точностью 1=10-6. Составить и использовать функции:

  • вычисление ex с заданной точностью 2 = 0.000001 с помощью разложения в ряд Тейлора ex=1+x+ ;

  • функцию от двух аргументов x и b для вычисления с помощью первой функции значения ex1 + bx3;

  • функцию от двух аргументов x и b для вычисления с помощью первой функции значения производной ex1 + 3bx2;

  • функцию, реализующую метод Ньютона:

; n=1, 2, 3, … Вычисления продолжаются до тех пор, пока не выполнится условие . Массив x не формируется, достаточно двух переменных для старого и нового значений x. Используются вторая и третья функции;

  • функцию main, в которой с помощью четвертой функции в цикле c параметром b решаем уравнения для указанных значений b.

16. Вычислить значения интегралов для с = 1, 1.2, 1.4, …, 2.8, 3 по формуле трапеций. Составить и использовать функции:

  • вычисление y = . При этом используем следующий итерационный алгоритм: … . Вычисления продолжаются до тех пор, пока не выполнится условие . Массив y не формируется, достаточно двух переменных для старого и нового значений y;

  • вычисление интеграла для одного значения c по формуле трапеций

I = , где n задано и определяет количество отрезков, h=. При этом используется первая функция;

  • функцию main, в которой с помощью третьей функции вычисляем все значения интегралов.

  1. Вычислить приближенно площади одной “арки” синусоид

f(x) = sin (kx) для k = 1/4, 1/2, 1, 2, 4, используя формулу

,

где , n кратно трем, a = 0, b = /k. Значение y=sin(t) вычислять в функции, используя разложение в ряд Тейлора , с заданной точностью .

18, 19. Среди заданных координатами вершин треугольников на плоскости найти треугольник с наименьшим периметром (площадью). Составить и использовать следующие функции: вычисление длины отрезка по координатам двух вершин; вычисление периметра (площади) одного треугольника; головную функцию, в которой находим координаты требуемого треугольника.

20, 21. Среди заданных координатами вершин многоугольников на плоскости найти многоугольник с наименьшим периметром (площадью).

22.Даны массивы a[5], b[5], c[5]. Вычислить

23. Даны два массива x[10] и y[10]. Построить третий массив z[10]:

Составить и использовать следующие функции: вычисление наименьшего из двух чисел r = min(u, v); вычисление r = max(u, v); построение массива; функцию main().