Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные рабоы 2013г.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
162.82 Кб
Скачать

Случайные числа

Для получения случайных чисел служит функция rand(). Параметров у нее нет. Она возвращает случайное число от 0 до значения констаны RAND_MAX. Как правило, эта константа равна 32767 (2 в 15-степени минус 1). Функция rand() (как и константа RAND_MAX) описана в файле stdlib.

#include <stdlib.h>

Пример использования функции rand():

int k;

k=rand();

Функция rand() будет постоянно возвращать одну и ту же последовательность случайных чисел. Это очень удобно на этапе отладки программы - если программа выдает ошибку, то эту ошибку легче воспроизвести при одних и тех же случайных числах. Реальная же программа должна, как правило, возвращать разные последовательности случайных чисел. Это делаем через функцию srand, которая принимает целый параметр, определяющий, какая конкретно последовательность случайных чисел у нас будет выдаваться функцией rand. Функцию srand достаточно вызвать только один раз в начале программы. Правда, в srand мы должны в качестве параметра подставить случайное число, но его можно получить, например, из текущего времени. Пример:

#include <time.h>

...

srand((unsigned)time(NULL));

cout<<rand()<<"\n";

Примеры программ

Первая программа (дань традиции)

#include "stdafx.h"

#include <stdio.h>

void main()

{

printf("\nHello, World!\n");

}

Или

#include "stdafx.h"

#include <iostream>

using namespace std;

void main()

{

cout << "Hello, World!" << endl;

}

Пример итеративной функции вычисления факториала

#include <stdio.h>

unsigned long fact(unsigned long n)

{

unsigned long ret=l;

while (n>0)

{

ret*=n;

n--;

};

return ret;

}

void main(void)

{

unsigned long n;

printf ("\nЧисло? (<=12) ") ;

scanf("%ld", &n) ;

printf ("Факториал %ld = %ld" , n, fact (n) ) ;

}

Пузырьковая сортировка

#include "stdafx.h"

#include <iostream>

#include <time.h>

using namespace std;

const int kol=10;//размерность массива

void main()

{

srand((unsigned)time(NULL));

int mas[kol];

int buf;

for(int i=0;i<kol;i++){

mas[i]=rand();

cout<<mas[i]<<"\t";

}

for(int j=0;j<kol;j++){

for(int i=kol-1;i>j;i--){

if(mas[i-1]>mas[i])

{

buf=mas[i];

mas[i]=mas[i-1];

mas[i-1]=buf;

}

}

}

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

cout<<mas[i]<<"\t";

}

Пример рекурсивной функции вычисления факториала

#include <stdio.h>

unsigned long fact(unsigned long n)

{

if (!n) return 1;

else return n*fact(n-1);

}

void main(void)

{

unsigned long n;

printf("\nЧисло? (<=12)");

scanf("%ld",&n) ;

printf("Факториал %ld = %ld",n,fact(n));

}

Перевод десятичного числа в систему счисления с другим основанием (меньшим 10)

#include <stdio.h>

void translate(int n, int p)

{

if (n>=p) translate(n/p,p) ;

printf("%d",n%p) ;

}

void main (void)

{

int n,p;

printf( "n\Число?") ;

scanf("%d", &n) ;

printf ("Основание системы счисления?");

scant("%d",&p);

translate(n,p) ;

printf("\n") ;

}

Получение двоичной записи числа с использованием битовых операций

#include <stdio.h>

char bit (int n, int pos)

{

return (n>>pos)&l;

}

void translate2(int n)

{

int pos=15;

while (!bit(n,pos)) pos--;

while (pos>=0)

{

printf("%d",bit(n,pos));

pos--;

}

}

void main (void)

{

int n;

printf("\nЧисло?");

scanf("%d",&n) ;

printf("Двоичное представление:");

translate2(n) ;

printf ("\n") ;

}

Пример функции вычисления квадратного корня

#include <stdio.h>

#include <math.h>

float root2 (float x)

{

float e=lE-10, xn, xnplusl=x;

do

{

xn=xnplus1;

xnplus1=0.5*(xn+x/xn) ;

}

while (fabs(xn-xnplus1)>e) ;

return xnplus1;

}

void main(void)

{

float х;

printf ("\nЧисло?");

scant("%f",&x) ;

printf("Наша функция возвращает: %f",root2(x);

printf("\nФункция sqrt возвращает: %f",sgrt(x));

}

Пример функции вычисления площади треугольника

Заданы координаты сторон треугольника. Если такой треугольник существует, то найти его площадь.

#include "stdafx.h"

#include <math.h>

///////функция возвращает длину отрезка,

/////////заданного координатами x1,y1 и x2,y2///////

double line(double x1,double y1,double x2,double y2)

{

return sqrt(pow(x1-x2,2)+pow(y1-y2,2));

}

//функция возвращает площадь треугольника, //

/////заданного длинами сторон а,b,c//////

double square(double a, double b, double c)

{

double s, p=(a+b+c)/2;

return s=sqrt(p*(p-a)*(p-b)*(p-c));//формула Герона

}

//возвращает true, если треугольник существует//

bool triangle(double a, double b, double c)

{

if(a+b>c&&a+c>b&&c+b>a)

return true;

else return false;

}

void main()

{

double x1=1,y1,x2,y2,x3,y3;

double point1_2,point1_3,point2_3;

do

{

cout<<"\nEnter koordinats of triangle:";

cin>>x1>>y1>>x2>>y2>>x3>>y3;

point1_2=line(x1,y1,x2,y2);

point1_3=line(x1,y1,x3,y3);

point2_3=line(x2,y2,x3,y3);

if(triangle(point1_2,point1_3,point2_3)==true)

cout<<"S="<<square(point1_2,point2_3,point1_3)<<"\n";

else cout<<"\nTriagle doesnt exist";

}

while(!(x1==0&&y1==0&&x2==0&&y2==0&&x3==0&&y3==0));

}

1 Это один из стандартных типов системы Windows, совпадающий по значению с типом bool языка C++.