18171

Структуры языка ANSI C, операции над структурами

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

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

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

Русский

2014-03-24

1.07 MB

1 чел.

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

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

Лабораторная работа № 6. Структуры

Цель работы

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

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

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

Задание

Модифицировать программу из лабораторной работы № 5 с учетом

следующих требований:

- Организовать ввод начального и конечного значений аргумента и параметра, количество шагов расчета функций G, F, Y в виде строк; использовать

функции преобразования из строки в число;

- Исключить из программы выбор пользователем функции, подлежащей расчету;

- Рассчитанные значения G, F, Y хранить в массиве структур;

- Организовать вывод результатов расчета.

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

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

 

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

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <conio.h>

#include <string.h>

const double PI = 3.14159265;

//float arr[2][100];

char Res[1024];

struct ArrValue {

 int ID;

 float Argument;

 float Ordinata;

   } ;

struct ArrValue ArrValue_F[100];

struct ArrValue ArrValue_G[100];

struct ArrValue ArrValue_Y[100];

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

 

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

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

 return;

}

void vvod_dannih()

{

 int ch;

 int k;

 float a,x1,x2;

 

   system("cls");

 printf("Program from Work with Struct. Calculation 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()

{

 vvod_dannih();

 system("pause");

 return 0;

}

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

Ввод/вывод данных

Значение структуры ArrValue_G


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

В ходе выполнения лабораторной работы я изучил особенности  написания  программы  на языке ANSI C, в основе которой лежит алгоритм структуры и  операции со структурами.


 

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

17390. СОЦИОЛОГИЯ ЭМИЛЯ ДЮРКГЕЙМА 172.5 KB
  Лекция шестаяСОЦИОЛОГИЯ ЭМИЛЯ ДЮРКГЕЙМА Содержание Жизненный путь ученого Интеллектуальные истоки дюркгеймовской социологии Социологизм как философское обоснование социологии В поисках социальной солидарности: от теории разделения труда к теории ...
17391. СОЦИОЛОГИЯ ВИЛЬФРЕДО ПАРЕТО 130.5 KB
  Лекция седьмаяСОЦИОЛОГИЯ ВИЛЬФРЕДО ПАРЕТО Содержание Жизнь и научная деятельность Идейные истоки и особенности мировоззрения Социология как логикоэкспериментальная наука Логические и нелогические действия Осадки и производные Общество как система в
17392. Линия. Пространственные кривые лини 93 KB
  Линия. Пространственные кривые лини В начертательной геометрии кривую линию часто рассматривают как траекторию описанную движущейся точкой. Кривая линия может быть плоской или пространственной. Все точки плоской кривой принадлежат некоторой плоскости. Крив...
17393. Взаимное положение прямых в пространстве 60.5 KB
  Взаимное положение прямых в пространстве. Рассмотрим взаимное положение прямых в пространстве : параллельные прямые пересекающиеся и скрещивающиеся. Параллельные прямые. Параллельные прямые это прямые лежащие в одной плоскости и никогда ...
17394. Плоскость, линии и точки в плоскости 73.5 KB
  Плоскость линии и точки в плоскости. Проецирование элементов определяющих плоскость. При ортогональном проецировании любая плоскость может быть задана на чертеже проекциями трех точек не лежащих на одной прямой ; проекциями прямой и точки не лежащей на данно...
17395. ВЗАИМНОЕ ПОЛОЖЕНИЕ ПРЯМЫХ И ПЛОСКОСТЕЙ 64.5 KB
  ВЗАИМНОЕ ПОЛОЖЕНИЕ ПРЯМЫХ И ПЛОСКОСТЕЙ Прямая параллельная плоскости. Если прямая АВ параллельна прямой лежащей в некоторой плоскости то она параллельна этой плоскости. Если необходимо через заданную точку провести прямую параллельную заданной плоскости необ
17396. ПОВЕРХНОСТИ И ТЕЛА 70.5 KB
  ПОВЕРХНОСТИ И ТЕЛА Все поверхности можно подразделить на графические закон образования которых нам не известен и примером такой поверхности может быть топографическая поверхность Земли и геометрические закон которых известен. Часть пространства ограниченная
17397. ПОВЕРХНОСТИ И ТЕЛА. Циклические поверхности 74.5 KB
  ПОВЕРХНОСТИ И ТЕЛА Циклические поверхности Циклические поверхности могут быть образованы движением в пространстве какой либо окружности постоянного или переменного радиуса при перемещении ее центра по криволинейной направляющей а плоскость окружности ост
17398. Винтовые поверхности 53 KB
  Винтовые поверхности. Винтовой поверхностью называется поверхность которая описывается образующей при ее винтовом движении. Образующие могут быть как кривыми так и прямыми линиями. Прямые линии обычно называются винтовыми параллелями. Расстояние между винтов