Laba11(отчёт)
.docСанкт-Петербургский Университет
телекоммуникаций имени проф. Бонч-Бруевича
ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ
Лабораторная работа №11
Работа с файлами
Студент группы СУ-01
Соловьёв Константин
Вариант № 15
2011 г.
-
Постановка задачи
Имеется текстовый файл, содержащий произвольное количество строк. Длина каждой строки не превосходит 255 символов. Необходимо выполнить заданную обработку файла.
Задание:
В файле хранится числовая матрица. В первой строке файла записаны два числа: количество строк и столбцов матрицы, а затем сама матрица. Вычислить для каждой строки сумму ее положительных элементов. Результаты вычислений должны быть записаны в конец исходного файла в виде таблицы
Main файл:
Является главным связующим звеном в выполнении поставленной задачи. Его основная цель - это предоставление пользователю желаемый выбор выполнения операций с массивами и вызов функций для решения поставленных задач.
Код main.c файла:
#include "header11.h"
int main(void) {
int row, col;
double massiv[MXROW][MXCOL];
FILE*in = fopen("maxin.txt", "r");
if (!in) {
printf("Error !!! \n");
exit(1);
}
reading_matrix_from_file(&row, &col, in, massiv);
table_matrix(&row, &col, massiv);
printf("\n");
fclose(in);
FILE*out = fopen("maxin.txt", "a");
if (!out) {
printf("Error !!! \n");
exit(1);
}
conversion_matrix(row, col, massiv,out);
fclose(out);
return(0);
}
Функция reading_matrix_from_file(считывает размеры матрицы и саму матрицу из файла):
void reading_matrix_from_file(int* row, int* col, FILE*in, double mass[][MXCOL]) {
char *start, *end;
char string[MXLEN];
fgets(string, MXLEN, in);
start = string;
*row = strtod(start, &end);
start = end;
*col = strtod(start, &end);
fgets(string, MXLEN, in);
for (int r = 0; r < *row; r++) {
fgets(string, MXLEN, in);
start = string;
for (int c = 0; c < *col; c++) {
mass[r][c] = strtod(start, &end);
start = end;
}
}
}
Функция table_matrix(выводит матрицу на экран):
void table_matrix(int* row, int* col, double mass[][MXCOL]) {
for (int r = 0; r < *row; r++) {
printf("\n");
for (int c = 0; c < *col; c++) {
printf("%5.2lf ", mass[r][c]);
}
}
}
Функция conversion_matrix(считате сумму положительных эл-в строк,выводит на экран и записывает в конец файла):
void conversion_matrix(int row, int col, double mass[][MXCOL], FILE*out) {
fprintf(out,"|stroka||summa|\n");
for (int r = 0; r < row; r++) {
int sum = 0;
for (int c = 0; c < col; c++) {
if (mass[r][c] > 0) {
sum = mass[r][c] + sum;
}
}
printf("%d%7d\n", r + 1, sum);
fprintf(out, "%3d%7d\n", r + 1, sum);
}
}
Заголовочный файл header11.h:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MXLEN 250
#define MXROW 10
#define MXCOL 10
void reading_matrix_from_file(int* row, int* col, FILE*in,double mass[][MXCOL]);
void conversion_matrix(int row, int col, double mass[][MXCOL],FILE*out);
void table_matrix(int* row, int* col, double mass[][MXCOL]);
Тестирование программы
1.00 -2.00 3.00 -4.00 5.00
1.00 3.00 -4.00 5.00 -6.00
2.00 3.00 -5.00 4.00 3.00
1 9
2 9
3 12