Информатика программирование : Лабораторная работа: Программирование на языке Си++
Лабораторная работа: Программирование на языке Си++
Федеральное
агентство по образованию.
ГОУ ВПО
Уральский Государственный Технический Университет – УПИ имени первого
президента России Б. Н. Ельцина
Кафедра
теплофизики и информатики в металлургии.
Дисциплина:
Алгоритмизация и программирование.
Отчет
Лабораторная
работа №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[]){
//Объявление переменных и
исходные данные
float a1=100,b1=0.001,c1;
double a2=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");
return EXIT_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;}
Результат выполнения
программы:
Enter size:>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[]){
int s=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]='\0';}}
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=='\0'){
if(t[0]>'9'){if(r){
strcat(str,t);strcat(str,"
");}
} t[j]='\0';
j=0;ClearString(t);break;}
else {t[j]=c;j++;}
}while(1);
}while(c!='.'&&c!='\0');
printf("Right
identifiers:\n");
puts(str);
system("PAUSE");
return EXIT_SUCCESS;}
Исходные данные:
A1 1F Number 111 b 123c5 fff t.
Результат выполнения
программы:
Enter text> A1 1F Number 111 b 123c5 fff t.
Right identifiers:
A1 Number b
fff t
|