Министерство образования и науки РФ
Новосибирский Государственный Технический Университет
Кафедра ПВТ
Лабораторная работа №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);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.