Лабы / Отчет Лаба 13
.docx
13.1
Схема алгоритма
#include <stdio.h>
#include <locale.h>
#include "geo.h"
#define SIZE_A 6
#define SIZE_B 8
#define SIZE_C 7
int main() {
setlocale(LC_ALL, "RUS");
double A[SIZE_A] = { 1.0, -2.0, 3.0, 4.0, -5.0, 6.0 };
double B[SIZE_B] = { 0.5, 2.5, -1.0, 8.0, 3.0, -3.0, 9.0, 4.0 };
double C[SIZE_C] = { -1.0, -2.0, -3.0, -4.0, -5.0, 10.0, 12.0 };
double mA = geo(A, SIZE_A);
double mB = geo(B, SIZE_B);
double mC = geo(C, SIZE_C);
if (mA >= 0)
printf("Среднее геометрическое положительных элементов массива A:%.2f", mA);
else
printf("В массиве A нет положительных элементов\n");
if (mB >= 0)
printf("Среднее геометрическое положительных элементов массива B:%.2f",mB);
else
printf("В массиве B нет положительных элементов\n");
if (mC >= 0)
printf("Среднее геометрическое положительных элементов массива C:%.2f",mC);
else
printf("В массиве C нет положительных элементов\n");
return 0; }
#include <math.h>
#include "geo.h"
double geo(double a[], int size) {
double pr = 1.0;
int c = 0;
for (int i = 0; i < size; i++) {
if (a[i] > 0) {
pr *= a[i];
c++;}}
if (c > 0) {
return pow(pr, 1.0 / c);
}
else {
return -1; }}
13.2
Схема алгоритма
#include <locale.h>
#include <stdio.h>
#include "logic.h"
int main() {
setlocale(LC_ALL, "RUS");
int A[6] = { 3, -1, 2, -4, 5, -6 };
int B[8] = { -7, 4, 6, -2, -1, 3, 2, -8 };
int A_pos[6], A_neg[6], B_pos[8], B_neg[8];
int A_pos_c, A_neg_c, B_pos_c, B_neg_c;
split(A, 6, A_pos, &A_pos_c, A_neg, &A_neg_c);
split(B, 8, B_pos, &B_pos_c, B_neg, &B_neg_c);
int s1, p1, s2, p2;
sp(A_pos, A_pos_c, &s1, &p1);
sp(B_pos, B_pos_c, &s2, &p2);
printf("Массив A положительные элементы: ");
for (int i = 0; i < A_pos_c; i++) {
printf("%d ", A_pos[i]); }
printf("\nСумма A: %d Произведение A: %d\n", s1, p1);
printf("\nМассив B положительные элементы: ");
for (int i = 0; i < B_pos_c; i++) {
printf("%d ", B_pos[i]); }
printf("\nСумма B: %d Произведение B: %d\n", s2, p2);
printf("\nМассив A отрицательные элементы: ");
for (int i = 0; i < A_neg_c; i++) {
printf("%d ", A_neg[i]); }
printf("\nМассив B отрицательные элементы: ");
for (int i = 0; i < B_neg_c; i++) {
printf("%d ", B_neg[i]); }
return 0; }
#include "logic.h"
void sp(int* a, int size, int* s, int* p) {
*s = 0;
*p = 1;
for (int i = 0; i < size; i++) {
*s += a[i];
*p *= a[i];
}
}
void split(int* pn, int size, int* pos, int* pos_c, int* neg, int* neg_c) {
*pos_c = 0;
*neg_c = 0;
for (int i = 0; i < size; i++) {
if (pn[i] > 0)
pos[(*pos_c)++] = pn[i];
else
neg[(*neg_c)++] = pn[i];
}
}
13.3
#include <stdio.h>
#include "matrixutils.h"
#include <locale.h>
int main() {
setlocale(LC_ALL, "RUS");
printf(" Матрица №1:\n");
for (int i = 0; i < S; i++) {
for (int j = 0; j < S; j++) {
printf("%4d", m1[i][j]); }}
print_md(m1);
printf("Сумма элементов на главной диагонале: %d\n", sum_md(m1));
print_sd(m1);
printf("Сумма элементов на побочной диагонале: %d\n\n", sum_sd(m1));
printf(" Матрица №2:\n");
for (int i = 0; i < S; i++) {
for (int j = 0; j < S; j++) {
printf("%4d", m2[i][j]); }}
print_md(m2);
printf("Сумма элементов на главной диагонале: %d\n", sum_md(m2));
print_sd(m2);
printf("Сумма элементов на побочной диагонале: %d\n", sum_sd(m2));
return 0;}
// matrix_utils.c
#include <stdio.h>
#include "matrixutils.h"
int m1[S][S] = {
{ 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, 36}
};
int m2[S][S] = {
{ 6, 5, 4, 3, 2, 1},
{12, 11, 10, 9, 8, 7},
{18, 17, 16, 15, 14, 13},
{24, 23, 22, 21, 20, 19},
{30, 29, 28, 27, 26, 25},
{36, 35, 34, 33, 32, 31}
};
void print_md(int m[S][S]) {
printf("Главная диагональ: ");
for (int i = 0; i < S; i++) {
printf("%d ", m[i][i]);
}
printf("\n");
}
void print_sd(int m[S][S]) {
printf("Побочная диагональ: ");
for (int i = 0; i < S; i++) {
printf("%d ", m[i][S - 1 - i]);
}
printf("\n");
}
int sum_md(int m[S][S]) {
int s = 0;
for (int i = 0; i < S; i++) {
s += m[i][i];
}
return s;
}
int sum_sd(int m[S][S]) {
int s = 0;
for (int i = 0; i < S; i++) {
s += m[i][S - 1 - i];
}
return s;
}
