Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab11_4.doc
Скачиваний:
10
Добавлен:
15.03.2015
Размер:
173.57 Кб
Скачать
        1. Пример 5. Числовая матрица находится в текстовом файле. Первая строка файла содержит данные о размере матрицы. Вычислить сумму элементов в каждой строке матрицы.

#include<stdio.h>

#include<stdlib.h>

void summa_row_in_text_file(FILE* in, FILE* out)

{

int nrow;

int ncol;

int row;

int col;

double s, x;

fscanf(in, "%d%d", &row, &col);

for(row = 0; row < nrow; row++)

{

s = 0;

for(col = 0; col < ncol; col++)

{

fscanf(in, "%lf", &x);

s += x;

}

fprintf(out, "%10.3f\n", s);

}

}

        1. Пример 6. Сумма чисел в текстовом файле

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

В текстовом файле находятся вещественные числа. Количество строк в файле и количество чисел в строке произвольно. Вычислить сумму чисел, находящихся в файле. Решение задачи оформим в виде функции.

          1. Решение

Для вычисления суммы необходимо организовать итерационный цикл. Для чтения чисел можно воспользоваться функцией fscanf(), а для проверки условия нахождения в цикле можно использовать возвращаемое этой функцией значение.

Первый вариант реализации. Обработка ошибок отсутствует

#include<stdio.h>

/* Вычисление суммы чисел в текстовом файле */

double summa_in_text_file(FILE* in)

{

double s = 0;

float x;

while(fscanf(in, "%lf", &x) != EOF)

{

s += x;

}

return s;

}

Второй вариант реализации. Предусмотрена обработка ошибок чтения.

#include<stdio.h>

#include<stdlib.h>

/* Вычисление суммы чисел в текстовом файле */

double summa_in_text_file(FILE* in)

{

double s = 0;

double x;

int result;

while((result = fscanf(in, "%lf", &x)) != EOF)

{

if(result != 1)

{

printf("Ошибка при форматировании прочтенных данных\n");

exit(1);

}

s += x;

}

if(ferror(in))

{

printf("Ошибка при чтении файла\n");

exit(1);

}

return s;

}

        1. Пример 7.

/* Произвольный доступ, двоичный ввод - вывод */

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#define ARSIZE 1000

double readNumber(FILE* in, int index);

int main(void)

{

double numbers[ARSIZE];

double value;

const char* f1 = "numbers.dat";

int i;

long pos;

FILE* in_out;

/* Создаем массив чисел */

for(i = 0; i < ARSIZE; i++)

numbers[i] = i * i;

if((in_out = fopen(f1, "wb")) == NULL)

{

fprintf(stderr, "Невозможно открыть %s для вывода.\n", f1);

exit(1);

}

/* Записываем числа в файл */

fwrite(numbers, sizeof *numbers, sizeof numbers, in_out);

fclose(in_out);

if((in_out = fopen(f1, "rb")) == NULL)

{

fprintf(stderr, "Невозможно открыть %s для произвольного\ ввода.\n", f1);

exit(1);

}

/* Считываем выделенные объекты из файла */

printf("Введите индекс в диапазоне 0 - %d.\n", ARSIZE - 1);

scanf("%d", &i);

printf("Значение равно %g.\n", readNumber(in_out, i));

/* while(i >= 0 && i < ARSIZE)

{

pos = (long)i * sizeof * numbers;

fseek(in_out, pos, SEEK_SET);

fread(&value, sizeof *numbers, 1, in_out);

printf("Значение равно %g.\n", value);

printf("Следующий индекс (для выхода укажите индекс, не входящий в диапазон) : \n");

scanf("%d", &i);

}

*/

fclose(in_out);

puts("Пока");

getch();

return 0;

}

double readNumber(FILE* in, int index)

{

double value;

long pos;

pos = index * sizeof(double);

fseek(in, pos, SEEK_SET);

fread(&value, sizeof(double), 1, in);

return value;

}

Соседние файлы в предмете Программирование