Главная Учебники - Разные Лекции (разные) - часть 33
|
Федеральное агентство по образованию. ГОУ ВПО Уральский Государственный Технический Университет – УПИ имени первого президента России Б. Н. Ельцина Кафедра теплофизики и информатики в металлургии. Дисциплина: Алгоритмизация и программирование. Отчет
Лабораторная работа №1
"Знакомство с Си++. Выполнение программы простой структуры"
Вариант 9. Преподаватель: Степура А. А. Студент гр. Мт-190503: Свиткин В. Г. Екатеринбург, 2009 Цель:
Знакомство со средой программирования, создание, отладка и выполнение простой программы, содержащей ввод/вывод информации и простейшие вычисления. Задачи:
1) вычислить значение выражения при различных вещественных типах данных: float и double. Сравнить и объяснить полученные результаты. 2) Вычислить значения выражений. Объяснить полученные результаты. Задание 1.
Вычислить значение выражения при различных вещественных типах данных (float и double). Вычисления следует выполнять с использованием промежуточных переменных. Сравнить и объяснить полученные результаты. Текст программы:
#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). Для сравнения найти точное значение функции. Функция: Диапазон 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]='\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 1FNumber 111 b 123c5 ffft. Результат выполнения программы:
Entertext> A1 1FNumber 111 b 123c5 ffft. Right identifiers:
| ||||||||||