Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Аленский. лекции по проге.doc
Скачиваний:
19
Добавлен:
11.11.2018
Размер:
1.35 Mб
Скачать

Задачи и упражнения

  1. Вместо одной функции SINCOS (§ 2) cоставить и использовать две функции так, как было показано в § 3. Первая с именем MyCos вычисляет значение y, а вторая MySin z, то есть каждая функция имеет один результат и должна использовать оператор return. Сравните вызов функций SINCOS, MyCos и MySin.

  2. (Повторение). Изменить функцию SINCOS (§ 2) таким образом, чтобы оба результата, и y и z, вычислялись в одном цикле одновременно.

  3. (Повторение). Изменить функцию SINCOS (§ 2), заменив оператор dowhile на while.

  4. (Повторение). Изменить функцию SINCOS (§ 2), заменив оператор dowhile на for.

  5. (Повторение). В функции main (см. 2.1) вместо оператора for записать while.

  6. Для каждой пары введенных целых чисел найти их сумму и произведение двумя способами: с помощью одной функции типа 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; }

  1. Составить и использовать следующие функции: функцию типа 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;

}

8. Составить логическую функцию, которая определяет, принадлежит ли точка плоскости с координатами (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;

}

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

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. Составить и проверить функцию нахождения наименьшего общего кратного двух натуральных чисел.

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

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

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

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

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

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

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

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