18587

Функции в языке ANSI C

Лабораторная работа

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

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

Русский

2014-03-24

2.74 MB

12 чел.

Лабораторная работа №8

по дисциплине “Языки программирования”

Функции

Цель работы

Целью данной лабораторной работы является изучение функций в языке ANSI C.

Задача лабораторной работы

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

Задание

Реализовать алгоритм, приведенный в приложении 1.

Модифицировать программу, добавив код, запускающий алгоритм поиска (для

1-й точки) в диапазоне всех точек от 10 до 5000 и регистрирующий время работы с

данными одной размерности.

Модифицировать программу, добавив код, запускающий поиск для 1 до 5000

точек при общем количестве точек 5000.

Модифицировать программу, добавив код записи в файл времен выполнения (согласно приложения к МУ ЛР8).

Использовать полученный файл в MS Excel для построения графика зависимости (согласно приложения к МУ ЛР8).

Построить тренд по полученным данным (согласно приложения к МУ ЛР8). Сделать выводы о характере полученных зависимостей. Выводы и графики включить в отчет.

Блок-схема основной программы и дополнительных функций и процедур

Составим схему программы

 

Листинг программы

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <conio.h>

#include <string.h>

#include <algorithm>

#include <fstream>

#include <iostream>

#include <omp.h>

using namespace std;

const double PI = 3.14159265;

const int Size_array = 5000;

char Res[1024];

struct ArrValue {

 int ID;

 float Argument;

 float Ordinata;

   } ArrValue_Temp;

struct ArrValue ArrValue_G[Size_array];

struct ArrValue ArrValue_F[Size_array];

struct ArrValue ArrValue_Y[Size_array];

ArrValue ArrValue_Tmp;

void FindNearValue(struct ArrValue ArrValue_Temp[5000],  int i_max) //нахождение близлежайщей точки с ее номером,  аргументом и ординатой

{

  double t_1, t_2; //временные интервалы 

  float FoundedX, FoundedVal;

  printf("Enter Founded Value Argument\n");

  scanf("%f", &FoundedX);

  printf("Enter Founded Value Ordinata\n");

  scanf("%f", &FoundedVal);

  float deltaX, deltaVal, R, R0, NearX, NearVal;

  int NearID;

  t_1 = omp_get_wtime(); //начальный замер времени

  NearID = ArrValue_Temp[0].ID;

  NearX = ArrValue_Temp[0].Argument;

  NearVal = ArrValue_Temp[0].Ordinata;

   deltaX = ArrValue_Temp[0].Argument - FoundedX;

   deltaVal = ArrValue_Temp[0].Ordinata - FoundedVal;

R0 = sqrt (deltaX*deltaX + deltaVal*deltaVal);

 for (int i=0; i<i_max; i++)

  {

   deltaX = ArrValue_Temp[i].Argument - FoundedX;

   deltaVal = ArrValue_Temp[i].Ordinata - FoundedVal;

R = sqrt (deltaX*deltaX + deltaVal*deltaVal);

   if (R < R0)

 {

  R = R0;

        NearID = ArrValue_Temp[i].ID;

  NearX = ArrValue_Temp[i].Argument;

  NearVal = ArrValue_Temp[i].Ordinata;

       }

}

  t_2 = omp_get_wtime(); //конечный замер времени выводим результаты на экран

  printf("omp_get_max_threads(): %d\n", omp_get_max_threads()); //выводим результаты на экран

  printf("time: %f\n", t_2 - t_1);

  printf("Value ID nearest Point: %d\n", NearID);

  printf("Value Argument nearest Point: %f\n", NearX);

  printf("Value Ordinata nearest Point:  %f\n", NearVal);

 

}

void SaveToFile(struct ArrValue ArrValue_Temp[5000], 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[5000], 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[5000];

 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);

 FindNearValue(ArrValue_G, 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[5000];

 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);

 FindNearValue(ArrValue_F, 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;

 float ArrY[5000];

 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);

 FindNearValue(ArrValue_Y, 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 (< 5000):");

       scanf_s("%d",&k);

     } while (k<0 || k>5000);

     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;

}

Результаты работы

Ввод/вывод данных. Ввод искомой точки, вычисление расстояние до ближайшей точки массива, замер времени поиска.

Для функции f_F

Для функции f_G

Загрузка данных из массива стурктур в среду Excel через файлы ArrVal.txt. Для правильного восприятия строчных данных и разбиения  строки на 3 столбца выполним преобразование строковых данных в табличный через функцию MS WORD  «ВСТАВКА» -> «ТАБЛИЦА» -> «ПРЕОБРАЗОВАТЬ В ТАБЛИЦУ»

График точек массива ArrValue_G. Аппроксимированная кривая, коэффициент корреляции

График точек массива ArrValue_F. Аппроксимированная кривая, коэффициент корреляции

График точек массива ArrValue_Y. Аппроксимированная кривая, коэффициент корреляции

Выводы по работе

В ходе выполнения лабораторной работы я изучил особенности  написания  программы  на языке ANSI C, в основе которой лежит алгоритм структуры и  работа с файлами. Также была выполнения загрузка данных в среду Excel получен тренд по исходным данным, подобрана аппроксимирующая кривая, найден коэффициент корреляции. Найденный коэффициент оказался близкий к 1, что означает о тесной функциональной связи значений  ординаты с аргументом.


 

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

32141. Производственная стратегия как подсистема корпоративных стратегий 27.5 KB
  Производственная стратегия это подсистема корпоративной стратегии представленная в виде долгосрочной программы конкретных действий по созданию и реализации продукта организации; подсистема предусматривает использование и развитие всех производственных мощностей организации в целях достижения стратегического конкурентного преимущества. Для многих промышленных компаний производство того или иного продукта как правило является наиболее сложной и масштабной деятельностью. При системной оценке производственных затрат как для...
32142. Стратегия управления персоналом 28.5 KB
  Стратегия управления персоналом Стратегия управления персоналом это подсистема стратегии организации представленная в виде долгосрочной программы конкретных действий по реализации концепции использования и развития потенциала персонала организации в целях обеспечения ее стратегического конкурентного преимущества. Стратегия использования и развития потенциала персонала наряду с продуктовомаркетинговой стратегией является ключевой функциональной стратегией организации. Стратегия реализующая принцип купить предполагает привлечение...
32143. Финансовая стратегия. Первичный формат. Особенности 32 KB
  Особенности Финансовая стратегия это подсистема корпоративной стратегии представленная в виде долгосрочной программы конкретных действий по использованию собственных и привлеченных внешних финансовых ресурсов в организации для достижения стратегического конкурентного преимущества. Первичный формат стратегии. Значение финансовой стратегии т. Определение основных целей финансовой стратегии.
32144. Основные этапы цикла реализации стратегии 31 KB
  Основные этапы цикла реализации стратегии Реализация стратегии в широком смысле это непрерывная цикличная деятельность когда одна корпоративная стратегия регулярно заменяется другой качественно новой. Другими словами при расширенном толковании понятия циклическая реализация стратегии и стратегический менеджмент понимаемая как постоянная профессиональная деятельность фактически совпадают. На стадии запуска корпоративной стратегии каждый уровень менеджмента организации должен решать свои особые задачи. Вовторых завершить...
32145. Сущность стратегической эффективности 32.5 KB
  Сущность стратегической эффективности и одну из коренных причин текущей и перспективной актуальности стратегического менеджмента раскрывает тезис: в современном бизнесе ошибки в стратегии неизбежно приводят к поражению в конкурентной борьбе и ослаблению позиций организации на рынке; при этом стратегические ошибки исправить сколь угодно эффективными приемами оперативного менеджмента нельзя в принципе. Основные задачи стратегической рефлексии: логическое завершение стратегии организации; предложения по совершенствованию...
32146. Стратегический и тактический контролинг 40.5 KB
  Современный контроллинг включает в себя управление рисками страховой деятельностью предприятий обширную систему информационного снабжения предприятия систему оповещания путём управления системой ключевых финансовых индикаторов управление системой реализации стратегического тактического и оперативного планирования и систему менеджмента качества. Стратегический контролинг координация функции стратегического анализа целеполагания планирования и коррекции стратегии; осуществление контроля за функционированием всей системы в целом;...
32147. Элементы сбалансированной системы показателей 24.5 KB
  Элементы сбалансированной системы показателей Основной принцип ССП который во многом стал причиной высокой эффективности этой технологии управления управлять можно только тем что можно измерить. ССП делает акцент на нефинансовых показателях эффективности давая возможность оценить такие казалось бы с трудом поддающиеся измерению аспекты деятельности как степень лояльности клиентов или инновационный потенциал компании. Авторы ССП предложили четыре направления оценки эффективности отвечающие на самые значимые для успешной деятельности...
32148. Задачи и функции подразделения стратегического развития 31 KB
  Перед отделом стратегического развития который должен функционировать на постоянной профессиональной основе стоят две главные задачи: Сведение всех стратегических наработок произведенную в первую очередь самим отделом а также другими по разделениями Организации в заданные определенным форматом проекты решений. Проекты в установление порядке представляются отделом в органы управления организации которые уполномочены принимать соответствующие стратегические решения. В большинстве организаций такими органами управления являются:...
32149. Стратегическая карта и стратегические темы ССП 29 KB
  Эти цели содержат в себе детальное отображение различных аспектов стратегии. Каплан и Нортон рассматривают следующие аспекты: Четкое формулирование стратегии Передачу стратегии внутрь всей компании Согласование стратегии компании с целями персонала Связывание целей с годовым бюджетом Идентификацию и согласование стратегических инициатив Выполнение регулярных проверок с помощью обратной связи и необходимых корректировок стратегии В рамках ССП необходимо различать показатели которые измеряют достигнутые результаты и показатели...