Отчёт по семинару 1 (1168194)
Текст из файла
Шмагин Сергей Ильич, ИД-02135-18, 2 семестр, семинар 1.
Задание 1. Вспомнить задачи 2 и 3 из семинара 1 прошлого семестра, выполнить их с использованием динамических массивов.
раздел 6. Найти число n1 отрицательных элементов вектора X и их сумму C1
и число n2 положительных элементов вектора Y и их сумму C2
версия с прошлого семестра:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "RUS");
int n, m, n1, n2;
float C1, C2;
n1 = n2 = 0;
C1 = C2 = 0;
printf("Введите длину вектора X\n");
scanf_s("%d", &n);
float X[100];
for (int i = 0; i < n; i++)
scanf_s("%f", &X[i]);
printf("Введите длину вектора Y\n");
scanf_s("%d", &m);
float Y[100];
for (int i = 0; i < m; i++)
scanf_s("%f", &Y[i]);
for (int i = 0; i < n; i++)
if (X[i] < 0)
{
n1++;
C1 += X[i];
}
printf("Сумма %d отрицательных элементов вектора X равна %f\n", n1, C1);
for (int i = 0; i < m; i++)
if (Y[i] > 0)
{
n2++;
C2 += Y[i];
}
printf("Сумма %d положительных элементов вектора Y равна %f", n2, C2);
_getch();
}
версия с динамическими массивами:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "RUS");
int n, m, n1, n2;
float C1, C2;
n1 = n2 = 0;
C1 = C2 = 0;
printf("Введите длину вектора X\n");
scanf_s("%d", &n);
float *X = new float [n];
for (int i = 0; i < n; i++)
scanf_s("%f", &X[i]);
printf("Введите длину вектора Y\n");
scanf_s("%d", &m);
float *Y = new float[m];
for (int i = 0; i < m; i++)
scanf_s("%f", &Y[i]);
for (int i = 0; i < n; i++)
if (X[i] < 0)
{
n1++;
C1 += X[i];
}
printf("Сумма %d отрицательных элементов вектора X равна %f\n", n1, C1);
for (int i = 0; i < m; i++)
if (Y[i] > 0)
{
n2++;
C2 += Y[i];
}
printf("Сумма %d положительных элементов вектора Y равна %f", n2, C2);
_getch();
}
Блок-схема не изменилась.
Имя | Смысл | Тип | Структура |
n | длина вектора X | целый | простая переменная |
m | длина вектора Y | целый | простая переменная |
n1 | количество элементов | целый | простая переменная |
n2 | количество элементов | целый | простая переменная |
C1 | сумма | целый | простая переменная |
C2 | сумма | целый | простая переменная |
X | вектор | вещественный | одномерный массив |
Y | вектор | вещественный | одномерный массив |
раздел 7. Для каждого столбца матрицы вычислить среднее арифметическое
элементов, меньших первого элемента этого столбца
версия с прошлого семестра:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <locale.h>
int main()
{
int i, j, m, n;
setlocale(LC_ALL, "RUS");
printf("Введите размеры матрицы n и m\n");
scanf_s("%d%d", &n, &m);
float matrix[100][100];
float summ[100];
for (j = 0; j < m; j++)
summ[j] = 0;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
scanf_s("%f", &matrix[i][j]);
for (j = 0; j < m; j++)
for (i = 0; i < n; i++)
if (matrix[i][j] < matrix[0][j])
summ[j] += matrix[i][j];
printf("Суммы для каждого столбца:\n");
for (j = 0; j < m; j++)
printf("%.2f ", summ[j]);
_getch();
}
версия с динамическими массивами:
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <locale.h>
int main()
{
int i, j, m, n;
setlocale(LC_ALL, "RUS");
printf("Введите размеры матрицы n и m\n");
scanf_s("%d%d", &n, &m);
float **matrix = new float*[n];
float *summ = new float[n];
for (i = 0; i < n; i++)
matrix[i] = new float[m];
for (j = 0; j < m; j++)
summ[j] = 0;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
scanf_s("%f", &matrix[i][j]);
for (j = 0; j < m; j++)
for (i = 0; i < n; i++)
if (matrix[i][j] < matrix[0][j])
summ[j] += matrix[i][j];
printf("Суммы для каждого столбца:\n");
for (j = 0; j < m; j++)
printf("%.2f ", summ[j]);
_getch();
}
Имя | Смысл | Тип | Структура |
Исходные данные | |||
n | количество строк | целый | простая переменная |
m | количество столбцов | целый | простая переменная |
matrix | матрица | вещественный | двумерный массив |
summ | массив сумм по столбцам | вещественный | одномерный массив |
промежуточные данные | |||
i | счетчик цикла | целый | простая переменная |
j | счетчик цикла | целый | простая переменная |
Задание 2. Вспомнить задачу 2 из второго семинара прошлого семестра, изменить ее используя динамические массивы.
Если среднее арифметическое SA положительных элементов матрицы A (5×4)
больше среднего арифметического SB положительных элементов матрицы B (4×6),
найти сумму SA + SB, иначе найти разность SA – SB.
я оформил ввод матрицы и вычисление среднего арифметического в матрице как функции.
void matrixIn(float matrix[][4], int n, int m);
эта функция ввода матрицы. передается матрица, и ее размер. выходное значение не требуется.
float meanInMatrix(float matrix[][4], int n, int m);
эта функция находит среднее арифметическое в матрице. передается матрица, и ее размер. возвращается среднее арифметическое
файл source.cpp
#include <conio.h>
#include <locale.h>
#include <stdio.h>
void matrixIn(float matrix[][4], int n, int m);
float meanInMatrix(float matrix[][4], int n, int m);
int main()
{
setlocale(LC_ALL, "Russian");
float A[5][4];
float B[6][4];
matrixIn(A, 5, 4);
matrixIn(B, 6, 4);
float meanA = meanInMatrix(A, 5, 4);
float meanB = meanInMatrix(B, 6, 4);
float result;
if (meanA > meanB)
result = meanA + meanB;
else
result = meanA - meanB;
printf("среднее арифметическое матрицы A: %f\nсреднее арифметическое матрицы B: %f\n", meanA, meanB);
printf("результат: %f", result);
_getch();
}
файл func.cpp
#include <stdio.h>
void matrixIn(float matrix[][4], int n, int m)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
scanf_s("%f", &matrix[i][j]);
}
float meanInMatrix(float matrix[][4], int n, int m)
{
float summ = 0;
int count = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (matrix[i][j] > 0)
{
summ += matrix[i][j];
count++;
}
return summ / count;
}
Решение с использованием динамических массивов:
Файл source.cpp:
#include "stdafx.h"
#include <stdio.h>
#include <locale>
#include <math.h>
#include <iomanip>
#include <iostream>
using namespace std;
float meanInMatrix(float **matrix, int n, int m);
float **createMatrix(int n, int m, bool manualInput = false);
void printMatrix(float **matrix, int n, int m);
int main()
{
setlocale(LC_ALL, "Russian");
int an, am, bn, bm;
cout << "Введите n и m матрицы A" << endl;
cout << "n=";
cin >> an;
cout << endl << "m=";
cin >> am;
float **A = createMatrix(an, am);
cout << endl;
printMatrix(A, an, am);
cout << "Введите n и m матрицы B" << endl;
cout << "n=";
cin >> bn;
cout << endl << "m=";
cin >> bm;
float **B = createMatrix(bn, bm);
cout << endl;
printMatrix(B, bn, bm);
float sa, sb, res;
sa = meanInMatrix(A, an, am);
sb = meanInMatrix(B, bn, bm);
cout << fixed << setprecision(2) << "Среднее арифметическое положительных элементов матрицы A равно " << sa <<
", а среднее арифметическое положительных элементов матрицы B равно" << sb << endl;
if (sa > sb)
res = sa + sb;
else
res = sa - sb;
cout << fixed << setprecision(2) << "Результат равен " << res << endl;
if (A)
for (int i = 0; i < an; i++)
delete[] A[i];
delete A;
if (B)
for (int i = 0; i < bn; i++)
delete[] B[i];
delete B;
cin >> bm;
return 0;
}
Файл func.cpp:
#include "stdafx.h"
#include <stdio.h>
#include <locale>
#include <math.h>
#include <iomanip>
#include <iostream>
using namespace std;
float meanInMatrix(float **matrix, int n, int m)
{
float res = 0;
int count = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (matrix[i][j] > 0)
{
res += matrix[i][j];
count++;
}
if (count)
res = res / count;
else
res = 0;
return res;
}
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.