Создать текстовый файл можно в любом текстовом редакторе, например в «Блокноте». Сохранить файл необходимо в папку, где будет находиться программа. Разделитель чисел в текстовом файле – пробел или новая строка.
Открытие файла осуществляется с помощью функции 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. | Дан текстовый файл вещественных чисел. Найти в нем максимальный элемент. |