18553

Файловый ввод/вывод в языке ANSI C

Доклад

Информатика, кибернетика и программирование

Задача лабораторной работы состоит в практическом освоении работы с файлами, написание приложения по индивидуальному варианту.

Русский

2014-03-24

2.23 MB

6 чел.

Лабораторная работа № 7

по дисциплине “Языки программирования”

Файловый ввод/вывод

Цель работы

Целью данной лабораторной работы является изучение на практике основам работы с файлами в языке ANSI C.

Задача лабораторной работы

Задача лабораторной работы состоит в практическом освоении работы с файлами, написание приложения по индивидуальному варианту.

Задание

Модифицировать программу из лабораторной работы № 5 с учетом

следующих требований:

- Организовать ввод начального и конечного значений аргумента и параметра, количество шагов расчета функций G, F, Y в виде строк; использовать

функции преобразования из строки в число;

- Исключить из программы выбор пользователем функции, подлежащей расчету;

- Рассчитанные значения G, F, Y хранить в массиве структур;

- Организовать вывод результатов расчета.

Блок-схема основной программы и дополнительных функций и процедур

Составим схему программы

 

Листинг программы

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <conio.h>

#include <string.h>

#include <algorithm>

#include <fstream>

#include <iostream>

using namespace std;

const double PI = 3.14159265;

const int size_array = 100;

char Res[1024];

struct ArrValue {

 int ID;

 float Argument;

 float Ordinata;

   } ;

struct ArrValue ArrValue_G[size_array];

struct ArrValue ArrValue_F[size_array];

struct ArrValue ArrValue_Y[size_array];

struct ArrValue ArrValue_Temp[size_array];

void SaveToFile(struct ArrValue ArrValue_Temp[100], const char* FileName, int i_max)

{

 

 FILE *file;

 file = (FILE *)fopen(FileName, "w+");

 if ((file = fopen(FileName,"w")) == NULL)

 {

 printf("Error for opening File\n");

 exit(1);

 }

 for (int i=0; i<i_max; i++)

  {

   fprintf(file, "%i %f %f\n", ArrValue_Temp[i].ID, ArrValue_Temp[i].Argument, ArrValue_Temp[i].Ordinata);

  }

fclose(file);

 

 return;

}

void LoadFromFile(struct ArrValue ArrValue_Temp[100], const char* FileName)

{

 FILE *file;

 file = (FILE *)fopen(FileName, "rt");

 int i_max = 0;

 while( !feof(file) ) if ( fgetc(file) == '\n' ) i_max++;

 printf("Loaded Value from File: %s\n", FileName);

 clearerr(file);

 fseek(file,0,SEEK_SET);

 for (int i=0; i<i_max; i++)

  {

  fscanf(file, "%i %f %f\n", &ArrValue_Temp[i].ID, &ArrValue_Temp[i].Argument, &ArrValue_Temp[i].Ordinata);

  printf("%i %f %f\n", ArrValue_Temp[i].ID, ArrValue_Temp[i].Argument, ArrValue_Temp[i].Ordinata);

 }

 fclose(file);

 

 return;

}

float EnterDigit(char* Param ) //функция считывания введенных символов в память как числовых данных

{

 char*  mmm_string="\0";

 char   buf[30];

 _flushall();

 printf("Enter %s:", Param);

 scanf("%s",buf);

 _flushall();

 mmm_string = _strdup(buf);

 

 return atof(mmm_string);

}

void OutArr(int Cnt, float ArrVal[])

{

 

 char *buffer;

 int  decimal, sign;

 strcpy_s(Res,"Result: ");

 

 for (int i=0;i<Cnt;i++)

 {

   buffer = _fcvt(ArrVal[i], 7, &decimal, &sign );

strcat_s(Res,buffer);

   strcat_s(Res," ");

 }

 printf("\n%s\n", Res);

 return;

}

void FindSub()

{

 

 char   buf[30];

 char* buff;

 _flushall();

 printf("Enter substr:");

 fgets(buf,30,stdin);

 _flushall();

 int cnt=0;

 buff = strdup(Res);

 int i=0;

 while (buf[i]!=NULL)

 {

   if (buf[i] == '\n')

   {

     buf[i] = '\0';

   }

   i++;

 }

 buff = strstr(buff+1,buf);

 while (buff!=NULL)

 {

   

   buff = strstr(buff+1,buf);

   cnt++;

 }

 printf("Find %d \n",cnt);

 return;

}

void f_G(float a, float x1, float x2, int k)

{

 printf("Calculation G\n");

 

 float G,gg;

 float ArrG[100];

 float x,dx;

 x = x1;

 dx = fabs((x2-x1)/k);

 int i = 0;

 do 

 {

   gg = 25 * a * a + 30 * a * x + 9 * x * x;

   if (gg != 0 )

   {

     G = 9 * (7 * a * a - 19 * a * x + 10 * x * x) / gg;

     

  ArrValue_G[i].ID = i;

  ArrValue_G[i].Argument = x;

     ArrValue_G[i].Ordinata = G;

  ArrG[i] = G;     

  i++;

   }

   x = x + dx;

 } while (x<x2);

 printf("******SUBMENU*******\n");

 OutArr(i, ArrG);

 FindSub();

 SaveToFile(ArrValue_G, "ArrValue_G.txt", i);

 memset (ArrValue_G, 0 , sizeof(ArrValue_G));

 

 return;

}

void f_F(float a, float x1,float x2, int k)

{

 printf("Calculation F\n");

 float F,ff;

 float ArrF[100];

 float x,dx;

 x = x1;

 dx = fabs((x2-x1)/k);

 int i = 0;

 do 

 {

     ff = 9 * a * a - 13 * a * x - 10 * x * x;

   

     F = cos(ff);

     ArrValue_F[i].ID = i;

  ArrValue_F[i].Argument = x;

     ArrValue_F[i].Ordinata = F;

  ArrF[i] = F;

     i++;

   

   x = x + dx;

 } while (x<x2);

 printf("******SUBMENU*******\n");

 OutArr(i, ArrF);

 FindSub();

 SaveToFile(ArrValue_F, "ArrValue_F.txt", i);

 memset (ArrValue_F, 0 , sizeof(ArrValue_F));

 return;

}

void f_Y(float a, float x1,float x2, int k)

{

 printf("Calculation Y\n");

 float Y,yy, yyy;

 float ArrY[100];

 float x,dx;

 x = x1;

 dx = fabs((x2-x1)/k);

 int i = 0;

 do 

 {

 yy = -80 * a * a - 46 * a * x + 21 * x * x + 1;

   

 if (yy >= 0)

   {

     Y = logf(yy)/logf(10.0);  

   

  ArrValue_Y[i].ID = i;

  ArrValue_Y[i].Argument = x;

     ArrValue_Y[i].Ordinata = Y;

  ArrY[i] = Y;

     i++;

   }

   x = x + dx;

 } while (x<x2);

 printf("******SUBMENU*******\n");

 OutArr(i, ArrY);

 FindSub();

 SaveToFile(ArrValue_Y, "ArrValue_Y.txt", i);

 memset (ArrValue_Y, 0 , sizeof(ArrValue_Y));

 return;

}

void vvod_dannih()

{

 

 int k;

 float a,x1,x2;

 

   system("cls");

printf("Program from Work with File. In/Out Value F, G, Y\n");

   

 a = EnterDigit("a");

     _flushall();

     x1 = EnterDigit("x1");

     _flushall();

     x2 = EnterDigit("x2");

     _flushall();

     do 

     {

       _flushall();

       printf("Enter K (< 100):");

       scanf_s("%d",&k);

     } while (k<0 || k>100);

     f_G(a,x1,x2,k);

     f_F(a,x1,x2,k);

     f_Y(a,x1,x2,k);

  return;                 

}

int main()

{

printf("Calculation (1) Array or load from file (2 or other) G,F,X ? \n");

 int ch;

ch = _getch();

 if ( ch != '1' )

   {

 LoadFromFile(ArrValue_G, "ArrValue_G.txt");

    LoadFromFile(ArrValue_F, "ArrValue_F.txt");

 LoadFromFile(ArrValue_Y, "ArrValue_Y.txt");

 system("pause");

 

  }

 vvod_dannih();

 system("pause");

 return 0;

}

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

Нажатие клавиши с цифрой 1. Ввод/вывод данных

Нажатие клавиши с цифрой 2. При вызове функции загрузки с файла ( функция LoadFromFile)

На жестком диске в папке с исполняющим файлом при выполни функции SaveToFile появляются или обновляются значение в файлах массива структур


Проверка результатов работы программы

Выводы по работе

В ходе выполнения лабораторной работы я изучил особенности  написания  программы  на языке ANSI C, в основе которой лежит алгоритм структуры и  файловым ввод/вывод.


 

А также другие работы, которые могут Вас заинтересовать

11696. Використання розширеної памятіта можливостей XMS драйверів 106.5 KB
  ЛАБОРАТОРНА РОБОТА №12. Тема: Використання розширеної пам’ятіта можливостей XMS драйверів. Ціль: Отримати практичні навички звернення до драйвера розширеної памяті і вивчити її основні функції. Теоретичні ві...
11697. Ознайомлення з функціями драйвера EMS 119.5 KB
  ЛАБОРАТОРНА РОБОТА №13. Тема: Ознайомлення з функціями драйвера EMS. Ціль: Вивчити здатність роботи з розширеною памяттю. Теоретичні відомості. На відміну від розширеної памяті додаткова память за допомогою спеціальної апаратури і програмного забезпечення в
11698. Многократные равноточные измерения. Точечная оценка результатов наблюдения 470.5 KB
  Многократные равноточные измерения. Точечная оценка результатов наблюдения. 1. Цель работы 1.1. Выбор средства измерения. 1.2. Освоение метода непосредственной оценки при проведении многократных равноточных измерений. 1.3. Освоение метода ...
11699. Технические измерения линейных размеров. Многократные равноточные (ограниченной выборки) и однократные прямые измерения 186.5 KB
  Тема: Технические измерения линейных размеров. Многократные равноточные ограниченной выборки и однократные прямые измерения 1. Цель работы 1.1. Изучить назначение и устройство штангенрейсмаса штангенглубомера и индикаторного нутромера а также правила их исп
11700. Отклонения формы и расположения поверхностей. Измерение отклонений круглости, прямолинейности цилиндрической поверхности (изогнутости оси), радиального и торцевого биений 247 KB
  Тема: Отклонения формы и расположения поверхностей. Измерение отклонений круглости прямолинейности цилиндрической поверхности изогнутости оси радиального и торцевого биений 1. Цель работы 1.1. Изучить назначение и устройство индикатора часового типа модели...
11701. Средства измерения с непосредственной оценкой. линейные и угловые измерения, работа со штангенциркулем, микрометром, угломером 332 KB
  Лабораторная работа № 1 Средства измерения с непосредственной оценкой. линейные и угловые измерения работа со штангенциркулем микрометром угломером 1. Цель работы Освоить метод непосредственной оценки с отсчётом по шкале и нониусу при помощи линейных ср...
11702. Меры, ознакомление и работа с мерами. Меры твердости образцовые. Меры длинны концевые 99.5 KB
  Лабораторная работа № 2 Меры ознакомление и работа с мерами. Меры твердости образцовые. Меры длинны концевые 1. ЦЕЛЬ РАБОТЫ: 1. Освоить понятие меры; 2. Ознакомиться с разновидностями мер; 3. Ознакомиться с образцовыми мерами твёрдости служащие для поверки п
11703. СВЧ - Влагомер тест -100 97.5 KB
  Лабораторная работа № 4 СВЧ Влагомер тест 100 1. ЦЕЛЬ РАБОТЫ: Изучить принцип работы СВЧ влагомера ТЕСТ100. Измерить влажность калибровочных растворов. Построить график зависимости затухания СВЧ волн от концентрации воды в пробе. Измерить затухание в про
11704. Исследование работы рефрактометра ИРФ - 22 330.5 KB
  Лабораторная работа № 3 Исследование работы рефрактометра ИРФ 22 1 ЦЕЛЬ РАБОТЫ: Изучение принципа работы на рефрактометре ИРФ 22. 2. ОБОРУДОВАНИЕ И ПРИБОРЫ: Рефрактометр ИРФ 22; Дистиллированная вода. Этанол. Четыре контрольные пробы раствора с разл