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


 

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

14936. Махатма Ганди 110.5 KB
  МАХАТМА ГАНДИ Қысқаша өмірбаяны Мохандас Карамчанд ГАНДИ 02.10.186930.01.1948 ж.ж. Үндістан ұлтазаттық қозғалысының қайраткері. М.Ганди Оңтүстік Африкада жүргенде бейбіт жолмен қарсыласудың теориясы мен тактикасын белгілеп оны сатьяграха Шындық үшін тайсалма деп...
14937. Монғолия Қазақтары 62 KB
  Айнагүл Сарайқызы Моңғолия қазақ әйелдері Арулар одағының төрайымы Аруларжұлдыз журналының бас редакторы Моңғолия УЛАНБАТАР МЕН МОҢҒОЛИЯНЫҢ БАСҚА АЙМАҚТАРЫН МЕКЕНДЕЙТІН ҚАЗАҚТАРДЫҢ РУХАНИ ЖАҒДАЙЫ ТІЛ МӘДЕНИЕТ ЖАЙЛЫ ОЙТОЛҒАМ Армысыздар құр
14938. Мұса Жәлел 55 KB
  АСАУ ЖҮРЕК Өгей ұлың болдым ғой мен өз елім. Өлім күтіп шетте өртендіау өзегім. Өлсем қызыл гүлдер өссін қаныма Көз жасымды қабылдасынөзенің. Мұса Жәлел Берлинде Осыдан он жылдай бұрын Алматыда Ғалымдар үйінде атақты ақын Мұса Жәлелдің туғаны
14939. Отаршылдық саясаттың Түркі өркениетіне тигізген кері әсері 46.5 KB
  Тарихсыз халық тұл демекші әр халықтың өзіндік өткені жолы, даму тарихы болады. Еліміздің ұлттық тәуелсіздік алуы – қазақ халқының тарихи даму жолына қатысты жаңа көзқарастар туғызды...
14940. ҰЛТТЫҚ САНА-СЕЗІМ – ШЕКСІЗ ДҮНИЕ (Өзбекстандағы қазақтар жайында) 46.5 KB
  Нұрсұлтан Жүсіпов Өзбекстан мемлекеттік әлем тілдері университетінің докторанты филология ғылымдарының кандидаты ҰЛТТЫҚ САНАСЕЗІМ ШЕКСІЗ ДҮНИЕ Өзбекстандағы қазақтар жайында Ұлттық санасезім ұлттық патриотизм әр адамды әр халықты ұлттық ойлау қ
14941. ОРТАҚ ОТАН – ҚАЗАҚСТАН 44 KB
  Төкен ӨмірҰзақ Педагогғалым Ресей ОРТАҚ ОТАН ҚАЗАҚСТАН Қазақстан Республикасының елордасы Астана қаласының 10 жылдығына және Алаш қозғалысының 90 жылдығына орай Әлем қазақтарының рухани сұхбаты: тіл мәдениет және Алаш мұраты атты халықаралық конферен...
14942. САБАҚТАСТЫҚ Алаш идеялары және тәуелсіз Қазақстан мұраттары 56.5 KB
  САБАҚТАСТЫҚ Алаш идеялары және тәуелсіз Қазақстан мұраттары Қазақстанға Сталин жендеті Голощекин келгенше Алаш қозғалысы Алашорда өкіметі және оның серкелері туралы әредік обьективті пікірлер де айтылып отырды. Бұл ретте Ахмет Байтұрсыновтың өмірі мен қоғамд
14943. ТӘУЕЛСІЗ ҚАЗАҚСТАН МҰРАТТАРЫНЫҢ АЛАШ ИДЕЯЛАРЫМЕН САБАҚТАСТЫҒЫ 62 KB
  ТӘУЕЛСІЗ ҚАЗАҚСТАН МҰРАТТАРЫНЫҢ АЛАШ ИДЕЯЛАРЫМЕН САБАҚТАСТЫҒЫ Қазақстанға Сталин жендеті Голощекин келгенше Алаш қозғалысы Алаш орда өкіметі оның серкелері туралы әредік обьективті пікірлер де айтылып отырды. Бұл ретте Ахмет Байтұрсыновтың өмірі мен қоғамдықш
14944. Түріксой ұйымы – түркі халықтарыны мәдениетінің бірлігі 51.5 KB
  Түріксой ұйымы түркі халықтарыны мәдениетінің бірлігі Арғы тарихтың бедерінде күллі әлемге із қалдырған түркі дүниесінің бүгінгі күні де дүниежүзілік өркениетте ерекше орны бар екені белгілі. Жалауын жоғары ұстап намысын ешкімге таптатпаған ежелгі түркі халықта