Использование оптимизирующего компилятора (Лабораторная работа № 1)

Страницы работы

11 страниц (Word-файл)

Содержание работы

Министерство образования и науки РФ

Новосибирский Государственный Технический Университет

Кафедра ПВТ

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

Тема

«Использование оптимизирующего компилятора»

Факультет: ПМИ

Группа: ПМ-52

Студент: Тлеукенов Т.Б.

Новосибирск 2006г.


1.Условия задач.

1.  Вычисление числа Пи по формуле:

,

Параметр: N – число итераций.

2.  Вычисление определенного интеграла методом трапеций:

,     f(x)=exsin(x),  a = 0, b = π.

Параметр: N – число интервалов.

3.  Сортировка методом пузырька.

Дан массив случайных чисел длины N. На первой итерации попарно упорядочиваются все соседние элементы (1-й – 2-й, 2-й – 3-й, 3-й – 4-й, …); на второй – все, кроме последнего; на третьей – кроме последнего и предпоследнего и т.д.

Параметр: N – размер массива.

4.  Вычисление числа Пи методом Монте-Карло:

Генерируется N точек (x;y), равномерно распределенных на квадрате [0;1]x[0;1]. Вычисляется M – число точек, попавших в четверть круга с радиусом 1 (x2+y2≤1). Число Пи приближенно вычисляется по формуле: . Параметр: N – число точек.

5.  Вычисление функции sin(x) в M точках отрезка [0;2π].

Указанный отрезок разбивается на M точек, затем в каждой точке считается значение функции по формуле , где N – число итераций 

6.  Вычисление функции cos(x) в M точках отрезка [0;2π].

Указанный отрезок разбивается на M точек, затем в каждой точке считается значение функции по формуле , где N – число итераций

7.  Вычисление функции exp(x) в M точках отрезка [0;1].

Указанный отрезок разбивается на M точек, затем в каждой точке считается значение функции по формуле , где N – число итераций

8.  Вычисление функции ln(1+x) в M точках отрезка [0;1].

Указанный отрезок разбивается на M точек, затем в каждой точке считается значение функции по формуле , где N – число итераций.


2.Тексты программ.

Задача №1

#include <d:\borland\bc\include\stdio.h>

#include <d:\borland\bc\include\time.h>

#define N 100000000

float pi()

{

   float p = 4,i = 3,zn = -1;

   int k;

   for(k = 0;k<N-1;k++)

   {

      p = p+zn*4/i;

      zn = zn*(-1);

      i = i+ 2;

   }

   return p;

}

void main()

{

   float x;

   clock_t start,end;

   start = clock();

   x = pi();

   end = clock();

   printf("Time was %f \npi:%f",(end - start)/CLK_TCK,x);

}


Задача №2

#include <d:\borland\bc\include\stdio.h>

#include <d:\borland\bc\include\time.h>

#include <d:\borland\bc\include\math.h>

#define N 700

long double integral(void)

{

   long a = 0,k;

   float b = M_PI;

   long double I = 0;

   for(k = 0;k<N-1;k++)

      I = I + (exp(k)*sin(k) + exp(k +1)*sin(k + 1))/2;

   I = I*(b - a)/N;

   return I;

}

void main()

{

   long double x;

   clock_t start,end;

   start = clock();

   x = integral();

   end = clock();

   printf("Time was %f,x: %f",(end-start)/CLK_TCK,x);

}

Задача №3


#include <d:\borland\bc\include\stdlib.h>

#include <d:\borland\bc\include\stdio.h>

#include <d:\borland\bc\include\time.h>

#define N 19999

void sort(int m[])

{int i,j,b;

for (i=0;i<N;i++)

for (j=0;j<N-i;j++)

if(m[j]>m[j+1]) { b=m[j+1]; m[j+1]=m[j]; m[j]=b;}

}

void main()

{

int m[N],b,i,j;

clock_t start, end;

randomize();

for (i=0;i<N;i++)

{

m[i]=rand();

//printf("%d,",m[i]);

}

start = clock();

sort(m);

end = clock();

printf("\n");

//for (i=0;i<N;i++)

//printf("%d,",m[i]);

printf("The time was: %f\n", (end - start)/CLK_TCK);

}





Задача4

#include <stdio.h>

#include <time.h>

#include <stdlib.h>

#define N 9000

float pi(void)

{

   int i,M = 0;

   float x[N],y[N];

   randomize();

   for(i = 0;i<N-1;i++)

   {

      x[i] = 1/(random(100) + 1);

      y[i] = 1/(random(100) + 1);

      if(x[i]*x[i]+y[i]*y[i]<=1)

         M++;

   }

   return 4*M/N;

}

void main()

{

   float x;

   clock_t start,end;

   start = clock();

   x = pi();

   end = clock();

   printf("Time was %f\npi:%f",(end - start)/CLK_TCK,x);

}




Задача №5


#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <math.h>

#define N 1000000

#define M 100

void sinus(float res[])

{int i,j,f=1,k=1;

float xy,x,r=0;

randomize();

for(i=0;i<M;i++)

   {

      x = 2.0*M_PI/(random(M)+1);

      xy=x;

      for (j=0;j<N/4;j++)

      {

        r=r+xy/(k)*f;

        k=k+2; xy=xy*x*x; f=f*(-1);

      }

      res[i] = r;

   }  

}

void main()

{

   float res[M];

   int i;

   clock_t start,end;

   start = clock();

   sinus(res);

   end = clock();

   for(i = 0;i<M;i++)

      printf("sin = %f\n",res[i]);

   printf("Time was %f",(end - start)/CLK_TCK);

}



Задача №6

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

#include <time.h>

#define N 1000000

#define M 100

void cosinus(void)

{int i,j,k=0;

 float r=1,xy,x;

 for(i=0;i<M;i++)

   {

      x = 2*M_PI/(random(M)+1);

      for (j=0;j<N/4;j++)

      {

        k++; xy=xy*x;

        r=r-xy/(2*k)+xy*x*x/(2*k*(k+1)*(k+2));

      }

   }  

}

void main()

{

   clock_t start,end;

   randomize();

   start = clock();

   cosinus();

   end = clock();

   printf("Time was %f",(end - start)/CLK_TCK);

Похожие материалы

Информация о работе