Изучение способов описания файлов и основных принципов работы с файлами в различных режимах: создания, модификации, добавления и чтения.
Лабораторное задание
В программе необходимо определить указатели. Все обращения к
элементам массивов (одномерных и двумерных) производить с помощью указателей.a). Задан
массив А(20). Определить знакопеременную сумму а1 – а2 + а3 – а4 + ….
б). Просуммировать элементы
матрицы Х(6,8), сумма индексов которых равна заданной константе К.
Добавить работу с файлами:
а) в функции ввода исходные данные записывать в файл;
б) в функциях обработки и вывода данные читать из файла, результат
сохранять в файл;
в) для второго задания лабораторной работы №6 данные дописывать в
файл с исходными данными для первого задания;
Выполнить программу на компьютере
и оценить правильность ее работы.
Вывести на печать содержимое
файла исходных данных и результатов работы программы.
Листинг
//Обьявление прототипов библиотечных функций
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <locale>
#include <Windows.h>
#include <string.h>
//Начало программы
void main(void)
{
setlocale(LC_ALL,
"Russian");
// Первая часть
....................................................................
int a[20],*pa;
int i,j;
FILE *infile, *outfile;
int s=0;
char in_filename[10],out_filename[10];
//Ввод имени файла, проверка на наличие, и запись исходных данных
printf
("Введите имя файла исходных данных: ");
scanf ("%s", in_filename);
if (((infile = fopen(in_filename,"w")) == NULL))
{
printf
("Файл не может быть открыт!");
printf
("Введите имя файла исходных данных: ");
scanf ("%s", in_filename);
}
for(i=0; i<=19; i++)
{
int flprnt=rand();
fprintf (infile,
"%d ", flprnt);
}
fprintf (infile,
"\n\n");
fclose (infile);
// Чтение исходных данный из файла и печать их на экран; расчет
знакопеременной суммы
infile = fopen(in_filename,
"r");
pa=&a[0];
for (i=0; i<=19; i++)
{
fscanf (infile,
"%d ", pa);
printf("a[%d]=",i);
printf("%d\n",*pa);
j=i%2;
if (j==0)
s+=*pa;
else s-=*pa;
pa++;
}
pa=&a[0];
fclose (infile);
// Вторая
часть.........................................................................
int x[6][8], s1=0,
*px;
const unsigned k=3;
// Проверка на
наличие, и запись исходных данных
if ((infile=fopen(in_filename, "at"))==NULL)
{
printf
("Файл не найден\n");
printf
("Введите имя файла и расширение для создания
файла исходных данных: ");
scanf ("%s", in_filename);
}
for(i=0; i<6; i++)
{
for(j=0; j<8; j++)
{
int flprnt = rand();
fprintf (infile,
" %d ", flprnt);
}
fprintf(infile,
"\n");
}
fclose
(infile);
// Чтение
исходных данный из файла и печать их на экран; расчет суммы элементов
infile=fopen(in_filename,"r");
for (i=0; i<=19; i++)
{
fscanf (infile,
"%d ", pa);
}
fscanf (infile,
"\n\n");
px=&x[0][0];
for(i=0; i<6; i++)
{
for(j=0; j<8; j++)
{
fscanf (infile,
"%d ",px);
printf ("%d
", *px);
if ((i+j)==k)
{
s1+=*px;
};
px++;
}
fscanf (infile,
"\n");
printf ("\n");
}
fclose(infile);
printf("\n\n\n");
//Создание файла результатов,проверка на наличие,запись результатов и
печать их на экран
printf
("Введите имя файла полученных данных: ");
scanf ("%s", out_filename);
if (((outfile = fopen(out_filename,"w")) == NULL))
{
printf
("Файл не может быть открыт!");
printf
("Введите имя файла исходных данных: ");
scanf ("%s", out_filename);
}
printf ("1)Знакопеременная сумма = %d\n",s);
printf ("2)Сумма элементов =
%d\n",s1);
fprintf
(outfile,"1)Знакопеременная
сумма = %d\n",s);
fprintf (outfile,"2)Сумма элементов = %d\n",s1);
fclose(outfile);
getch ();
}
Пояснительный текст к программе
Переменные а[20],x[6][8] — это массив А и матрица Х заполняемые в ходе
программы.
Переменные i,j —
это переменные с помощью которых происходит обращение к элементам массивов.
Константа k
— сумма координат.
Указатели *pа
— на массив а, *px — на матрицу x,
Комментариев нет:
Отправить комментарий