Программирование на языке Си++

Федеральное агентство по образованию.

ГОУ ВПО Уральский Государственный Технический Университет – УПИ имени первого президента России Б. Н. Ельцина

Кафедра теплофизики и информатики в металлургии.

Дисциплина: Алгоритмизация и программирование.

Отчет

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

“Знакомство с Си++. Выполнение программы простой структуры”

Вариант 9.

Преподаватель: Степура А. А.

Студент гр. Мт-190503: Свиткин В. Г.

Екатеринбург, 2009

Цель: Знакомство со средой программирования, создание, отладка и выполнение простой программы, содержащей ввод/вывод информации и простейшие вычисления.

Задачи: 1) вычислить значение выражения при различных вещественных типах данных: float и double. Сравнить и объяснить полученные результаты.

2) Вычислить значения выражений. Объяснить полученные результаты.

Задание 1. Вычислить значение выражения при различных вещественных типах данных (float и double). Вычисления следует выполнять с использованием промежуточных переменных. Сравнить и объяснить полученные результаты.

, при а=100, b=0.001

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

#include <cstdlib>

#include <iostream>

#include <math. h>

Int main(int argc, char *argv[]){

//Объявление переменных и исходные данные

Floata1=100,b1=0.001,c1;

Doublea2=100,b2=0.001,c2;

//Расчет значений выражения для типов floatи double

//Вывод результата с 15 знаками после запятой

Printf(” Float: “);

C1=(pow(a1+b1,4.0)-(pow(a1,4)+4*pow(a1,3)*b1) )/ (6 * a1 *a1 *b1* b1+ 4*a1*b1*b1+pow(b1,4) );

Printf(“%.15f”,c1);

Printf(“\nDouble: “);

C2=(pow(a2+b2,4)-(pow(a2,4)+4*pow(a2,3)*b2) )/ (6*a2*a2*b2*b2 +4*a2*b2*b2 + pow(b2,4) );

Printf(“%.15f”,c2);

System(“PAUSE”);

ReturnEXIT_SUCCESS; }

Результат выполнения программы:

Float: 0.993384063243866

Double: 0.993384430723606

Результаты совпадают с точностью до 6 знаков после запятой. Это происходит из-за того, что при вычислениях с типом float точность меньше, и при каждом вычислении накапливается погрешность. Вычисление с типом double точнее, чем с float.

Задание 2. Вычислить значения выражений. Объяснить полученные результаты.

N+++m

M– >n

N– >m

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

#include <cstdlib>

#include <iostream>

#include <math. h>

Int main(int argc, char *argv[]){

Int m=7,n=4,y;

Printf(“n=%d, m=%d\n”,n, m);

Y=++n*++m;

Printf(“++n*++m=%d\n”,y);

Printf(“n=%d, m=%d\n”,n, m);

Y=m++<n;

Printf(“m++<n=%d\n”,y);

Printf(“n=%d, m=%d\n”,n, m);

Y=n++>m;

Printf(“n++>m=%d\n”,y);

Printf(“n=%d, m=%d\n”,n, m);

System(“PAUSE”);

Return EXIT_SUCCESS; }

Результат выполнения программы:

N=4,m=7

++n*++m=40

N=5,m=8

M++<n=0

N=5,m=9

N++>m=0

N=6,m=9

Объяснение результата.

При выполнении первого действия сначала переменные увеличиваются на единицу, затем умножаются: 5 * 7 =40. При выполнении второго действия сначала идет сравнение переменных, после этого переменная m увеличивается на единицу. При выполнении третьего действия сначала переменные сравниваются, затем переменная n увеличивается на единицу.

Федеральное агентство по образованию.

ГОУ ВПО Уральский Государственный Технический Университет – УПИ имени первого президента России Б. Н. Ельцина

Кафедра теплофизики и информатики в металлургии.

Дисциплина: Алгоритмизация и программирование.

Отчет

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

” Использование основных операторов языка Си “

Вариант 9.

Преподаватель: Степура А. А.

Студент гр. Мт-190503: Свиткин В. Г.

Екатеринбург, 2009

Цель: Получение навыков в выборе и использовании операторов Си++; знакомство с итерационными процессами.

Задача: Используя оператор цикла, найти сумму элементов, указанных в задании. Результат напечатать, снабдив соответствующим заголовком.

Найти сумму ряда с точностью e=10-4 , общий член которого

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

#include <cstdlib>

#include <iostream>

#include <math. h>

#define E 10e-4 //точность

Int main(int argc, char *argv[]){

Int n=1;

Double s=0,a=1;

Do {a*=10.0/(n+1); //расчет следующего числа ряда по рекуррентной формуле

S+=a;n++;}

While(a>E); //выход из цикла при достижении нужной точности

Printf(“Суммаряда:%f\n”,s);

System(“PAUSE”);

Return EXIT_SUCCESS;}

Результат выполнения программы:

Сумма ряда: 2201.546404

Федеральное агентство по образованию.

ГОУ ВПО Уральский Государственный Технический Университет – УПИ имени первого президента России Б. Н. Ельцина

Кафедра теплофизики и информатики в металлургии.

Дисциплина: Алгоритмизация и программирование.

Отчет

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

” Вычисление функций с использованием их разложения в степенной ряд “

Вариант 9.

Преподаватель: Степура А. А.

Студент гр. Мт-190503: Свиткин В. Г.

Екатеринбург, 2009

Цель: Практика в организации итерационных и арифметических циклов.

Задача: Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд в двух случаях:

А) для заданного n;

Б) для заданной точности e (e=0.0001).

Для сравнения найти точное значение функции.

Вариант 9

Функция:

Диапазон x:

Число слагаемых ряда:

N=3

Формула для вычисления суммы:

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

#include <cstdlib>

#include <iostream>

#include <math. h>

#define A 0.1

#define B 0.8

#define E 10e-4

Int main(int argc, char *argv[]){

Float x, k=(B-A)/10.0,sn=0,se=0,t, y;

Int i, j,n=3;

For(x=A;x<=B;x+=k){

Sn=x;se=x;

For(i=1;i<=n;i++){

Sn+=pow(x,4*i+1)/(4*i+1);};

J=1;

Do {t=pow(x,4*j+1)/(4*j+1);

J++;se+=t;}

While(t>E);

Y=log((1.0+x)/(1.0-x))/4.0 + atan(x)/2.0;

Printf(“x=%.2f SN=%f SE=%f Y=%f\n”,x, sn, se, y);}

System(“PAUSE”);

Return EXIT_SUCCESS;}

Результат выполнения программы:

X=0.10 SN=0.100002 SE=0.100002 Y=0.100002

X=0.17 SN=0.170028 SE=0.170028 Y=0.170028

X=0.24 SN=0.240160 SE=0.240159 Y=0.240160

X=0.31 SN=0.310576 SE=0.310573 Y=0.310576

X=0.38 SN=0.381603 SE=0.381603 Y=0.381603

X=0.45 SN=0.453777 SE=0.453775 Y=0.453777

X=0.52 SN=0.527929 SE=0.527913 Y=0.527929

X=0.59 SN=0.605342 SE=0.605261 Y=0.605350

X=0.66 SN=0.688034 SE=0.688034 Y=0.688093

X=0.73 SN=0.779289 SE=0.779568 Y=0.779652

X=0.80 SN=0.884678 SE=0.886442 Y=0.886677

Федеральное агентство по образованию.

ГОУ ВПО Уральский Государственный Технический Университет – УПИ имени первого президента России Б. Н. Ельцина

Кафедра теплофизики и информатики в металлургии.

Дисциплина: Алгоритмизация и программирование.

Отчет

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

” Работа с одномерными массивами “

Вариант 9.

Преподаватель: Степура А. А.

Студент гр. Мт-190503: Свиткин В. Г.

Екатеринбург, 2009

Цель: Получение навыков обработки одномерных массивов.

Задача: (Вариант 9)

Сформировать одномерный массив целых чисел, используя датчик случайных чисел.

Распечатать полученный массив.

Удалить первый элемент с заданным значением.

Сдвинуть массив циклически на К элементов вправо.

Распечатать полученный массив.

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

#include <cstdlib>

#include <iostream>

#include <time. h>

Int main(int argc, char *argv[]){

Int i, j,x, k,size;

Srand(time(NULL));

Int a[100];

Int b[100];

Printf(“Enter size:>”);

Scanf(“%d”,&;size);

For(i=0;i<size;i++){

A[i]=rand()%100;printf(“%d “,a[i]);}

Printf(“\nEnter value to destroy:>”);scanf(“%d”,&;x);

For(i=0;i<size;i++){

If(a[i]==x){

For(j=i;j<size-1;j++){

A[j]=a[j+1];}

Size–;break;}}

For(i=0;i<size;i++){

Printf(“%d “,a[i]);}

Printf(“\nEnter K:>”);scanf(“%d”,&;k);

For(i=0;i<size;i++){

If((i+k)<size) {b[i+k]=a[i];}else {b[i+k-size]=a[i];}}

Printf(“Result:\n”);

For(i=0;i<size;i++){

Printf(“%d “,b[i]);}

Printf(“\n”);

System(“PAUSE”);

Return EXIT_SUCCESS;}

Результат выполнения программы:

Entersize:>10

50 17 89 6 52 0 60 30 44 21

Enter value to destroy:>89

50 17 6 52 0 60 30 44 21

Enter K:>3

Result:

30 44 21 50 17 6 52 0 60

Федеральное агентство по образованию.

ГОУ ВПО Уральский Государственный Технический Университет – УПИ имени первого президента России Б. Н. Ельцина

Кафедра теплофизики и информатики в металлургии.

Дисциплина: Алгоритмизация и программирование.

Отчет

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

” Функции и массивы”

Вариант 9.

Преподаватель: Степура А. А.

Студент гр. Мт-190503: Свиткин В. Г.

Екатеринбург, 2009

Цель: Организовать обработку массивов с использованием функций, научиться передавать массивы как параметры функций.

Задача: Используя функции, решить указанную задачу. Массив должен передаваться в функцию как параметр:

Вариант 9. Написать функцию для вычисления суммы элементов квадратной матрицы, которые расположены ниже главной диагонали. С ее помощью найти максимальное значение такой суммы в n матрицах.

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

#include <cstdlib>

#include <iostream>

#include <time. h>

#include <math. h>

#define SIZE 5

Static int a[SIZE][SIZE];

Void CreateArray(int a[SIZE][SIZE]){

Int i, j;

For(i=0;i<SIZE;i++){

For(j=0;j<SIZE;j++){

A[i][j]=rand()%100;}}}

Void PrintArray(int a[SIZE][SIZE]){

Int i, j;

For(i=0;i<SIZE;i++){

For(j=0;j<SIZE;j++){

Printf(“%d “,a[i][j]);}

Printf(“\n”);}}

Int MatrixSum1(int m[SIZE][SIZE]){

Int i, j,s=0;

For(i=1;i<SIZE;i++){

For(j=0;j<i;j++){

S+=m[i][j];}}

Return s;}

Int main(int argc, char *argv[]){

Ints=0,i, t,N;

N=atoi(argv[1]); //количество матриц N вводится в параметре командной строки

Srand(time(NULL));

For(i=1;i<=N;i++){

CreateArray(a);

PrintArray(a);

T=MatrixSum1(a);

Printf(“\nSumm:%d\n “,t);

If(t>s){s=t;}}

Printf(“\nMaximum %d\n”,s);

System(“PAUSE”);

Return EXIT_SUCCESS;}

Результат выполнения программы ( N =3):

0 72 91 65 7

59 23 13 17 77

55 16 74 40 85

18 56 19 89 63

20 87 49 89 35

Summ:468

30 92 77 90 68

40 72 79 7 91

16 46 34 78 0

9 7 57 33 60

5 31 2 71 84

Summ:284

47 22 56 36 57

19 27 1 5 75

25 67 52 35 73

90 0 34 9 78

99 27 48 33 59

Summ:442

Maximum 468

Федеральное агентство по образованию.

ГОУ ВПО Уральский Государственный Технический Университет – УПИ имени первого президента России Б. Н. Ельцина

Кафедра теплофизики и информатики в металлургии.

Дисциплина: Алгоритмизация и программирование.

Отчет

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

” Строки”

Вариант 9.

Преподаватель: Степура А. А.

Студент гр. Мт-190503: Свиткин В. Г.

Екатеринбург, 2009

Цель: Изучение символьных и строковых переменных и способов их обработки в языке Си.

Задача: Задана строка, состоящая из символов. Символы объединяются в слова. Слова друг от друга отделяются одним или несколькими пробелами. В конце текста ставится точка. Текст содержит не более 255 символов. Выполнить ввод строки, используя функцию Gets(s) и обработку строки в соответствии со своим вариантом.

Вариант 9 . Преобразовать строку так, чтобы все слова в ней стали идентификаторами, слова состоящие только из цифр – удалить.

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

#include <cstdlib>

#include <iostream>

#include <string. h>

Void ClearString(char string[255]){

Int i;

For(i=0;i<255;i++){string[i]='{prjdata}’;}}

Int main(int argc, char *argv[]){

Char str[255],s[255]=””,t[255]=””,c;bool r;

Int i=0,j=0;

Printf(“Enter text>”); gets(s);

Strcpy(str,””);

Do{r=false;

Do{c=s[i];i++;

If(c>’9′){r=true;}

If(c==’ ‘||c==’.’||c=='{prjdata}’){

If(t[0]>’9′){if(r){

Strcat(str, t);strcat(str,” “);}

} t[j]='{prjdata}’;

J=0;ClearString(t);break;}

Else {t[j]=c;j++;}

}while(1);

}while(c!=’.’&;&;c!='{prjdata}’);

Printf(“Right identifiers:\n”);

Puts(str);

System(“PAUSE”);

Return EXIT_SUCCESS;}

Исходные данные:

A1 1FNumber 111 b 123c5 ffft.

Результат выполнения программы:

Entertext> A1 1FNumber 111 b 123c5 ffft.

Right identifiers:

A1 Number b fff t


Программирование на языке Си++