Теоретические положения

{/*тело*/ }

Пример. Из текстового потока ввести информацию о студентах и записать ее в виде дерева. Отсортировать или по фамилии, или по баллу (вывести тех студентов, у которых балл выше среднего). Использовать потоки ввода-вывода и шаблоны.

#include <iostream.h>

#include <conio.h>

#include <fstream.h>

struct Student{

int num;

char surname[10];

int group;

int balls;

friend ostream &operator<< (ostream &stream, Student stud){

stream << " " << stud.num << " " << stud.surname << " " << stud.group

<< " " << stud.balls;

return stream;

}

friend istream &operator>> (istream &stream, Student &stud){

stream >> stud.num >> stud.surname >> stud.group >> stud.balls;

return stream;

}

};

struct node{

Student info;

node *nextl, *nextr;

node (){

info.num = info.group = info.balls=0;

nextl = nextr = 0;

}

node (Student newinfo){

info = newinfo;

nextl = nextr = 0;

}

};

template <class T, class T1> class tree{

public:

T *root;

tree() { root = 0; }

void push (T *& wer, T1 dat, int n){

if (wer == 0){

try{

wer = new T;

if(!wer) throw 1;

wer->nextl = 0; wer->nextr = 0; wer->info = dat;

}

catch (int mthrow) {cout<<”No memory!”<<endl;return;}

}

else if (n == 1)

if (strcmp(dat.surname,wer->info.surname) < 0) push (wer->nextl, dat, 1);

else push (wer->nextr, dat, 1);

else

if (dat.balls > wer->info.balls) push (wer->nextl, dat, 2);

else push (wer->nextr, dat, 2);

}

void insert (T1 dat, int n){

if (root == 0) root = new T(dat); else push (root, dat, n);

}

void look (ostream &stream, T *&wer){

if (wer!= 0){

look (stream, wer->nextl);

stream << " " << wer->info << endl;

look (stream, wer->nextr);

}

}

friend ostream &operator<< (ostream &stream, tree ob)

{ ob.look (stream, ob.root); return stream; }

};

void main(){

int m;

do{

cout << "1. Sort with names\n";

cout << "2. Sort with balls\n";

cout << "3. Exit\n";

cin >> m;

switch (m){

case 1: {

tree<node, Student> q;

node *n;

ifstream infile("stud.txt");

while(!infile.eof()){

Student c;

infile >> c;

q.insert(c, 1);

}

infile.close();

cout<<q;

break;

}

case 2: {

tree<node, Student> q;

node *n;

ifstream infile("stud.txt");

Student *c;

c = new Student;

int i = 1;

float s = 0;

while(!infile.eof()){

infile >> c[i];

s+=c[i].balls;

i++;

}

for (int j=1; j<=i; j++)

if (c[j].balls > s/i)

q.insert(c[j], 2);

infile.close();

cprintf(" Miide ball is %1.3f",s/i);

cout<<'\n' << q;

break;

}

case 3: {return;}

default: {cout<<"Error! Try again\n"; break;}

}

getch();

clrscr(); }

while(m!= 3);

return;}

Задания для самостоятельного решения

При выполнении приводимых ниже заданий можно использовать классы, разработанные в лабораторных работах № 1–3. Осуществлять контроль состояния потоков. В случае возникновения ошибок потоков генерировать и обрабатывать исключительные ситуации. Для соответствующих классов перегрузить операции вставки в поток и извлечения из потока. При динамическом выделении памяти предусмотреть обработку исключения, возникающего при нехватке памяти.

I

а) Для класса Student (лаб. работа № 1) предусмотреть ввод данных из файла. Полученные при выполнении лаб. работы № 1 списки студентов вывести в файл.

То же задание для классов:

б) Abiturient (лаб. работа №1);

в) Aeroflot (лаб. работа № 1);

г) Worker (лаб. работа № 1);

д) Train (лаб. работа № 1);

е) Product (лаб. работа № 1);

ж) Patient (лаб. работа № 1);

з) Bus (лаб. работа № 1);

и) Customer (лаб. работа № 1);

к) File (лаб. работа № 1);

л) Word (лаб. работа № 1);

м) House (лаб. работа № 1);

н) Phone (лаб. работа № 1);

о) Person (лаб. работа № 1).

II

а) При выполнении задания № 1 лаб. работы № 2 (класс Com­plex) предусмотреть формирование массива объектов путем считывания комплексных чисел из файла. Результат также вывести в файл.

То же задание для классов:

б) Fraction (лаб. работа № 2);

в) Vector (лаб. работа № 2). Предусмотреть обработку исключения при динамическом выделении памяти;

г) Matrix (лаб. работа № 2);

д) Polynom (лаб. работа № 2);

е) Stack (лаб. работа № 2);

ж) Строка (лаб. работа № 2);

з) Set (лаб. работа № 2);

и) «Массив строк» (зад. № 10 лаб. работы № 2);

к) «Булев вектор» (лаб. работа № 2);

л) «Троичный вектор» (лаб. работа № 2);

м) «Булева матрица» (лаб. работа № 2).

III

Те же задания, что и в разделах I и II, но для классов, реализующих работу с динамическими структурами данных (см. лаб. работу № 3).

Тесты

1. Если имеется код char a[8]; cin>>a; и вводится текст “Hello World”, то что будет в массиве a?

Варианты ответа:

1) “Hello W”; 2) “Hello Wo”; *3) “Hello”; 4) “Hello World”; 5) “lo World”.

2. Что будет выведено в результате

double x=12.4;

cout<<setw(5)<<x<<setw(3)<<setfill(‘*’)<<””<<endl;?

Варианты ответа:

1) 12.40***; *2) 12.4***; 3) 12.4 ***; 4) 12.40; 5).124e2***.

3. Если имеется код int x; cin>>x; и вводится “1.2”, что будет в перемен­ной x?

Варианты ответа:

*1) 1; 2) 2; 3) 1.2; 3) другое; 4) произойдет ошибка.

4. Какой из классов используется для вывода строк на экран?

Варианты ответа:

1) strstream; *2) ostream; 3) ofstream; 4) istream; 5) ifstream.

5. Каким будет результат работы программы:

#include <iostream.h>

void main (){

char A[]=”ABC”;

char *U=&A[2];

cout<<”\n”<<*U--<<*U--<<*U<<endl; }?

Варианты ответа:

1) BAA; *2) CBA.

6. Если имеется код double x; cin>>x; и вводится “12-3”, то что бу­дет в пе­ре­менной x?

Варианты ответа:

1) 9.0; *2) 12.0; 3) другое; 4) произойдет ошибка.

7. Для того, чтобы выполнить чтение из файла с произвольной по­зиции, надо использовать объект класса:

1) strstream; 2) ostream; 3) ofstream; 4) istream; *5) ifstream.

8. Что будет выведено при выполнении оператора throw C, если заданы классы

class A {…};

class B: public A {…};

class C: public A {…};

а обработка исключительной ситуации записана

catch (B&b) {cout<<1;}

catch (C&c) {cout<<2;}

catch (A&a) {cout<<3;}

catch (…) {cout<<4;}?

Варианты ответа:

1) 1; *2) 2; 3) 3; 4) 4; 5) 34; 6) 234.

9. Если в конструкторе класса

class A {

char *ptr;

public:

A () {ptr=new char [size]; Init ();}

~A () { if (ptr) delete [] ptr;}

};

произойдет исключительная ситуация, будет ли потеряна память при откате по стеку?

Варианты ответа:

1) да, будет во всех случаях; 2) будет, только если объект класса созда­вался с помощью new; *3) будет, если создавалась автома­тическая пере­менная класса A; 4) нет, не будет.

10. Об ошибке в конструкторе класса может сигнализировать:

1) возвращаемое значение; *2) исключительная ситуация; 3) вы­зов дест­руктора сразу в конструкторе.

11. Что будет выведено, если заданы классы

class A {…};

class B: public A {…};

class C: public A {…};

а операторы throw и catch записаны так:

throw A;

catch (B&b) {cout<<1;}

catch (C&c) {cout<<2;}

catch (A&a) {cout<<3;}

catch (…) {cout<<4;}?

Варианты ответа:

1) 1; 2) 2; *3) 3; 4) 4; 5) 34; 6) 234.

12. Оператор throw без аргументов

*1) повторно вызывает обрабатываемую исключительную си­туацию;

2) вызывает исключительную ситуацию типа Exception.

13. Что будет выведено, если заданы классы

class A {…};

class B: public A {…};

class C: public B {…};

а операторы throw и catch записаны так:

throw C;

catch (B&b) {cout<<1;}

catch (C&c) {cout<<2;}

catch (A&a) {cout<<3;}

catch (…) {cout<<4;}?

Варианты ответа:

*1) 1; 2) 2; 3) 3; 4) 4; 5) 1234; 6) 234.

ЛИТЕРАТУРА

1. Страуструп, Б. Язык программирования С++/ Б. Страуструп. СПб.:БИНОМ, 1999.

2. Шилдт, Г. Самоучитель С++/ Г. Шилдт. 3-е изд. СПб.:BXV-Петербург, 2002.

3. Эккель, Б. Философия С++. Введение в стандартный С++/ Б. Эккель. 2-е изд. СПб.:Питер, 2004.

4. Эккель, Б. Философия С++. Практическое программирование/ Б. Эккель, Ч. Эллисон. СПб.:Питер, 2004.

5. Павловская, Т.А. С++. Объектно-ориентированное программиро­вание: Практикум/ Т. А. Павловская, Ю. А. Щупак. СПб.:Питер, 2004.

6. Глушаков, С.В. Язык программирования С++/ С. В. Глушаков, А. В. Коваль, С. В. Смирнов. Харьков:Фолио, 2002.

7. Фридман, А. Л. Язык программирования С++. Курс лекций/ А. Л. Фридман. М.:ИНТУИТ, 2003.

СОДЕРЖАНИЕ

Лабораторная работа № 1. Тема. Простейшие классы и объекты 3

Лабораторная работа № 2 Тема. Разработка классов................. 9

Лабораторная работа № 3. Тема. Классы для работы с динамическими структурами данных.............................................................................. 19

Лабораторная работа № 4. Тема. Шаблоны классов................. 26

Лабораторная работа № 5. Тема. Наследование....................... 33

Лабораторная работа № 6. Тема. Потоки, обработка исключительных ситуаций в C++.......................................................................................... 44


Учебное издание

Романчик Валерий Станиславович

Люлькин Аркадий Ефимович

С++. ЛАБОРАТОРНЫЕ РАБОТЫ

по курсу «Методы программирования»

Учебно-методическое пособие

для студентов механико-математического

факультета

Технический редактор __

Корректор

Ответственный за выпуск В. В. Власова

Подписано в печать __.__.2005. Формат 60х84/16. Бумага офсетная. Печать офсетная.

Усл.печ.л. ____. Уч.-изд.л.. Тираж 100 экз. Зак.

Белорусский государственный университет.

Лицензия ЛВ №315 от 14.07.98.

220050, Минск, пр. Ф. Скорины,4.

Отпечатано в издательском центре БГУ.

220030, Минск, ул. Красноармейская, 6.

Теоретические положения.

Явление теплопроводности представляет собой процесс распространения тепловой энергии при непосредственном соприкосновении отдельных тел или внутри данного тела при наличии разности температур. Теплопроводность обусловлена движением атомов и молекул вещества. Основным законом теплопроводности является закон Фурье.

(1)

Согласно закону Фурье интенсивность переноса тепла в твердом теле, оцениваемая величиной теплового потока Q, определяется температурным градиентом grad(t) и значением коэффициента теплопроводности данного вещества l (Вт/м×К). Градиент температуры grad(t) зависит от параметров температурного поля в рассматриваемом теле.

Коэффициент теплопроводности l является теплофизическим параметром вещества, он характеризует способность материала проводить тепловую энергию. Для различных материалов коэффициент теплопроводности зависит от структуры, плотности, теплоемкости, температуры, давления имея определенные значения в данных условиях. Обычно для нижеперечисленных расчётов коэффициент теплопроводности находится по таблицам, в которых приводятся теплофизические свойства вещества.

Значение коэффициента теплопроводности определяется опытным путем на специальных лабораторных установках. Одним из применяемых в теплотехнике методов определения l является метод трубы или цилиндра.

Для определения теплопроводности материала цилиндрической стенки (рис.1.) при постоянном значении коэффициента l (в случае установившегося теплового состояния системы, когда температура во всех точках тела не меняется),можно использовать уравнение Фурье приведённое к виду:

, Вт/м (2)

где - разность температур между внутренней и внешней поверхностью трубы 0К:

- плотность теплового потока по длине трубы L, Вт/м.

В случае многослойной стенки, состоящей из слоев разных материалов, уравнение теплопроводности имеет вид:

,Вт/м (3)

Всякое покрытие горячей поверхности, которое способствует снижению потерь тепловой энергии в окружающую среду, называется тепловой изоляцией. Для тепловой изоляции могут быть использованы любые материалы с низким коэффициентом теплопроводности (газы, пористые материалы, асбест, пробка, стекловата, опилки и другие). Часто на практике изолируются трубопроводы, по которым движутся горячие среды. На (рис.2,) изображена наиболее простая схема однослойной изоляции трубопровода.

В общем случае уравнение, описывающее передачу тепла через отрезок изолированного трубопровода длиной L, будет иметь вид:

Q= , Вт (4)

Rиз называется термическим сопротивлением трубы с изоляцией. Величина Rиз складывается из термических сопротивлений процессов теплоотдачи и теплопроводности.

Без изоляции: R= (5)

С изоляцией: Rиз= = (6)

В выражении (5) и (6) входят коэффициенты теплопроводности материала трубы и изоляции l, lиз , а также коэффициенты теплоотдачи a1 и a2 , характеризующие процессы передачи тепла к стенке трубы от горячего теплоносителя с температурой tж1 и от изоляции со стороны окружающей среды tж2.

Рис. 1. Однородная цилиндрическая стенка Рис.2. Схема однослойной тепловой изоляции
  1-горячая среда; 2-стенка трубопровода; 3-тепловая изоляция.

Для снижения тепловых потерь нужно, чтобы термическое сопротивление изолированного трубопровода было выше, чем у оголенной трубы:

DR=Rиз – R > 0.

Решая это неравенство с учётом 5.5 и 5.6 относительно величины lиз , получим условие эффективности применения изоляции:

l*из < 0,5 × a2 × d2 , (7)

Если условие (7) не выполнимо, то надо выбрать другой материал, для которого lиз < l*из , иначе при его нанесении на трубопровод тепловые потери будут возрастать.

Рис.3. Зависимость тепловых потерь с поверхности трубопровода от диаметра изоляции:

1- правильный выбор материала; 2-неправильный выбор материала.

Наибольшие тепловые потери при неправильном выборе материала изоляции соответствуют критическому диаметру изоляции, определяемому по зависимости: (8)

Если рассчитанное значение критического диаметра меньше диаметра изолируемой трубы, то изоляция будет эффективной.

Описание экспериментальной установки.

Схема установки представлена на рис.4. Экспериментальная установка состоит из металлической трубы 1, покрытой слоем исследуемого изоляционного материала 2, которым является асбест.

Рис. 4. Схема экспериментальной установки:

1-металлическая труба; 2-слой изоляции; 3-нагревательный элемент; 4-термопары на внутренней поверхности изоляции; 5- термопары на наружной поверхности изоляции; 6-вольтметр; 7-автотрансформатор (ЛАТР); 8-амперметр; 9-измеритель температуры; 10-переключатель термопар; 11-ртутный термометр; 12-выключатель сети.

Нагрев трубы осуществляется нагревательным элементом 3, при этом для регулирование напряжения применяется лабораторный трансформатор (ЛАТР) 7. Для определения мощности, потребляемой нагревательным элементом, в цепь питания включен вольтметр 8.

Количество выделяемого в окружающую среду тепла через поверхность трубы определяется по расходу электрической энергии. Для снижения тепловых потерь торцы трубы закрыты тепловой изоляцией.

Температура испытываемого материала измеряется десятью хромель- капелевыми термопарами. Пять термопар (4) замеряют температуру на внутренней поверхности изоляции, а остальные пять термопар (5) – на наружной поверхности.

Вторичным прибором для измерения температуры является милливольтметр 9. Для последовательного подключения термопар к измерителю температур служит переключатель 10. Для определения температуры изоляции писпользуется тот же измеритель.

Измерение температуры окружающего воздуха проводится с помощью ртутного лабораторного термометра 11.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: