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

Лабораторная работа на тему Программирование на языке Си

Работа добавлена на сайт bukvasha.net: 2015-05-03

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 8.11.2024


Федеральное агентство по образованию.
ГОУ ВПО Уральский Государственный Технический Университет – УПИ имени первого президента России Б. Н. Ельцина
Кафедра теплофизики и информатики в металлургии.
Дисциплина: Алгоритмизация и программирование.
Отчет
Лабораторная работа №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

1. Реферат Виды безналичного расчета
2. Реферат на тему Взаимодействие государства и этноса
3. Реферат Правовой и социальный статус судей и народных заседателей
4. Реферат на тему Wiccan Religion Essay Research Paper The word
5. Реферат на тему Вячеслав Липинський і Дмитро Донцов дві концепції української державності
6. Реферат на тему Man Enough A Look At Male Oriented
7. Реферат на тему Шпоры по Истории первый курс ЧГУ
8. Реферат на тему Melissa Virus Essay Research Paper On Friday
9. Реферат на тему Авиационное страхование
10. Реферат на тему Child Abuse 2 Essay Research Paper Child