Задание 4. Ввод-вывод данных из файла. Поиск данных в файле.




Создать текстовый файл можно в любом текстовом редакторе, например в «Блокноте». Сохранить файл необходимо в папку, где будет находиться программа. Разделитель чисел в текстовом файле – пробел или новая строка.

Открытие файла осуществляется с помощью функции fopen (), возвращающей указатель на файл и имеющей следующий вид:

FILE * fopen (const char *filename, const char *mode)

 

где

const char *filename – строка с именем файла, находящемся в том же каталоге, что и программа;

const char *mode – строка с символами, задающими режим открытия файла:

- “r” – открыть для чтения (файл должен существовать);

- “w” – создать для записи (существующий файл уничтожается и создается новый файл);

- "а" – открыть для добавления в существующий файл;

- "rt", "wt", "at" – открыть текстовый файл в соответствующем режиме.

Например:

FILE * fp; //объявлен указатель на файл

fp = fopen(“Name.txt”,”wt”);

// создать текстовый файл Name.txt

 

Для определения конца файла можно использовать функцию feof (fp) [1, с. 27], возвращающую 1 если достигнут конец файла.

Например:

while (feof (fp)!= 1) /*пока не конец файла, повторять выполняемые действия …*/

{…выполняемые действия; }

 

Локальные минимумы и максимумы – смотри массивы.

Пустая строка начинается символом ‘\0’ и имеет нулевую длину.

Для считывания строк из файла можно использовать функцию fgets (str, n, fp) [1, с.27] где:

- str – имя переменной для хранения строки;

- n – максимальная возможная длина строки (обычно на 1 меньше размерности массива str;

- fp – указатель на файл, из которого производится чтение.

Например:

char str[26];

FILE * fp; // Объявлен указатель на файл

fgets (str, 25, fp); /*Считать строку из файла fp длиной не более

25 символов и сохранить ее в массиве str*/

 

Длину строк можно определить с помощью функции strlen (str) [1, с.29].

Например:

int x; char str[20];

/* Объявлены целая переменная х и массив str для хранения строки длиной не более 19 символов*/

x = strlen (str);

//В переменную х запишется текущая длина строки str

 

Для считывания из файла чисел можно использовать функцию fscanf (fp, format, &name) [1, с.27], где:

fp – указатель на файл, из которого производится чтение;

format – формат считываемых данных (см. функцию scanf);

name – имя переменной, в которую записываются данные.

 

Пример: Дан текстовый файл целых чисел в виде матрицы 5 Х 5. Элементы в строке разделены пробелами, строки разделены символом новой строки. Ввести число k от 0 до 4. Создать новый файл, в котором все элементы строки k исходного файла возведены в квадрат.

 

 

//Подключение библиотек

#include <stdio.h>

#include <conio.h>

int main(int argc, char * argv[])

{ FILE *fp,*fr; //Объявление указателей на файл

int matr[5][5], i, j, k; //Объявление массива и счетчиков

fp = fopen ("file1.txt","rt"); //Открытие исходного файла

fr = fopen ("file2.txt","wt"); //Создание конечного файла

 

for (i = 0; i <= 4; i++) { //Вложенный цикл для считывания

for (j = 0; j <= 4; j++) { //данных из исходного файла

fscanf (fp,"%d",&matr[i][j]);

}

}

//Ввод номера строки для ее изменения:

printf ("\n Введите номер строки от 0 до 4:");

scanf ("%d",&k);

 

for (j = 0; j <= 4; j++) matr[k][j]=matr[k][j]*matr[k][j];

//Изменение значений в заданной строке

for (i = 0; i <= 4; i++) { //Вложенный цикл для записи

for (j = 0; j <= 4; j++) { //данных в конечный файл

fprintf (fr,"%d ",matr[i][j]);

}

fprintf (fr,"\n"); //Вывод символа новой строки

} //для разделения строк в конечном файле

 

return 0;

}

 

Исходный текстовый файл может выглядеть следующим образом:

5 7 9 6 1

2 4 8 6 4

1 5 6 3 4

4 9 6 2 4

5 2 3 8 5


 

№ вар. Задание
1. Подсчитать и вывести количество строк существующего текстового файла.
2. Дан текстовый файл, содержащий ненулевые целые числа, разделенные пробелами. Ввести целое число k и вывести число с номером k, прочитанное из файла. Если такое число отсутствует, то вывести 0.
3. Даны два текстовых файла целых чисел одинакового размера с именами NameA и NameB. Создать новый файл с именем NameС, в котором чередовались бы элементы исходных файлов с одним и тем же номером: A0, B0, A1, B1, A2, B2,....
4. Дан текстовый файл целых чисел с именем Name1. Создать новый текстовый файл с именем Name2, который содержит элементы исходного файла (числа) с четными номерами (0, 2, 4,...).
5. Дан текстовый файл, содержащий ненулевые целые числа. Создать новый файл, содержащий только положительные числа исходного файла (в том же порядке).
6. Дан текстовый файл, содержащий ненулевые целые числа. Создать новый файл, содержащий только отрицательные числа исходного файла (в том же порядке).
7. Дан текстовый файл целых чисел. Если он содержит меньше 50 чисел, то дополнить его нулями до 50 элементов.
8. Дан текстовый файл вещественных чисел. Найти в нем минимальный элемент.
9. Даны два целых числа i и j от 0 до 9, и текстовый файл целых чисел, содержащий элементы квадратной матрицы 10х10 (числа расположены строками по 10 в строке). Вывести элемент с индексами i j (строки и столбцы нумеруются от 0).
10. Дан двумерный квадратный массив (квадратная матрица) целых чисел. Вывести его в файл построчно. Разделитель значений в строке – пробел, разделитель строк – символ новой строки.
11. Дан текстовый файл вещественных чисел. Найти количество его локальных минимумов.
12. Дан текстовый файл вещественных чисел. Найти количество его локальных максимумов.
13. Дан текстовый файл вещественных чисел. Создать новый файл, содержащий квадраты всех элементов исходного файла.
14. Дан текстовый файл вещественных чисел. Создать новый файл, в котором каждый элемент исходного файла, кроме начального и последнего, заменен на его среднее арифметическое с предыдущим и последующим элементом. Начальный файл не изменять.
15. Даны два текстовых файла вещественных чисел с именами NameA и NameB, содержащие элементы квадратных матриц A и B (по строкам) одинакового размера 10х10. Создать текстовый файл с именем NameC, содержащий матрицу, являющуюся суммой матриц A+B.
16. Дан файл, содержащий непустые строки и целое число K. Создать новый файл, содержащий все строки исходного файла с длиной большей K (в том же порядке). Если таких строк нет, то файл оставить пустым.
17. Дан файл, содержащий непустые строки и целое число K. Создать новый файл, содержащий все строки исходного файла с длиной меньшей K (в том же порядке). Если таких строк нет, то файл оставить пустым.
18. Дан текстовый файл. Создать новый файл, перенеся в него все строки исходного файла, кроме пустых.
19. Дан текстовый файл. Найти количество абзацев в тексте, если абзацы отделяются друг от друга одной пустой строкой.
20. Дан текстовый файл вещественных чисел. Найти в нем максимальный элемент.

 




Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: