- •1. Рабочая программа курса “методы программирования ”
- •Литература
- •2. Разветвляющиеся алгоритмы.
- •Циклические алгоритмы
- •Одномерные массивы (векторы)
- •Функции с одним результатом
- •Функции типа void.
- •7. Введение в объектно-ориентированное программирование
- •8. Простые типы данных
- •9. Матрицы (двухмерные массивы)
- •Сборник задач по программированию
- •Учебно-методическое пособие для студентов специальностей g 31 03 01 “Математика”, g 31 03 03 “Механика”
- •220050, Минск, проспект Франциска Скорины, 4.
- •220030, Минск, ул. Красноармейская, 6.
-
Функции с одним результатом
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;
}
-
Составить функцию, которая вычисляет значение бесконечной суммы ряда 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;
}
-
Задан массив точек плоскости, т. е. два одномерных массива одинаковой фиксированной размерности 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;
}
-
Составить и проверить функцию нахождения наименьшего общего кратного двух натуральных чисел.
-
Составить и проверить функцию нахождения наибольшего общего делителя двух натуральных чисел.
-
Составить и проверить функцию, которая переставляет цифры заданного целого числа N1 в обратном порядке и получает новое число N2. Например, если N1=425, то N2=524.
-
В массиве целых чисел найти количество чисел с наименьшим количеством цифр. Например, в массиве {123, 34, 56, 1000, 20, 55000, 777, 11} таких чисел 4, это 34, 56, 20, 11. Составить и использовать функцию, которая определяет количество цифр одного целого числа.
-
В целочисленном одномерном массиве все симметричные числа, т. е. числа, которые одинаково читаются слева направо и справа налево (палиндромы, перевертыши) заменить нулем. Составить и использовать логическую функцию для определения, является ли одно целое число симметричным.
-
В последовательности целых чисел (не в массиве) найти количество чисел, у которых в 16-м представлении нет букв. Составить и использовать функцию для нахождения количества букв в 16-м представлении одного целого числа.
-
В последовательности целых чисел (не в массиве) найти количество простых чисел. Составить и использовать логическую функцию для определения, является ли одно целое число простым.
-
Составить функцию для вычисления значения производной полинома n-й степени. В головной функции определить массив коэффициентов полинома и проверить функцию.
-
По заданным трем массивам одинаковой размерности a[6], b[6], c[6] и величинам x и y вычислить
.
Составить и использовать функцию для вычисления значения одного полинома n-й степени.
-
Методом Ньютона решить уравнения ex – 1 + b∙x3 = 0 для b = 1, 1.5, 2, …, 4 с точностью 1=10-6. Составить и использовать функции:
-
вычисление ex с заданной точностью 2 = 0.000001 с помощью разложения в ряд Тейлора ex=1+x+ ;
-
функцию от двух аргументов x и b для вычисления с помощью первой функции значения ex – 1 + b∙x3;
-
функцию от двух аргументов x и b для вычисления с помощью первой функции значения производной ex – 1 + 3∙b∙x2;
-
функцию, реализующую метод Ньютона:
; 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, в которой с помощью третьей функции вычисляем все значения интегралов.
-
Вычислить приближенно площади одной “арки” синусоид
f(x) = sin (k∙x) для 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().