- •Н. А. Аленский основы программирования
- •§ 1. Структура простой программы. Ввод, вывод
- •1.1. Пример первой программы
- •1.2. Директива препроцессора #include
- •1.3. Структура программы
- •1.4. Комментарии
- •1.5. Ключевые слова и идентификаторы
- •1.6. Простой ввод, вывод
- •§ 2. Оператор if
- •2.1. Полная форма
- •2.2. Сокращённая форма
- •2.3. Особенности оператора
- •Задачи и упражнения
- •§ 3. Выражения
- •3.1. Константы
- •Непосредственно записать в выражении;
- •3.2. Операции и их приоритет
- •3.3. Операции отношения и логические операции
- •3.4. Особенности операции присваивания
- •3.5. Тернарная операция (?)
- •Задачи и упражнения
- •§ 4. Оператор выбора switch
- •Задачи и упражнения
- •§ 5. Операторы цикла
- •5.1. Оператор while c предусловием
- •Правила использования и особенности оператора while
- •5.2. Оператор цикла do … while c постусловием
- •5.3. Оператор for
- •5.4. Операторы continue и break
- •Задачи и упражнения
- •§ 6. Введение в одномерные массивы
- •6.1. Что такое массив. Объявление одномерного массива
- •6.2. Способы определения массивов
- •6.3. Вывод одномерного массива. Функции printf и сprintf
- •6.4. Некоторые типы простых задач при работе с массивами
- •Задачи и упражнения
- •§ 1. Функции без результатов. Передача параметров по значению
- •1.1. Примеры. Правила оформления и вызова функций
- •Void line2(int Len, y, char ch) // ошибка,
- •1.2. Формальные и фактические параметры
- •1.3. Передача параметров по значению
- •§ 2. Функции типа void с несколькими результатами
- •2.1. Пример
- •2.2. Что такое ссылочный тип
- •2.3. Возврат значений из функции с помощью ссылочного типа
- •Задачи и упражнения
- •§ 3. Функции с одним результатом. Оператор return
- •Задачи и упражнения
- •§ 4. Одномерные массивы в функциях. Сортировка массива
- •Задачи и упражнения.
- •§ 5. Область действия имён. Локальные и глобальные имена
- •§ 6. Дополнительные возможности функций
- •Встраиваемые функции (inlineфункции)
- •6.2. Параметры по умолчанию
- •6.3. Перегрузка функций
- •§ 1. Примеры
- •§ 2. Класс. Поля и методы класса
- •§ 3. Создание объектов. Конструктор
- •Задачи и упражнения.
- •Глава 4 простые типы данных § 1. Целый тип
- •1.1. Битовые операции
- •1.2. Использование битовых операций
- •1.3. Упаковка и распаковка информации
- •Задачи и упражнения.
- •§ 2. Логический тип
- •§ 3. Символьный тип
- •Глава 5 матрицы (двухмерные массивы) § 1. Объявление, способы определения
- •§ 2. Вывод матриц
- •§ 3. Типы алгоритмов на обработку матриц
- •3.1. Построчная обработка
- •3.2. Обработка матрицы по столбцам
- •3.3. Обработка всей матрицы
- •3.4. Обработка части матрицы
- •3.5. Преобразование матрицы
- •Упражнения.
- •3.6. Построение матриц
- •§ 4. Передача матрицы в качестве параметра функции
- •Задачи и упражнения.
- •Б. Обработка матрицы по столбцам.
- •Даны две матрицы a и b одинаковой размерности. Построить матрицу с, каждый элемент которой определяется по правилу:
- •Список рекомендуемой литературы
- •Сборники задач по программированию
- •Оглавление
- •Задачи и упражнения …….……………………………………...12
- •3.1. Константы ………………………………………………...…14
Задачи и упражнения
-
Вместо одной функции SINCOS (§ 2) cоставить и использовать две функции так, как было показано в § 3. Первая с именем MyCos вычисляет значение y, а вторая MySin — z, то есть каждая функция имеет один результат и должна использовать оператор return. Сравните вызов функций SINCOS, MyCos и MySin.
-
(Повторение). Изменить функцию SINCOS (§ 2) таким образом, чтобы оба результата, и y и z, вычислялись в одном цикле одновременно.
-
(Повторение). Изменить функцию SINCOS (§ 2), заменив оператор do … while на while.
-
(Повторение). Изменить функцию SINCOS (§ 2), заменив оператор do … while на for.
-
(Повторение). В функции main (см. 2.1) вместо оператора for записать while.
-
Для каждой пары введенных целых чисел найти их сумму и произведение двумя способами: с помощью одной функции типа 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; }
-
Составить и использовать следующие функции: функцию типа 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;
}
-
Составить функцию, которая вычисляет значение бесконечной суммы ряда 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;
}
-
Составить и проверить функцию нахождения наименьшего общего кратного двух натуральных чисел.
-
Составить и проверить функцию нахождения наибольшего общего делителя двух натуральных чисел.
-
Составить и проверить функцию, которая переставляет цифры заданного целого числа N1 в обратном порядке и получает новое число N2. Например, если N1=425, то N2=524.
-
В массиве целых чисел найти количество чисел с наименьшим количеством цифр. Например, в массиве {123, 34, 56, 1000, 20, 55000, 777, 11} таких чисел 4, это 34, 56, 20, 11. Составить и использовать функцию, которая определяет количество цифр одного целого числа.
-
В целочисленном одномерном массиве все симметричные числа, т. е. числа, которые одинаково читаются слева направо и справа налево (палиндромы, перевертыши), заменить нулем. Составить и использовать логическую функцию для определения, является ли одно целое число симметричным.
-
В последовательности целых чисел (не в массиве) найти количество чисел, у которых в шестнадцатеричном представлении нет букв. Составить и использовать функцию для нахождения количества букв в шестнадцатеричном представлении одного целого числа.
-
В последовательности целых чисел (не в массиве) найти количество простых чисел. Составить и использовать логическую функцию для определения, является ли одно целое число простым.
18, 19. Среди заданных координатами вершин треугольников на плоскости найти треугольник с наименьшим периметром (площадью). Составить и использовать следующие функции: вычисление длины отрезка по координатам двух вершин; вычисление периметра (площади) одного треугольника; головную функцию, в которой находим координаты требуемого треугольника.
20, 21. Найти периметр (площадь) выпуклого многоугольника, если заданы координаты его вершин в порядке обхода. Составить и использовать следующие функции: вычисление длины отрезка по координатам двух вершин; вычисление периметра (площади) одного треугольника; головную функцию, в которой находим периметр (площадь) многоугольника.