Готовый отчёт по семинару 3 (1168200)
Текст из файла
3.Выполните свой вариант задания на матрицы (задача 2)из семинара 1 «Динамические массивы», используя файловый ввод-вывод вместо консольного (см. пример 1§3.3).
Если среднее арифметическое SA положительных элементов матрицы A (5×4) больше среднего арифметического SB положительных элементов матрицы B (4×6), найти сумму SA + SB, иначе найти разность SA – SB.
Имя | Смысл | Тип | Структура | Входные/выходные |
Функция meanInMatrix. Через имя функции возвращается среднее арифметическое | ||||
i | счетчик цикла | целый | простая переменная | |
j | счетчик цикла | целый | простая переменная | |
res | результат | целый | простая переменная | выходные |
matrix | матрица | вещественный | двумерный массив | входные |
n | количество строк | целый | простая переменная | входные |
m | количество столбцов | целый | простая переменная | входные |
Функция loadMatrixFromFile. Через имя функции возвращается загруженная матрица или NULL в случае неудачи. | ||||
tempMatrix | матрица | вещественный | двумерный массив | выходные |
file | файл | целый | дескриптор файла | |
i | счетчик цикла | целый | простая переменная | |
j | счетчик цикла | целый | простая переменная | |
k | счетчик цикла | целый | простая переменная | |
n | количество строк | целый | простая переменная | входные |
m | количество столбцов | целый | простая переменная | входные |
fileName | имя файла | целый | указатель на строку | входные |
Блок-схема функции meanInMatrix:
Блок-схема функции loadMatrixFromFile:
Текст файла 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;
}
void printMatrix(float **matrix, int n, int m) {
for (int i = 0; i < n; i++, cout << endl)
for (int j = 0; j < m; j++)
printf("%6.2f", matrix[i][j]);
}
float **loadMatrixFromFile(const char *fileName, int *n, int *m) {
FILE *file = fopen(fileName, "rt");
float **tempMatrix = NULL;
if (file) {
fscanf(file, "%d%d", n, m);
tempMatrix = new float*[*n];
for (int k = 0; k < *n; k++)
tempMatrix[k] = new float[*m];
for (int i = 0; i < *n; i++)
for (int j = 0; j < *m; j++)
fscanf(file, "%f", &tempMatrix[i][j]);
fclose(file);
}
return tempMatrix;
}
Текст файла source.cpp:
#include "stdafx.h"
#include <stdio.h>
#include <locale>
#include <math.h>
#include <iomanip>
#include <iostream>
#include <Windows.h>
#include <conio.h>
using namespace std;
float meanInMatrix(float **matrix, int n, int m);
void printMatrix(float **matrix, int n, int m);
float **loadMatrixFromFile(const char *fileName, int *n, int *m);
int main()
{
setlocale(LC_ALL, "Russian");
int an, am, bn, bm;
an = am = bn = bm = 0;
float **A = loadMatrixFromFile("A.txt", &an, &am);
float **B = loadMatrixFromFile("B.txt", &bn, &bm);
if(A)
printf("Загружена матрица А размером %d на %d.\n", an, am);
printMatrix(A, an, am);
if(B)
printf("Загружена матрица B размером %d на %d.\n", bn, bm);
printMatrix(B, bn, bm);
float sa, sb, res;
sa = meanInMatrix(A, an, am);
sb = meanInMatrix(B, bn, bm);
printf("Среднее арифметическое положительных элементов матрицы A равно %6.4f,а среднее арифметическое положительных элементов матрицы B равно %6.4f\n", sa, sb);
if (sa > sb)
res = sa + sb;
else
res = sa - sb;
printf("Результат равен %6.4f\n",res);
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;
_getch();
return 0;
}
4.Измените задачу с функциями прошлого семинара (раздел 4), используя файловый ввод-вывод вместо консольного. Измененный вариант этой задачи войдет в курсовую работу.
Блок-схема работы программы не изменилась. Изменился лишь способ ввода данных, не из консоли а из файла.
Имя | Смысл | Тип | Структура | Входные/выходные |
Функция charCountUntilDelimiter. Через имя функции возвращается результат | ||||
i | счетчик цикла | целый | простая переменная | |
found | результат | целый | простая переменная | выходные |
string | указатель на строку | целый | переменная-указатель | входные |
charToCount | символ для подсчета | целый | простая переменная | входные |
delimiter | символ, до которого считать | целый | простая переменная | входные |
Функция main | ||||
A | Последовательность А | целый | массив | |
B | Последовательность B | целый | массив | |
file | файл | целый | дескриптор файла |
Блок-схема функции charCountUntilDelimiter():
#include "stdafx.h"
#include <iostream>
#include <locale>
#include <stdio.h>
#include <conio.h>s
#define TMP_STRING_LENGTH 256
using namespace std;
int charCountUntilDelimiter(const char *string, char charToCount, char delimiter) {
int found = 0;
for (int i = 0; string[i]; i++) {
if (string[i] == charToCount)
found++;
else if (string[i] == delimiter)
break;
}
return found;
}
int main()
{
setlocale(LC_ALL, "Russian");
char *A = new char[TMP_STRING_LENGTH];
char *B = new char[TMP_STRING_LENGTH];
FILE *file = fopen("strings.txt", "rt");
if (!file)
return -1;
fgets(A, TMP_STRING_LENGTH, file);
printf("Читаем из файла строку A\n");
printf("В последовательности A символ : встречается до первой точки %d раз\n", charCountUntilDelimiter(A, ':', '.'));
fgets(B, TMP_STRING_LENGTH, file);
printf("Читаем из файла строку B\n");
printf("В последовательности B символ ; встречается до первой запятой %d раз\n", charCountUntilDelimiter(B, ';', ','));
fclose(file);
_getch();
return 0;
}
5.Выполните свой вариант задания (с Вашим номером по списку группы) из раздела 2. Разработайте и отладьте два варианта программы: a. каждая строка входного файла считывается в переменную-строку (см. пример 2§3.3); b. каждая строка текстового файла считывается в переменную-структуру (см. пример 3§3.3).Вывод результатов должен осуществляться в текстовый файл.
Имя | Смысл | Тип | Структура | Входные/выходные |
file | файл | целый | дескриптор файла | |
tmpString | строка | целый | указатель на строку | |
record | запись | структура | структура, только вариант b |
Вариант a:
#include "stdafx.h"
#include <iostream>
#include <locale>
#include <conio.h>
#define TMP_STRING_LENGTH 256
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
FILE *file = fopen("list.txt", "rt");
if (!file) {
puts("Файл не существует");
} else {
char tmpString[TMP_STRING_LENGTH];
while (!feof(file)) {
fgets(tmpString, TMP_STRING_LENGTH, file);
if (strstr(tmpString, "Инженер"))
printf("%s", tmpString);
}
}
fclose(file);
_getch();
return 0;
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.