Лабораторная работа по Си файлы

Цель работы
Изучение способов описания файлов и основных принципов работы с файлами в различных режимах: создания, модификации, добавления и чтения.

Лабораторное задание

В программе необходимо определить указатели. Все обращения к элементам массивов (одномерных и двумерных) производить с помощью указателей.a). Задан массив А(20). Определить знакопеременную сумму а– а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

Результаты работы программы


Комментариев нет:

Отправить комментарий