Файл: Программа с локальными массивами #include float average positive elements(int X, int size) int count 0.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 26.10.2023
Просмотров: 12
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Вариант 15 Дабаев Д.С.
Проектирование алгоритма обработки одномерных массивов
Найти среднее арифметическое положительных элементов вектора X,
имеющих четный номер, и среднее арифметическое отрицательных
элементов вектора Y, имеющих нечетный номер.
Анализ данных:
Блок-схема:
Программа с локальными массивами:
#include
float average_positive_elements(int X[], int size) {
int count = 0;
int sum = 0;
for (int i = 1; i < size; i += 2) {
if (X[i] > 0) {
count++;
sum += X[i];
}
}
if (count > 0) {
return (float)sum / count;
} else {
return 0.0;
}
}
float average_negative_elements(int Y[], int size) {
int count = 0;
int sum = 0;
for (int i = 0; i < size; i += 2) {
if (Y[i] < 0) {
count++;
sum += Y[i];
}
}
if (count > 0) {
return (float)sum / count;
} else {
return 0.0;
}
}
int main() {
int n;
printf("Введите размер векторов X и Y: ");
scanf("%d", &n);
int X[n];
int Y[n];
printf("Введите элементы вектора X:\n");
for (int i = 0; i < n; i++) {
printf("X[%d] = ", i);
scanf("%d", &X[i]);
}
printf("Введите элементы вектора Y:\n");
for (int i = 0; i < n; i++) {
printf("Y[%d] = ", i);
scanf("%d", &Y[i]);
}
float avg_positive = average_positive_elements(X, n);
float avg_negative = average_negative_elements(Y, n);
printf("Среднее арифметическое положительных элементов вектора X с четными индексами: %f\n", avg_positive);
printf("Среднее арифметическое отрицательных элементов вектора Y с нечетными индексами: %f\n", avg_negative);
return 0;
}
Программа с динамическими массивами:
#include
#include
float average_positive_elements(int* X, int size) {
int count = 0;
int sum = 0;
for (int i = 1; i < size; i += 2) {
if (X[i] > 0) {
count++;
sum += X[i];
}
}
if (count > 0) {
return (float)sum / count;
} else {
return 0.0;
}
}
float average_negative_elements(int* Y, int size) {
int count = 0;
int sum = 0;
for (int i = 0; i < size; i += 2) {
if (Y[i] < 0) {
count++;
sum += Y[i];
}
}
if (count > 0) {
return (float)sum / count;
} else {
return 0.0;
}
}
int main() {
int n;
printf("Введите размер векторов X и Y: ");
scanf("%d", &n);
int* X = (int*)malloc(n * sizeof(int));
int* Y = (int*)malloc(n * sizeof(int));
printf("Введите элементы вектора X:\n");
for (int i = 0; i < n; i++) {
printf("X[%d] = ", i);
scanf("%d", &X[i]);
}
printf("Введите элементы вектора Y:\n");
for (int i = 0; i < n; i++) {
printf("Y[%d] = ", i);
scanf("%d", &Y[i]);
}
float avg_positive = average_positive_elements(X, n);
float avg_negative = average_negative_elements(Y, n);
printf("Среднее арифметическое положительных элементов вектора X с четными индексами: %f\n", avg_positive);
printf("Среднее арифметическое отрицательных элементов вектора Y с нечетными индексами: %f\n", avg_negative);
free(X);
free(Y);
return 0;
}
Проектирование алгоритма обработки матриц:
Анализ данных:
Блок-схема:
Код с локальными массивами:
#include
#define MAX_ROWS 100
#define MAX_COLS 100
int countRowsWithNegativeSum(int matrix[MAX_ROWS][MAX_COLS], int rows, int cols) {
int count = 0
for (int i = 0; i < rows; i++) {
int sum = 0;
for (int j = 0; j < cols; j++) {
sum += matrix[i][j];
}
if (sum < 0) {
count++;
}
}
return count;
}
int main() {
int matrix[MAX_ROWS][MAX_COLS];
int rows, cols;
printf("Введите количество строк матрицы: ");
scanf("%d", &rows);
printf("Введите количество столбцов матрицы: ");
scanf("%d", &cols);
printf("Введите элементы матрицы:\n");
for (int i = 0; i < rows; i++) {
printf("Строка %d: ", i + 1);
for (int j = 0; j < cols; j++) {
scanf("%d", &matrix[i][j]);
}
}
int count = countRowsWithNegativeSum(matrix, rows, cols);
printf("Число строк матрицы, сумма элементов которых меньше 0: %d\n", count);
return 0;
}
Код с динамическими массивами:
#include
#include
int countRowsWithNegativeSum(int** matrix, int rows, int cols) {
int count = 0;
for (int i = 0; i < rows; i++) {
int sum = 0;
for (int j = 0; j < cols; j++) {
sum += matrix[i][j];
}
if (sum < 0) {
count++;
}
}
return count;
}
int main() {
int **matrix;
int rows, cols;
printf("Введите количество строк матрицы: ");
scanf("%d", &rows);
printf("Введите количество столбцов матрицы: ");
scanf("%d", &cols);
// Выделение памяти для матрицы
matrix = (int **)malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
matrix[i] = (int *)malloc(cols * sizeof(int));
}
printf("Введите элементы матрицы:\n");
for (int i = 0; i < rows; i++) {
printf("Строка %d: ", i + 1);
for (int j = 0; j < cols; j++) {
scanf("%d", &matrix[i][j]);
}
}
int count = countRowsWithNegativeSum(matrix, rows, cols);
printf("Число строк матрицы, сумма элементов которых меньше 0: %d\n", count);
// Освобождение памяти
for (int i = 0; i < rows; i++) {
free(matrix[i]);
}
free(matrix);
return 0;
}
Разработка и использование функций Си (из семинара 2 курса «Программирование)»:
Проверить, есть ли в матрице A (6×5) элементы, большие 10, а в матрице
B (5×7) — элементы, большие 5
Блок-схема:
Код:
#include
#define ROWS_A 6
#define COLS_A 5
#define ROWS_B 5
#define COLS_B 7
int checkMatrixA(int matrixA[ROWS_A][COLS_A], int threshold) {
for (int i = 0; i < ROWS_A; i++) {
for (int j = 0; j < COLS_A; j++) {
if (matrixA[i][j] > threshold) {
return 1; // Есть элемент, больший заданного значения
}
}
}
return 0; // Нет элементов, больших заданного значения
}
int checkMatrixB(int matrixB[ROWS_B][COLS_B], int threshold) {
for (int i = 0; i < ROWS_B; i++) {
for (int j = 0; j < COLS_B; j++) {
if (matrixB[i][j] > threshold) {
return 1; // Есть элемент, больший заданного значения
}
}
}
return 0; // Нет элементов, больших заданного значения
}
int main() {
int matrixA[ROWS_A][COLS_A] = {
{2, 4, 6, 8, 10},
{12, 14, 16, 18, 20},
{1, 3, 5, 7, 9},
{11, 13, 15, 17, 19},
{21, 22, 23, 24, 25},
{26, 27, 28, 29, 30}
};
int matrixB[ROWS_B][COLS_B] = {
{1, 2, 3, 4, 5, 6, 7},
{8, 9, 10, 11, 12, 13, 14},
{15, 16, 17, 18, 19, 20, 21},
{22, 23, 24, 25, 26, 27, 28},
{29, 30, 31, 32, 33, 34, 35}
};
int thresholdA = 10;
int thresholdB = 5;
int resultA = checkMatrixA(matrixA, thresholdA);
int resultB = checkMatrixB(matrixB, thresholdB);
if (resultA) {
printf("В матрице A есть элементы, большие %d\n", thresholdA);
} else {
printf("В матрице A нет элементов, больших %d\n", thresholdA);
}
if (resultB) {
printf("В матрице B есть элементы, большие %d\n", thresholdB);
} else {
printf("В матрице B нет элементов, больших %d\n", thresholdB);
}
return 0;