
- •Лабораторный практикум по дисциплине Алгоритмические языки и программирование
- •Общие указания к выполнению лабораторных работ
- •Лабораторная работа №1 Программирование алгоритмов линейной и разветвляющейся структуры. Организация циклов в программе. Составление выражений
- •Лабораторная работа №2 Работа с массивами. Одномерные статические массивы. Многомерные динамические массивы
- •Лабораторная работа №3 Работа со строками. Динамические одномерные массивы
- •Лабораторная работа №4 Работа со структурами. Вложенные структуры. Массивы структур
- •Приложения
- •1. Комментарии
- •2. Идентификаторы (имена)
- •3. Ключевые слова
- •4.Константы
- •4.1 Целые константы
- •4.2 Явно заданные длинные константы
- •4.3 Символьные константы
- •4.4 Константы с плавающей точкой
- •5. Основные типы
- •6. Производные типы
- •7. Некоторые операции языка
- •8. Основные операторы
- •Приложение б. «Функции стандартной библиотеки»
- •Случайные числа
- •Примеры программ
Случайные числа
Для получения случайных чисел служит функция 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++.