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


 

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

19137. История развития ядерной отрасли в мире и России. Текущее состояние ядерной энергетики в России. Предприятия ядерного топливного цикла 725 KB
  Лекция 2 История развития ядерной отрасли в мире и России. Текущее состояние ядерной энергетики в России. Предприятия ядерного топливного цикла. Планы на развитие ядерной энергетики в России. Проблемы ядерной энергетики. 2.1. История развития ядерной отрасли в мире и ...
19138. Состав атомных ядер. Ядерные силы. Энергия связи. Формула Вайцзекера. Радиоактивный распад. Типы распадов. Закон радиоактивного распада 221.5 KB
  Лекция 3. Состав атомных ядер. Ядерные силы. Энергия связи. Формула Вайцзекера. Радиоактивный распад. Типы распадов. Закон радиоактивного распада. 3.1. Состав атомных ядер. В 1932 г. Иваненко высказал гипотезу что в состав ядра атома входят только два вида элементарны
19139. Определение ядерной реакции. Элементарные частицы. Особенности ядерных реакций с нейтронами. Классификация нейтронов по энергии 150 KB
  Лекция 4. Определение ядерной реакции. Элементарные частицы. Особенности ядерных реакций с нейтронами. Классификация нейтронов по энергии. Сечение ядерной реакции. Микроскопическое и макроскопическое нейтронные сечения. 4.1. Определение ядерной реакции. Ядерная ре
19140. История открытия реакции деления. Осколки деления. Выходы осколков деления. Мгновенные и запаздывающие нейтроны 292 KB
  Лекция 5. История открытия реакции деления. Осколки деления. Выходы осколков деления. Мгновенные и запаздывающие нейтроны. Распределение энергии между продуктами деления. Спонтанное деление. Особенности сечений деления основных делящихся изотопов. 5.1. История откры
19141. Цепная самоподдерживающаяся реакция деления. Коэффициент размножения. Способы достижения критичности 4.71 MB
  Лекция 6 Цепная самоподдерживающаяся реакция деления. Коэффициент размножения. Способы достижения критичности. Критические и подкритические эксперименты. Первый ядерный реактор. 6.1. Цепная самоподдерживающаяся реакция деления В результате реакции деления появ...
19142. Плотность потока нейтронов. Скорость ядерной реакции. Баланс нейтронов в ядерном реакторе. Коэффициент размножения в бесконечной среде 265 KB
  Лекция 7. Плотность потока нейтронов. Скорость ядерной реакции. Баланс нейтронов в ядерном реакторе. Коэффициент размножения в бесконечной среде. Групповой подход. Библиотеки групповых констант. 7.1. Плотность потока нейтронов. Совокупность переменных {Et} называют...
19143. Создание базы данных, состоящей из одной таблицы 190.41 KB
  Повторим аналогичную операцию еще раз, в результате чего закроем текущую базу данных, получив пустое окно для новой работы. В этом положении можно создать новую базу данных, а можно открыть существующую для продолжения работы.
19144. Нейтронный цикл в реакторе на тепловых нейтронах. Формула четырех сомножителей. Вероятность избежать резонансного захвата и поглощения в замедлителе 178 KB
  Лекция 8. Нейтронный цикл в реакторе на тепловых нейтронах. Формула четырех сомножителей. Вероятность избежать резонансного захвата и поглощения в замедлителе. Оптимальные параметры размножающих сред. Одногрупповая теория критического реактора. Отражатель нейтронов. ...
19145. Бесконечная решетка. Элементарная ячейка. Распределение нейтронов различных энергий по ячейке 419 KB
  Лекция 9. Бесконечная решетка. Элементарная ячейка. Распределение нейтронов различных энергий по ячейке. Коэффициент размножения бесконечной периодической решетки. Твэлы и ТВС реакторов ВВЭР и РБМК. 9.1. Бесконечная решетка Кроме гомогенной среды топлива и замедлите...