Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

zadachi

.pdf
Скачиваний:
13
Добавлен:
31.05.2015
Размер:
694.99 Кб
Скачать

if (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 + bx3 = 0 для b = 1, 1.5, 2, …, 4 с точностью 1=10-6. Составить и использовать функции:

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

23!

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

19

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]