zadachi
.pdfif (n2!=1) cout<<", sum before the first 0 = "<<s;
|
} |
cout<<endl; |
|
getch(); |
return 0; |
}
3. Сформировать целочисленный массив с помощью датчика случайных чисел. Построить массив положительных и массив отрицательных чисел и вывести их.
int main() |
|
|
|
{ const int n = 10; |
int a[n], b[n], |
d[n]; |
|
clrscr(); |
cout<<"Array : |
"; |
randomize(); |
for (int i=0; i<n; i++) |
|
|
|
{ a[i]=random(100)-50; |
printf ("%5d",a[i]);; |
}
int nd=0, nb=0;
for (int i=0; i<n; i++) if (a[i]<0) d[nd++] = a[i]; else if (a[i]>0)
b[nb++] = a[i]; cout<<"\nPositive array: "; for (int i=0; i<nb; i++)
printf ("%5d",b[i]); cout<<"\nNegative array: "; for (int i=0; i<nd; i++)
printf ("%5d",d[i]); getch(); return 0;
}
4. Определить целочисленный массив при объявлении. Найти количество положительных, отрицательных и нулевых чисел и вывести их разным цветом.
int main() |
|
|
|
|
{ const int n=10, c1=2, c2=WHITE; |
|
|||
int a[n]={1, 0,-3,22, -33,-4,0 ,0, -22}; |
|
|||
int i; |
clrscr(); int k=0, k2=0; |
|
||
for(i=0;i<n;i++) |
|
|
||
{ if (a[i]>0) |
|
|
|
|
{ |
textcolor(c1); k++; } |
|
|
|
else |
if (a[i]<0) |
|
|
|
|
{ |
textcolor(c2); |
k2++; } |
|
|
else textcolor (3); |
|
|
|
cprintf("%d |
", a[i] );} |
|
|
|
textcolor(c2); |
cprintf ("\r\n Number of negative %d ",k2); |
|||
textcolor(c1); |
cprintf ("\r\n Number of positive %d",k); |
|||
textcolor(3); |
cprintf ("\r\n Number of 0 |
%d",n-k-k2); |
||
getch(); |
return 0; |
} |
|
13
5. Массив преобразовать следующим образом: все числа из отрезка [0,1] увеличить в 10 раз, отрицательные уменьшить в (–2) раза, остальные уменьшить в 10 раз. Преобразованный массив оставить на том же месте.
for (i=0; i<n; i++)
{ if(a[i]>=0 && a[i]<=1) a[i] = a[i]*10;
else if (a[i]<0) a[i]=a[i] / (–2); else a[i] = a[i]/10;
}
6.Определить, есть ли нуль в массиве. Если есть, получить индекс первого нуля. В противном случае вывести “нет нулей”. Привести несколько вариантов алгоритма, отличных от задачи 2.
7.Пусть a – массив фиксированной размерности n ( например,
n=10). Проанализировать и сравнить приведенные ниже варианты:
a) |
for (int i=0; i<n; i++) |
б) |
for (int i=0; i<n; i++) |
||
|
if (a[i]>0) |
k++; |
|
if a[i]>0) { k++; cout<<k<<” “; |
|
|
cout<<k<<” “; |
|
} |
|
|
в) |
for (int i=0; i<n; i++) |
г) |
for (int i=0; i<n; i++) |
||
|
{ if (a[i]>0) |
k++; |
|
if (a[i]>0) |
k++; |
|
cout<<k<<” “; |
|
else cout<<k<<” “; |
||
|
} |
|
|
|
|
8.В числовом массиве найти среднеарифметическое значение среди положительных чисел.
9.В числовом массиве найти наибольшее отрицательное число и его номер и наименьшее положительное число и его номер. Определить все номера, если таких чисел несколько.
10.В целочисленном массиве найти первое и второе наименьшие числа и количество их повторений. Например, в массиве {11, 2, 99, –10, 10 , –5, –5, 6, –10, –5} первое наименьшее –10 повторяется 2 раза, второе наименьшее –5 повторяется 3 раза. Предусмотреть случай, когда все числа одинаковы и второго наименьшего числа нет.
11.В целочисленном массиве найти количество четных чисел, расположенных между первым и последним нулевыми числами этого массива. Предусмотреть случаи, когда нет нулей, нуль единственный, нет четных чисел между первым и последним нулевыми числами, и вывести соответствующий текст.
12.Известно, что в массиве есть только числа 0, 1, 2 в любом количестве и порядке следования. Преобразовать массив следующим образом: в начало поместить единицы столько раз, сколько их в исходном массиве, затем двойки и, наконец, нули. Например, для массива {2, 1, 1,
14
2, 0, 2, 0, 1, 1, 2} получим {1, 1, 1, 1, 2, 2, 2, 2, 0, 0}. Дополнительный массив не формировать.
13.Преобразовать целочисленный массив следующим образом: числа, кратные 5, но не кратные 10, уменьшить в 5 раз; числа, кратные 10, уменьшить в 10 раз; остальные увеличить в 10 раз. Дополнительный массив не формировать.
14.Задан массив оценок по новой 10-балльной системе, например, оценки одного студента, полученные на восьми экзаменах.
а) Получить 5, если студент отличник, и 0 в противном случае. б) Получить 2, если студент двоечник, и 0 в противном случае. в) Если нет 1 или 2, найти средний балл.
г) Получить 5, 4, 3 или 2 в зависимости от того, является ли студент отличником, хорошистом, троечником или двоечником.
д) Преобразовать оценки из 10-балльной системы в 5-балльную.
15.Решить аналогичные задачи (см. 14,a – 14,д), если задан массив оценок по 5-балльной системе.
16.Все элементы массива, не равные нулю, переписать в начало
массива, сохраняя их порядок, а нулевые элементы в конец массива. Новый массив не формировать.
17.В целочисленном массиве найти длину самой длинной последовательности одинаковых, подряд идущих чисел и это повторяющееся число. Например, в массиве {5, 2, 5, 5, 5, 2, 2, 2, 7, 7, 7, 7, 2, 0, 5, 7, 8} са-
мая длинная последовательность состоит из четырех семерок.
18.Даны два упорядоченных числовых массива размерности n и m. Получить из них новый упорядоченный массив размерности n+m, не используя алгоритма сортировки.
19.Рассортировать одномерный целочисленный массив по возрастанию последней цифры числа.
20.Даны точки плоскости своими координатами в виде двух массивов x[n] и y[n], где (xi, yi ) – координаты i-й точки.
а) Найти количество точек в каждой из четвертей.
б) Сколько точек находится внутри кольца, ограниченного окружностями, радиус которых r и R (r < R)?
в) Найти точку (одну, любую), расстояние от которой до заданной точки наименьшее.
г) Найти все точки, расстояние от которых до заданной точки наименьшее.
д) Найти две любые точки с наименьшим расстоянием между ними. е) Точки плоскости рассортировать по возрастанию расстояния от
начала координат.
15
5. ФУНКЦИИ С ОДНИМ РЕЗУЛЬТАТОМ
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";
16
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; |
||||||
} |
|
|
|
|
|
|
|
3. Составить функцию, которая вычисляет значение бесконечной |
|||||||
суммы ряда |
y = 1– |
x2 |
|
x4 |
|
x6 |
c точностью . В головной про- |
|
|
|
|||||
|
1 2 |
|
1 2 3 4 6! |
|
грамме вычислить значения этой функции для 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;
}
17
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;
}
5. Задан массив точек плоскости, т. е. два одномерных массива одинаковой фиксированной размерности 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;
}
18
6.Составить и проверить функцию нахождения наименьшего общего кратного двух натуральных чисел.
7.Составить и проверить функцию нахождения наибольшего общего делителя двух натуральных чисел.
8.Составить и проверить функцию, которая переставляет цифры заданного целого числа N1 в обратном порядке и получает новое число N2. Например, если N1=425, то N2=524.
9.В массиве целых чисел найти количество чисел с наименьшим ко-
личеством цифр. Например, в массиве {123, 34, 56, 1000, 20, 55000, 777, 11} таких чисел 4, это 34, 56, 20, 11. Составить и использовать функцию, которая определяет количество цифр одного целого числа.
10.В целочисленном одномерном массиве все симметричные числа, т. е. числа, которые одинаково читаются слева направо и справа налево (палиндромы, перевертыши) заменить нулем. Составить и использовать логическую функцию для определения, является ли одно целое число симметричным.
11.В последовательности целых чисел (не в массиве) найти количество чисел, у которых в 16-м представлении нет букв. Составить и использовать функцию для нахождения количества букв в 16-м представлении одного целого числа.
12.В последовательности целых чисел (не в массиве) найти количество простых чисел. Составить и использовать логическую функцию для определения, является ли одно целое число простым.
13.Составить функцию для вычисления значения производной полинома n-й степени. В головной функции определить массив коэффициентов полинома и проверить функцию.
14.По заданным трем массивам одинаковой размерности a[6], b[6], c[6] и величинам x и y вычислить
r (a0 x5 a1 x4 a4 x a5 )2 (b0 y5 b1 y4 b4 y b5 ) . c0 (x y)5 c1 (x y)4 c4 (x y) c5
Составить и использовать функцию для вычисления значения одного полинома n-й степени.
15.Методом Ньютона решить уравнения ex – 1 + b∙x3 = 0 для b = 1, 1.5, 2, …, 4 с точностью 1=10-6. Составить и использовать функции:
вычисление ex с заданной точностью 2 = 0.000001 с помощью разложения в ряд Тейлора ex=1+x+ x2 x3 ;
23!
функцию от двух аргументов x и b для вычисления с помощью первой функции значения ex – 1 + b∙x3;
19
функцию от двух аргументов x и b для вычисления с помощью первой функции значения производной ex – 1 + 3∙b∙x2;
функцию, реализующую метод Ньютона:
x |
|
1; x |
|
x |
|
|
f (xn 1) |
; n=1, 2, 3, … Вычисления продолжают- |
||||
|
|
|
|
|||||||||
|
0 |
|
n |
|
n 1 |
|
f (xn 1) |
|
1 . Массив x не |
|||
ся до тех пор, |
|
пока не выполнится условие |
|
xn xn 1 |
|
|||||||
|
|
|
формируется, достаточно двух переменных для старого и нового значений x. Используются вторая и третья функции;
функцию main, в которой с помощью четвертой функции в цикле c параметром b решаем уравнения для указанных значений b.
2 |
x |
2 |
c |
2 |
dx для с = 1, 1.2, 1.4, |
16. Вычислить значения интегралов |
|
|
|||
|
|
x |
|
||
1 |
|
|
|
|
…, 2.8, 3 по формуле трапеций. Составить и использовать функции:
вычисление y = |
t . При этом используем следующий итерацион- |
||||||||||
ный алгоритм: y |
|
t; y |
|
y |
|
|
1 |
( |
t |
y |
), где n 1, 2, 3, … . Вычисления |
|
|
|
|
yn |
|||||||
|
0 |
|
n 1 |
|
n |
2 |
|
n |
|
продолжаются до тех пор, пока не выполнится условие |
yn 1 yn |
. Мас- |
сив y не формируется, достаточно двух переменных для старого и нового значений y;
вычисление интеграла для одного значения c по формуле трапеций
b |
f (a) |
|
f (b) |
|
|
I = f (x)dx h ( |
f (a h) f (a 2 h) f (a (n 1)) |
), |
|||
2 |
2 |
||||
a |
|
|
|||
|
|
|
|
где n задано и определяет количество отрезков, h=b a . При этом ис- n
пользуется первая функция;
функцию main, в которой с помощью третьей функции вычисляем все значения интегралов.
16. Вычислить приближенно площади одной “арки” синусоид f(x) = sin (k∙x) для k = 1/4, 1/2, 1, 2, 4, используя формулу
b |
|
3 |
h f |
0 fn 3( f1 f2 f |
4 fn 2 fn 1) 2( f3 f6 ) , |
||
|
f (x)dx |
||||||
|
|||||||
a |
8 |
|
|
|
|
||
|
|
|
|
|
|
||
где fi |
f (a ih), n кратно трем, a = 0, |
b = /k. Значение y=sin(t) вычис- |
лять |
в |
функции, используя разложение в ряд Тейлора |
||||
y t |
t3 |
|
t5 |
|
t7 |
, с заданной точностью . |
|
|
|
||||
3! |
5! |
7! |
|
18, 19. Среди заданных координатами вершин треугольников на плоскости найти треугольник с наименьшим периметром (площадью).
20
Составить и использовать следующие функции: вычисление длины отрезка по координатам двух вершин; вычисление периметра (площади) одного треугольника; головную функцию, в которой находим координаты требуемого треугольника.
20, 21. Среди заданных координатами вершин многоугольников на плоскости найти многоугольник с наименьшим периметром (площадью).
22.Даны массивы a[5], b[5], c[5]. Вычислить
f |
min(b0 , ,b4 ) min(c0 , ,c4 ),еслиmin(a0 , ,a4 ) 0, |
|
|
(1 min(c0 , ,c4 ))2 -- впротивном случае. |
|
|
|
23. Даны два массива x[10] и y[10]. Построить третий массив z[10]:
min(xi ,yi ) max(xi ,yi ,xi |
yi ),если |
xi |
yi |
1, |
|||||
zi |
,yi |
) min(xi ,yi ,xi |
yi ),если |
|
xi |
yi |
|
1. |
|
|
|
||||||||
max(xi |
|
|
Составить и использовать следующие функции: вычисление наименьшего из двух чисел r = min(u, v); вычисление r = max(u, v); построение массива; функцию main().
6.ФУНКЦИИ ТИПА VOID.
1.Для каждой пары введенных целых чисел найти их сумму и произведение двумя способами: с помощью одной функции типа void, которая возвращает и сумму, и произведение двух чисел; с помощью двух функций с одним результатом типа int, одна из которых возвращает сумму, а вторая – произведение двух целых чисел.
void |
SumMult (int, int, int &, int &); |
|
int |
MySum |
(int, int ); |
int |
MyMult |
(int, int ); |
int |
main() |
|
{ int a, b, r1, r2; cout<<endl<<" 0 0 -- exit"<<endl; cin>>a>>b; while(a!=0 || b!=0 )
{SumMult(a,b,r1,r2) ; cout<<a<<" + "<<b<<" = "<<r1<<endl; cout << a << " * " << b << " = " << r2 << endl;
cout << a << " + " << b << " = " << MySum (a,b) << endl; cout << a << " * " << b << " = " << MyMult(a,b) << endl; cin >> a >> b;
}return 0; }
void SumMult ( int x, int y, int &s, int &p)
{ s=x+y; |
p=x*y; } |
|
int MySum (int x, int y) |
||
{ |
return x+y; |
} |
int MyMult (int x, int y) |
||
{ |
return x*y; |
} |
21
2. Составить и использовать следующие функции: функцию типа int для нахождения наибольшего из двух чисел с помощью оператора if; функцию типа int для нахождения наибольшего из двух чисел с помощью тернарной операции; функцию типа void для нахождения наибольшего из двух чисел с помощью тернарной операции.
int maxfun1 (int, int); int maxfun2 (int, int);
void maxfun3 (int , int , int &r); int main()
{ long int a, b;
cout<<endl<<"Введите два числа; 0, 0 – выход : "<<endl; cin>>a>>b; while(a!=0 || b!=0 )
{ if (a==b)
cout<<endl<<a<<" is equal "<<b<<endl;
else { cout<<"max of "<<a<<" and "<<b<<"= "<<maxfun1(a,b)<<" "
|
<<maxfun2(a,b); |
|
int mymax; |
|
maxfun3(a,b,mymax); |
cout<<" "<<mymax<<endl; |
|
|
} |
|
|
} |
cin>>a>>b; |
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
int |
maxfun1(int x,int y) |
// первый вариант |
|
{ if (x>y) return x; |
|
|
|
} |
else return y; |
|
|
|
|
|
|
int |
maxfun2(int x,int y) |
// второй вариант |
|
{ |
return x>y?x:y; |
|
|
} |
|
|
|
void maxfun3(int x,int y,int &r) |
//третий вариант |
||
{ r=x>y?x:y; |
|
|
|
} |
|
|
|
3. Составить и использовать функции ввода, вывода и сортировки одномерного массива.
void inp1(int ,int []); |
|
|
void out1(int ,int []); |
|
|
void sort(int ,int []); |
|
|
int main() |
|
|
{ clrscr(); |
const n=5; |
int a[n]; |
inp1(n,a); |
cout<<"Array is not sorted "; |
out1(n,a); |
sort(n,a); |
cout<<"\n Sorted array "; |
out1(n,a); |
getch(); |
return 0; |
|
} |
|
|
22