18553

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

Доклад

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

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

Русский

2014-03-24

2.23 MB

8 чел.

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


 

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

15096. Түркі халықтарының жазба ескерткіші және оның көздері 70.5 KB
  ТҮРКІ ХАЛЫҚТАРЫНЫҢ ЖАЗБА ЕСКЕРТКІШІ ЖӘНЕ ОНЫҢ КӨЗДЕРІ С. Тәжіғұлова Ғ. Мұратбаев атындағы № 17 орта мектеп Тараз қ. Әрбір дәуірдің елеулі кезеңді оқиғаларын заманының белгілі ақынжазушылары дастанжырларға ойшылдары тарихшежіреге айналдыры
15097. У.Шекспир және Д.Дефо шығармашылығы 50.5 KB
  Ағылшын әдебиеті Уильям Шекспир 1564 1616 Ағылшынның әлемге аты әйгілі драматургы әрі ақыны Уильям Шекспир 1564 жылы 23 сәуірде Эйвон өзенінің бойындағы Стратфорд деген кішкентай қалада дүниеге келген. Оның әкесі айтарлықтай ауқатты қала тұрғыны еді саудаг
15098. Ұлт-азаттық көтерілістері туралы Қытай қазақтарының тарихи жырлар 197 KB
  ӘОЖ 398.21/22943.42510 Қолжазба құқығында АЯЗБАЕВА ҰЛБОСЫН БАЗАРХАНҚЫЗЫ ҰЛТАЗАТТЫҚ КӨТЕРІЛІСІ ТУРАЛЫ ТАРИХИ ЖЫРЛАР Қытайдағы қазақтардың ХІХ ғасырдың екінші және ХХ ғасырдың бірінші жартысында туған тар...
15099. Файзолла ақын және Алаш қоғамдық саяси қозғалысы 72 KB
  Айбек ҚАЛИЕВ Л.Н.Гумилев атындағы Еуразия ұлттық университеті қазақ әдебиеті кафедрасының аға оқытушысы филология ғылымдарының кандидаты ФАЙЗОЛЛА АҚЫН ЖӘНЕ АЛАШ ҚАЙРАТКЕРЛЕРІ Қазақ әдебиетінің тарихындағы ақтаңдақ беттердің бірі ХІХ ғасырдың соңы мен ХХ ғ
15100. Фолклористикадағы миф 38.5 KB
  ФОЛКЛОРИСТИКАДАҒЫ МИФ ОНДАҒЫ ФЕТИШИЗМ МЕН АНИМИЗМ ТАБУ НАНЫМСЕНІМ МӘСЕЛЕЛЕРІ М. Иманғазинов Б. Есімбекова І. Жансүгіров атындағы Жетісу мемлекеттік университеті Талдықорған қ. Ы. Алтынсарин атындағы Қазақ білім академиясы Алматы қ. Мелеагр жөніндегі а...
15101. Француз романтизмі 50 KB
  ХІХ ғасырдағы шетел әдебиетінің тарихы Романтизм дәуірі Француз романтизмі Франциядағы романтизм тағдырының өзіндік ерекшелігі аталмыш жалпыеур
15103. ХІХ ғасырдағы Қазақ әдебиеті және оның зерттелуі 63 KB
  ХІХ ғасырдағы қазақ әдебиетінің тарихы зерттелуі. Қазақ әдебиеті тарихының төртінші томында ХІХ ғасырдың бірінші жартысындағы әдеби процестерге талдау жасалға ал бесінші томы осы ғасырдығ ІІ жартысына арналады. Сол кезеңдегі әдебиеттің даму ерекшеліктері сарапт
15104. ХХ ғасырдың ұлы жырауы 79 KB
  ХХ ғасырдың ұлы жырауы Жүз жыл өмірінің сексен бесін өлеңмен өткізген Жәкең екі ғасырдың куәсі ғана болған жоқ. Оның жүз жылғы өмірі шындап келгенде екі ғасырға тең еді. Өйткені Жамбыл тарихта сирек кездесетін мүлде қарамақарсы екі заманды көрді қайшылыққа толы ...