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


 

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

44081. ШЛЯХИ УДОСКОНАЛЕННЯ СИСТЕМИ ОПОДАТКУВАННЯ ПРИБУТКУ СУБ’ЄКТІВ ГОСПОДАРЮВАННЯ 1.18 MB
  Становлення та розвиток системи оподаткування прибутку підприємств Кожна держава для виконання своїх функцій повинна мати відповідні кошти які концентруються в державному бюджеті та інших централізованих фондах. Сучасна систесма оподаткування грунтується на вченнях про податки розробленими такими видатними мислителями як Уільям Петті Адам Сміт Давід Рікардо Джон Ст. В історії оподаткування у глобальному масштабі зазвичай виділяють три етапи розвитку.
44082. РОЗРОБКА МОДЕЛІ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ ОБЛІКУ СТУДЕНТІВ У ВИЩОМУ НАВЧАЛЬНОМУ ЗАКЛАДІ 1.26 MB
  Методика віддаленого формування звітів системи управління навчанням Moodle на основі технологій вебсервісів. Цільова установка та загальний напрямок магістерської дипломної роботи: Розширення стандартних можливостей системи управління дистанційним навчанням Moodle за допомогою вебсервісів. Об’єкт дослідження: Розробка програмного продукту для автоматичного формування звітів у системі управління навчанням Moodle. Встановлення системи управління навчанням Moodle 2.
44083. Широкомасштабное применение мин в локальных военных конфликтах 77.86 MB
  Выбор робота и миноискателя. Обзор существующих решений Проектирование системы управления роботом. Состав системы управления. Математическое моделирование системы управления. Модель системы управления.
44084. Особенности развития российского рынка гостиничной недвижимости в сегменте апарт-отелей 24.17 MB
  В России, как и в странах Запада, прослеживается тенденция к размещению апартаментов в составе гостиничных комплексов - так называемые апартаменты гостиничного типа. Управление апартаментами в данных комплексах осуществляется гостиничным оператором, постояльцам предлагается широкий спектр сервисных услуг.
44085. Проектирование локальной вычислительной сети предприятия «Строительно-монтажный трест №16» города Новополоцка 1.14 MB
  Преимущества получаемые при сетевом объединении персональных компьютеров в виде внутрипроизводственной вычислительной сети: разделение ресурсов разделение данных разделение программных средств многопользовательский режим. Целью дипломного проекта является проектирование локальной вычислительной сети предприятия Строительно-монтажный трест №16 города Новополоцка. Организация общей локальной вычислительной сети предприятия Строительно-монтажный трест №16 а не существования множества несвязанных сетей подразделений крайне необходима.
44086. Исследование системы частотного регулирования и формирование четкой структуры программирования и параметрирования преобразователя Emotron FDU40-004 9.18 MB
  Наряду с задачами регулирования ПЧ решает задачи защиты блокировки и диагностики электропривода. Безопасность жизнедеятельности – это комплексное междисциплинарное научное направление исследующее закономерности сохранения здоровья и безопасности человека в среде обитания и призванное выявлять и идентифицировать вредные и опасные факторы отрицательно влияющие на здоровье человека разрабатывать методы и средства защиты путем снижения вредных и опасных факторов до уровня допустимых значений вырабатывать меры по ограничению ущерба и...
44087. Разработка рекомендаций по повышению эффективности управления оборотным капиталом предприятия (на примере ООО «Нильс-Юг» г. Самара) 6.08 MB
  Организационно-экономическая характеристика предприятия Анализ структуры и динамики имущества предприятия и источников его финансирования Оценка эффективности функционирования предприятия Оценка эффективности управления оборотным капиталом на предприятии ООО НильсЮг
44088. Анализ организации учета расчетов с покупателями и заказчиками на предприятии и определить пути их совершенствования ООО «Олимп» 3.19 MB
  Организация расчетов с покупателями и заказчиками в организации ООО Олимп Организационно-экономическая характеристика ООО Олимп Анализ расчетов с покупателями и заказчиками в ООО Олимп Совершенствование учета расчетов с покупателями и заказчиками в организации ООО Олимп
44089. Міжпоколінний конфлікт в сімї: соціологічний аналіз 392.5 KB
  Сімя є найважливішою цінністю в житті багатьох людей, що живуть у сучасному суспільстві. Кожен член суспільства, крім соціального статусу, етнічної приналежності, майнового та матеріального становища, з моменту народження і до кінця життя має такою характеристикою, як сімейно-шлюбне стан.