18553

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

Доклад

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

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

Русский

2014-03-24

2.23 MB

7 чел.

Лабораторная работа № 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, в основе которой лежит алгоритм структуры и  файловым ввод/вывод.


 

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

84225. СТРОМАЛЬНО-СОСУДИСТЫЕ БЕЛКОВЫЕ ДИСТРОФИИ 31.33 KB
  К стромальнососудистым диспротеинозам относят: мукоидное набухание; фибриноидное набухание; гиалиноз; амилоидоз. Амилоидоз отличается от этих процессов тем что в состав образующихся белковополисахаридных комплексов входит аномальный не встречающийся в норме фибриллярный белок который синтезируется специальными клетками амилоидобластами. Амилоид в гистологических препаратах очень похож на гиалин и выглядит в световом микроскопе как бесструктурный гомогенный плотный стекловидный розового цвета белок.
84226. СТРОМАЛЬНО-СОСУДИСТЫЕ ДИСТРОФИИ 24.36 KB
  Причина первичного идиопатического ожирения неизвестна. Виды вторичного ожирения: алиментарное; церебральное; эндокринное; наследственное. По внешним проявлениям различают универсальный симметричный тип ожирения который делят на три подтипа: верхний; средний; нижний. По превышению массы тела больного выделяют четыре степени ожирения: I степень ожирения избыточная масса тела составляет до 30; II степень ожирения избыточная масса тела составляет до 50; III степень ожирения избыточная масса тела составляет до 99; ...
84227. СМЕШАННЫЕ ДИСТРОФИИ НАРУШЕНИЕ ОБМЕНА ХРОМОПРОТЕИДОВ (ЭНДОГЕННЫЕ ПИГМЕНТАЦИИ). НАРУШЕНИЕ ОБМЕНА 30.75 KB
  Обмен железа в норме регулируется так чтобы общая сумма железа в организме поддерживалась в пределах узкого диапазона. Увеличение общего количества железа в органе наблюдается при гемосидерозе и гемохроматозе. Анаболический ферритин образуется из железа всасывающегося в кишечнике а катаболический из железа гемолизированных эритроцитов. Билирубин конечный продукт катаболизма порфиринового кольца молекулы гемоглобина он не содержит ни железа ни белка.
84229. НАРУШЕНИЕ МИНЕРАЛЬНОГО ОБМЕНА (МИНЕРАЛЬНЫЕ ДИСТРОФИИ) 24.82 KB
  Обмен кальция. Нарушение обмена кальция в тканях организма называют обызвествлением. Метастатическая кальцификация возникает при увеличении концентрации кальция или фосфора в крови гиперкальциемия.
84230. ОБРАЗОВАНИЕ КАМНЕЙ КАК ОДНА ИЗ ФОРМ НАРУШЕНИЯ ОБМЕНА ВЕЩЕСТВ 22.61 KB
  Наиболее часто камни образуются в желчных и мочевых путях являясь причиной развития желчнокаменной и мочекаменной болезней. Они встречаются также в других полостях и протоках: в выводных протоках поджелудочной железы и слюнных желез в бронхах и бронхоэктазах бронхиальные камни в криптах миндалин на зубах в кишечнике. Желчные камни могут быть холестериновыми пигментными известковыми или холестериновопигментноизвестковыми сложные или комбинированные камни.
84231. НЕКРОЗ 24.24 KB
  Факторы вызывающие некроз: физические; токсические; биологические; аллергические; сосудистый; трофоневротический. зависимости от механизма действия патогенного фактора различают: прямой некроз обусловленный непосредственным действием фактора травматические токсические и биологические некрозы; непрямой некроз возникающий опосредованно через сосудистую и нервноэндокринную системы аллергические сосудистые и трофоневротические некрозы. морфологические признаки некроза.
84232. АПОПТОЗ. АТРОФИЯ 25.24 KB
  АТРОФИЯ Определение морфологические проявления апоптоза Определение классификация значение атрофии Апоптоз или запрограммированная смерть клетки представляет собой процесс посредством которого внутренние или внешние факторы активируя генетическую программу приводят к гибели клетки и ее эффективному удалению из ткани. При увеличении апоптоза наблюдается прогрессивное уменьшение количества клеток в ткани атрофия. Атрофия прижизненное уменьшение объема ткани или органа за счет уменьшения размеров каждой клетки а в дальнейшем числа...
84233. НАРУШЕНИЯ КРОВООБРАЩЕНИЯ 23.15 KB
  Общее артериальное полнокровие или артериальная гиперемия это увеличение числа форменных элементов крови эритроцитов иногда сочетающееся с увеличением объема циркулирующей крови. Общее венозное полнокровие один из самых частых типов общих нарушений кровообращения и является клиникоморфологическим проявлением сердечной или легочносердечной недостаточности. Общее венозное полнокровие может быть по клиническому течению острым и хроническим.