Скачиваний:
13
Добавлен:
15.03.2015
Размер:
23.55 Кб
Скачать

Санкт-Петербургский Университет

телекоммуникаций имени проф. Бонч-Бруевича

ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ

Лабораторная работа №11

Работа с файлами

Студент группы СУ-01

Соловьёв Константин

Вариант № 15

2011 г.

      1. Постановка задачи

Имеется текстовый файл, содержащий произвольное количество строк. Длина каждой строки не превосходит 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

Соседние файлы в предмете Программирование на языках высокого уровня