18587

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

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

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

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

Русский

2014-03-24

2.74 MB

11 чел.

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


 

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

18741. Формирование здорового образа жизни современной молодежи 26.35 KB
  Формирование здорового образа жизни современной молодежи. Понятие здоровье и здоровый образ жизни. Здоровый образ жизни совокупность духовных ценностей и реальных видов форм и благоприятных для здоровья эффектов деятельности по обеспечению оптимального удов
18742. Специфика деятельности специалиста по работе с молодежью в условиях детского оздоровительного лагеря 27.16 KB
  Специфика деятельности специалиста по работе с молодежью в условиях детского оздоровительного лагеря. Условия и порядок принятия на работу педагогических работников. Функции вожатого и воспитателя. Права обязанности и ответственность вожатого ребенка. Логика смены. ...
18743. Особенности работы с временным детским и молодежным коллективами 30.93 KB
  Особенности работы с временным детским и молодежным коллективами. Понятие временного коллектива. Особенности развития временного коллектива. Учет социальнопсихологических и гендерных особенностей детей и молодежи. Формы отрядных дел. Корпоративная культура малой гр...
18744. Организация и координация развития добровольческого (волонтерского) движения 25.71 KB
  Организация и координация развития добровольческого волонтерского движения. Нормативноправовая база регулирующая деятельность волонтерского движения. Волонтёрская деятельность это широкий круг деятельности включая традиционные формы взаимопомощи и самопом...
18745. Особенности занятости и трудоустройства молодежи 24.74 KB
  Особенности занятости и трудоустройства молодежи. Определение понятий занятость и трудоустройство. Роли на рынке труда. Виды занятости молодежи. Активные формы работы с выпускниками учебных заведений по вопросам занятости и трудоустройства. Определение понятия...
18746. Планирование и развитие карьеры молодого человека 25.09 KB
  Планирование и развитие карьеры молодого человека. Определение понятия карьера. Карьера успешное продвижение вперед в той или иной области деятельности. В широком понимании карьера это профессиональный прогресс профессиональный рост этапы продвижения служа
18747. Профессиональная ориентация молодёжи 26.18 KB
  Профессиональная ориентация молодёжи. Теоретические аспекты профессионального самоопределения молодежи. Проблема профессионального самоопределения стояла перед молодёжью всегда а сегодня она особенно актуальна так как быстро изменяющиеся условия рынка труда веду...
18748. Государственная семейная политика 25.83 KB
  Государственная семейная политика. Сущность цели задачи принципы и направления государственной семейной политики. Государственная семейная политика ГСП является составной частью социальной политики РФ и представляет собой систему принципов оценок и мер организа
18749. Молодая семья и ее характеристики 21.03 KB
  Молодая семья и ее характеристики. Определение функции особенности проблемы молодой семьи. Молодая семья относится к особым фундаментальным группам общества. Она одновременно является и социальной группой и социальным институтом. Ученым потребовалось немало времен...