Данный материал представляет собой подборку из 11 практических заданий по программированию на языке C/C++. В сборник включены алгоритмы вычисления таблиц функций, работа с одномерными и двумерными массивами, поиск экстремальных значений, а также задачи на обработку структур данных и чтение информации из файлов. Каждое задание сопровождается полным исходным кодом, комментариями и примерами реализации логики обработки данных.
Содержание
- Задание №1: Вычисление таблицы значений функции
- Задание №2: Накопление сумм и произведений
- Задание №3: Вычисление таблицы значений функции с выбором формулы
- Задание №4: Обработка одномерных массивов
- Задание №5: Алгоритмы с ветвлением в теле цикла
- Задание №6: Нахождение экстремальных элементов
- Задание №7: Обработка матриц
Задание №1: Вычисление таблицы значений функции

#include <windows.h>
#include <stdio.h>
#include <math.h>
const char info[] =
" Задание №1n"
"n"
"1.2 Вычисление таблицы значений функции одного аргументаn"
"n"
" Составить алгоритм и программу вычисления таблицы значенийn"
"функции f(x) из задачи 1.1 для N значений аргумента X, равномерноn"
"распределенных на отрезке [A, B]. Для проверки программы задатьn"
"N=10; A=0.55; B=1.n"
"n"
" 3n"
" x x 3 3 4n"
"---- - e ln|1.37 + x | + ---n"
" __ 3n"
"/3n"
"n";
int main()
{
const double A = 0.55, B = 1.0, e = 0.00001;
const int N = 10;
const double CONST_3 = sqrt(3);
const double CONST_1_37 = pow(1.37, 3.0);
const double CONST_4_3 = 4.0 / 3.0;
double x, y, x3;
const double step = (B - A) / (N - 1);
int i;
SetConsoleOutputCP(1251);
printf(info);
printf(" № X Yn-----------------n");
for (i = 0, x = A; x <= B + e; x += step)
{
x3 = x * x * x;
y = x3 / CONST_3 - exp(x) * log(fabs(CONST_1_37 + x3)) + CONST_4_3;
printf("%2d %.2lf %.6lfn", ++i, x, y);
}
printf("n");
system("pause");
return 0;
}
Задание №2: Накопление сумм и произведений

#include <windows.h>
#include <stdio.h>
#include <math.h>
const char info[] =
" Задание №2n"
"n"
"1.3.2 Накопление сумм и произведенийn"
"n"
" Составить циклический алгоритм и программу для вычисленияn"
"результата по формуле. Для проверки программы задать X=0.5; n=20.n"
"n"
" n ____n"
" +---+ k-1 / k+xn"
" | | ln(x + / e )n"
"tg sin(x) + | | -------------------n"
" | | 0.5k + |x|n"
" k = 1n";
int main()
{
const double X = 0.5;
const int n = 10;
double v, prod = 1.0, Xk_1 = 1.0, modX = fabs(X);
int k;
SetConsoleOutputCP(1251);
printf(info);
v = tan(sin(X));
for (k = 1; k <= n; ++k)
{
prod *= log(Xk_1 + sqrt(exp(k + X))) / (0.5 * k + modX);
Xk_1 *= X;
}
printf("Значение выражения равно %lfnn", v + prod);
system("pause");
return 0;
}
Задание №3: Вычисление таблицы значений функции с выбором формулы

#include <windows.h>
#include <stdio.h>
#include <math.h>
const char info[] =
" Задание №3n"
"n"
"1.6 Вычисление таблицы значений функции одногоn"
" аргумента с выбором формулыn"
"n"
" Составить программу вычисления N значений функции Y для X,n"
"изменяющегося от X1 с шагом dX. Для проверки правильностиn"
"программы задать для A, X1 и dX из второй таблицы:n"
"A = -7.17, dX = 0.5, X1 = -3.0, N = 13n"
"n"
" _____________________________________n"
" / / ___________________n"
" | / / 4 2 2 2 2n"
" | - / / 16A + 4A (x + A) - (x + A) - A , при x < 0n"
" |n"
"Y = < _____________
" | / 2 2n"
" | / A - (x + A) - 2A, при x >= 0n"
" |n"
"
";
int main()
{
const double A = -7.17, dX = 0.5, X1 = -3.0;
const int N = 13;
double x, y, A2 = A * A, A4 = A2 * A2, xA2;
int i;
SetConsoleOutputCP(1251);
printf(info);
printf(" Таблица функцииn № X Yn------------------n");
for (i = 0, x = X1; i < N; x += dX)
{
xA2 = x + A; xA2 *= xA2;
if (x < 0) y = sqrt(sqrt(16 * A4 + 4 * A2 * xA2) - xA2 - A2);
else y = sqrt(A2 - xA2) - 2 * A;
printf("%2d %5.2lf %9.6lfn", ++i, x, y);
}
printf("n");
system("pause");
return 0;
}
Задание №4: Обработка одномерных массивов

#include <windows.h>
#include <stdio.h>
#include <math.h>
const char info[] =
" Задание №4n"
"n"
"1.4.1 Алгоритм с единственным цикломn"
"n"
" Разработать алгоритм и программу с единственным циклом дляn"
"обработки одномерных массивов.n"
"n"
" Сформировать одномерный массив Y из элементов одномерногоn"
"массива X путем деления каждого элемента массива X на свой индекс.n";
int main()
{
double X[] = { -3.14, 13, 156, -56.8, 67 };
const unsigned N = sizeof(X) / sizeof(X[0]);
double Y[N];
int i;
SetConsoleOutputCP(1251);
printf(info);
printf(" № X Yn----------------n");
for (i = 0; i < N; ++i)
{
Y[i] = X[i] / (i + 1);
printf("%2d %6.2lf %6.2lfn", i + 1, X[i], Y[i]);
}
printf("n");
system("pause");
return 0;
}
Задание №5: Алгоритмы с ветвлением в теле цикла

#include <windows.h>
#include <stdio.h>
const char info[] =
" Задание №5n"
"n"
"1.4.2 Алгоритмы с ветвлением в теле циклаn"
"n"
" Разработать алгоритм и программу обработки одномерных массивов,n"
"используя единственный цикл.n"
"n"
" При заданных XT, YT, абсциссах X1, X2, ..., Xn и ординатахn"
"Y1, Y2, ..., Yn n точек плоскости XOY определить, в каком числеn"
"случаев расстояние между одной из таких точек и точкой с координатамиn"
"XT, YT превышает заданную величину B, и найти средние координаты дляn"
"заданной совокупности точек, исключая точку (XT,YT).n";
int main()
{
double X[] = { -3.14, 13, 156, -56.8, 67 };
double Y[] = { 10.14, 0, -90, -13.8, 167 };
const unsigned N = sizeof(X) / sizeof(X[0]);
double XT = 17.8, YT = -13, B = 120.8, distance, B2 = B * B, sumX = 0.0, sumY = 0.0, x, y;
unsigned cnt, i;
SetConsoleOutputCP(1251);
printf(info);
printf("XT = %lf, YT = %lf, B = %lfnn", XT, YT, B);
printf(" № X Yn----------------n");
for (i = cnt = 0; i < N; ++i)
{
x = X[i] - XT; y = Y[i] - YT;
distance = x * x + y * y;
if (distance > B2) ++cnt;
sumX += X[i]; sumY += Y[i];
printf("%2d %6.2lf %6.2lfn", i + 1, X[i], Y[i]);
}
printf("nСредние координаты исходных точек: X = %lf, Y = %lfn", sumX / N, sumY / N);
if (cnt == 0) printf("Нет ни одной точки, расстояние от которой до заданной, превышает заданную величину Bnn");
else printf("Число найденных точек равно %unn", cnt);
system("pause");
return 0;
}
Задание №6: Нахождение экстремальных элементов

#include <windows.h>
#include <stdio.h>
const char info[] =
" Задание №6n"
"n"
"1.4.3 Нахождение экстремальных элементов в одномерных массивахn"
"n"
" Составить программу нахождения экстремального элемента или егоn"
"порядкового номера при заданном одномерном массиве A из n элементовn"
"(или массивах A и C по n элементов в каждом).n"
"n"
" Определить наибольшее из отношенийn"
"n"
" m mn"
" ____ ____n"
" | |n"
" | |n"
" / Ai / | |Ain"
" / | |n"
" ----n"
" i=1 i=1n";
int main()
{
double A[] = { -3.14, 13, 156, -56.8, 67 };
const unsigned N = sizeof(A) / sizeof(A[0]);
double sum = 0.0, prod = 1.0, sum_prod, max = 0.0, v;
unsigned i;
bool zero = false;
SetConsoleOutputCP(1251);
printf(info);
printf(" № A Сумма Произведениеn------------------------------n");
for (i = 0; i < N; ++i)
{
v = A[i]; sum += v; prod *= v;
if (prod == 0.0) zero = true;
else {
sum_prod = sum / prod;
if (i == 0 || max < sum_prod) max = sum_prod;
}
printf("%2d %6.2lf %6.2lf %11.2lfn", i + 1, v, sum, prod);
}
if (zero) printf("nЭкстремум нельзя определить из-за деления на нольnn");
else printf("nМаксимальное соотношение равно %lfnn", max);
system("pause");
return 0;
}
Задание №7: Обработка матриц

#define _USE_MATH_DEFINES
#include <windows.h>
#include <stdio.h>
#include <cmath>
const char info[] =
" Задание №7n"
"n"
"2.5.1 Обработка матриц с небольшим количеством строк или столбцовn"
"n"
" Составить алгоритм и программу для решения задачи с использованиемn"
"одномерных и двумерных (матриц) массивов.n"
"n"
" Дана матрица из 3 строк и 6 столбцов. Элементы каждого столбцаn"
"представляют длины трех сопряженных ребер одного из 6 прямоугольныхn"
"параллелепипедов. Отпечатать номер каждого столбца, которым заданn"
"параллелепипед большего объема, чем объем шара с заданным радиусомn"
"R V = 4/3 * Pi * R^3, и число таких столбцов.n";
int main()
{
double M[][6] = { { 1, 2, 3, 4, 5, 6}, {14, 15, 1, 17, 8, 9}, {18, 4, 9, 10, 5, 1} };
double R = 2.7, V = (4 * M_PI * R * R * R) / 3, VP, x, y, z;
unsigned num[6], cnt = 0, i;
SetConsoleOutputCP(1251);
printf(info);
printf("Радиус шара R = %lf, объем шара = %lfnn", R, V);
printf("Информация о параллелепипедах (X,Y,Z - размеры, V - объем)nn № X Y Z Vn-------------------------------n");
for (i = 0; i < 6; ++i)
{
x = M[0][i]; y = M[1][i]; z = M[2][i];
VP = x * y * z;
if (VP > V) num[cnt++] = i + 1;
printf("%2d %6.2lf %6.2lf %6.2lf %7.2lfn", i + 1, x, y, z, VP);
}
if (cnt == 0) printf("nНет параллелериредов с объемом, который больше объема заданного шараnn");
else {
printf("nНомера найденных столбцов:");
for (i = 0; i < cnt; ++i) printf(" %u", num[i]);
printf("nn");
}
system("pause");
return 0;
}
