Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
71
Добавлен:
26.05.2014
Размер:
41.24 Кб
Скачать

вШСТО уФТБХУФТБР. чЧЕДЕОЙЕ Ч СЪЩЛ уЙ++, лМБУУЩ A.noneline { font-family: Arial, Serif; text-decoration: none; } FONT.arial { font-family: Arial, Serif; } TD.arial { font-family: Arial, Serif; } TH.arial { font-family: Arial, Serif; } PRE { font-family: Monospace; color: navy; } SAMP { font-family: Monospace; color: navy; } TT { font-family: Monospace; color: navy; } VAR { font-family: Monospace; color: navy; }

уЕТЧЕТ РПДДЕТЦЙЧБЕФУС

гЕОФТПН йОЖПТНБГЙПООЩИ фЕИОПМПЗЙК

(095) 932-9212, 932-9213, 939-0783

E-mail: info@citforum.ru уЕТЧЕТ йОЖПТНБГЙПООЩИ фЕИОПМПЗЙК УПДЕТЦЙФ НПТЕ(!) БОБМЙФЙЮЕУЛПК ЙОЖПТНБГЙЙ 5.4 дТХЪШС Й пВЯЕДЙОЕОЙС 5.4.1 дТХЪШС 5.4.2 хФПЮОЕОЙЕ йНЕОЙ юМЕОБ 5.4.3 чМПЦЕООЩЕ лМБУУЩ 5.4.4 уФБФЙЮЕУЛЙЕ юМЕОЩ 5.4.5 хЛБЪБФЕМЙ ОБ юМЕОЩ 5.4.6 уФТХЛФХТЩ Й пВЯЕДЙОЕОЙС ч ЬФП ТБЪДЕМЕ ПРЙУЩЧБАФУС ЕЭЕ ОЕЛПФПТЩЕ ПУПВЕООПУФЙ, ЛБУБАЭЙЕУС ЛМБУУПЧ. рПЛБЪБОП, ЛБЛ РТЕДПУФБЧЙФШ ЖХОЛГЙЙ ОЕ ЮМЕОХ ДПУФХР Л ЪБЛТЩФЩН ЮМЕОБН. пРЙУЩЧБЕФУС, ЛБЛ ТБЪТЕЫБФШ ЛПОЖМЙЛФЩ ЙНЕО ЮМЕОПЧ, ЛБЛ НПЦОП ДЕМБФШ ЧМПЦЕООЩЕ ПРЙУБОЙС ЛМБУУПЧ, Й ЛБЛ ЙЪВЕЦБФШ ОЕЦЕМБФЕМШОПК ЧМПЦЕООПУФЙ. пВУХЦДБЕФУС ФБЛЦЕ, ЛБЛ ПВЯЕЛФЩ ЛМБУУБ НПЗХФ УПЧНЕУФОП ЙУРПМШЪПЧБФШ ЮМЕОЩ ДБООЩЕ, Й ЛБЛ ЙУРПМШЪПЧБФШ ХЛБЪБФЕМЙ ОБ ЮМЕОЩ. оБЛПОЕГ, РТЙЧПДЙФУС РТЙНЕТ, РПЛБЪЩЧБАЭЙК, ЛБЛ РПУФТПЙФШ ДЙУЛТЙНЙОЙТХАЭЕЕ (ЬЛПОПНОПЕ) ПВЯЕДЙОЕОЙЕ. 5.4.1 дТХЪШС рТЕДРПМПЦЙН, ЧЩ ПРТЕДЕМЙМЙ ДЧБ ЛМБУУБ, vector Й matrix (ЧЕЛФПТ Й НБФТЙГБ). лБЦДЩК УЛТЩЧБЕФ УЧПЕ РТЕДУФБЧМЕОЙЕ Й РТЕДПУФБЧМСЕФ РПМОЩК ОБВПТ ДЕКУФЧЙК ДМС НБОЙРХМСГЙЙ ПВЯЕЛФБНЙ ЕЗП ФЙРБ. фЕРЕТШ ПРТЕДЕМЙН ЖХОЛГЙА, ХНОПЦБАЭХА НБФТЙГХ ОБ ЧЕЛФПТ. дМС РТПУФПФЩ ДПРХУФЙН, ЮФП Ч ЧЕЛФПТЕ ЮЕФЩТЕ ЬМЕНЕОФБ, ЛПФПТЩЕ ЙОДЕЛУЙТХАФУС 0...3, Й ЮФП НБФТЙГБ УПУФПЙФ ЙЪ ЮЕФЩТЕИ ЧЕЛФПТПЧ, ЙОДЕЛУЙТПЧБООЩИ 0...3. дПРХУФЙН ФБЛЦЕ, ЮФП ДПУФХР Л ЬМЕНЕОФБН ЧЕЛФПТБ ПУХЭЕУФЧМСЕФУС ЮЕТЕЪ ЖХОЛГЙА elem(), ЛПФПТБС ПУХЭЕУФЧМСЕФ РТПЧЕТЛХ ЙОДЕЛУБ, Й ЮФП Ч matrix ЙНЕЕФУС БОБМПЗЙЮОБС ЖХОЛГЙС. пДЙО РПДИПД УПУФПЙФ Ч ПРТЕДЕМЕОЙЙ ЗМПВБМШОПК ЖХОЛГЙЙ multiply() (РЕТЕНОПЦЙФШ) РТЙНЕТОП УМЕДХАЭЙН ПВТБЪПН: vector multiply(matrix& m, vector& v); { vector r; for (int i = 0; inext; else { // ЧЩДЕМЙФШ Й УГЕРЙФШ name* q = (name*)new char[ NALL*sizeof(name) ]; for (p=nfree=&q[NALL-1]; qnext = p-1; (p+1)->next = 0; } this = p; // ЪБФЕН ЙОЙГЙБМЙЪЙТПЧБФШ string = s; value = v; next = n; }

рТЙУЧПЕОЙЕ ХЛБЪБФЕМА this ЙОЖПТНЙТХЕФ ЛПНРЙМСФПТ П ФПН, ЮФП РТПЗТБННЙУФ ЧЪСМ УЕВЕ ХРТБЧМЕОЙЕ, Й ЮФП ОЕ ОБДП ЙУРПМШЪПЧБФШ УФБОДБТФОЩК НЕИБОЙЪН ТБУРТЕДЕМЕОЙС РБНСФЙ. лПОУФТХЛФПТ name::name() ПВТБВБФЩЧБЕФ ФПМШЛП ФПФ УМХЮБК, ЛПЗДБ name ТБЪНЕЭБЕФУС РПУТЕДУФЧПН new, ОП ДМС ВПМШЫЕК ЮБУФЙ ФЙРПЧ ЬФП ЧУЕЗДБ ФБЛ. ч #5.5.8 ПВЯСУОСЕФУС, ЛБЛ ОБРЙУБФШ ЛПОУФТХЛФПТ ДМС ПВТБВПФЛЙ ЛБЛ ТБЪНЕЭЕОЙС Ч УЧПВПДОПК РБНСФЙ, ФБЛ Й ДТХЗЙИ ЧЙДПЧ ТБЪНЕЭЕОЙС.

ъБНЕФШФЕ, ЮФП РТПУФП ЛБЛ name* q = new name[NALL];

РБНСФШ ЧЩДЕМСФШ ОЕМШЪС, РПУЛПМШЛХ ЬФП РТЙЧЕДЕФ Л ВЕУЛПОЕЮОПК ТЕЛХТУЙЙ, ЛПЗДБ new ЧЩЪПЧЕФ name::name().

пУЧПВПЦДЕОЙЕ РБНСФЙ ПВЩЮОП ФТЙЧЙБМШОП: name::~name() { next = nfree; nfree = this; this = 0; }

рТЙУЧБЙЧБОЙЕ ХЛБЪБФЕМА this 0 Ч ДЕУФТХЛФПТЕ ПВЕУРЕЮЙЧБЕФ, ЮФП УФБОДБТФОЩК ТБУРТЕДЕМЙФЕМШ РБНСФЙ ОЕ ЙУРПМШЪХЕФУС. 5.5.7 рТЕДПУФЕТЕЦЕОЙЕ лПЗДБ Ч ЛПОУФТХЛФПТЕ РТПЙЪЧПДЙФУС РТЙУЧБЙЧБОЙЕ ХЛБЪБФЕМА this, ЪОБЮЕОЙЕ this ДП ЬФПЗП РТЙУЧБЙЧБОЙС ОЕ ПРТЕДЕМЕОП. фБЛЙН ПВТБЪПН, УУЩМЛБ ОБ ЮМЕО ДП ЬФПЗП РТЙУЧБЙЧБОЙС ОЕ ПРТЕДЕМЕОБ Й УЛПТЕЕ ЧУЕЗП РТЙЧЕДЕФ Л ЛБФБУФТПЖЕ. йНЕАЭЙКУС ЛПНРЙМСФПТ ОЕ РЩФБЕФУС ХВЕДЙФШУС Ч ФПН, ЮФП РТЙУЧБЙЧБОЙЕ ХЛБЪБФЕМА this РТПЙУИПДЙФ ОБ ЧУЕИ ФТБЕЛФПТЙСИ ЧЩРПМОЕОЙС: mytype::mytype(int i) { if (i) this = mytype_alloc(); // РТЙУЧБЙЧБОЙЕ ЮМЕОБН };

ПФЛПНРЙМЙТХЕФУС, Й РТЙ i==0 ОЙЛБЛПК ПВЯЕЛФ ТБЪНЕЭЕО ОЕ ВХДЕФ.

лПОУФТХЛФПТ НПЦЕФ ПРТЕДЕМЙФШ, ВЩМ МЙ ПО ЧЩЪЧБО ПРЕТБГЙЕК new, ЙМЙ ОЕФ. еУМЙ ПО ЧЩЪЧБО new, ФП ХЛБЪБФЕМШ this ОБ ЧИПДЕ ЙНЕЕФ ОХМЕЧПЕ ЪОБЮЕОЙЕ, Ч РТПФЙЧОПН УМХЮБЕ this ХЛБЪЩЧБЕФ ОБ РТПУФТБОУФЧП, ХЦЕ ЧЩДЕМЕООПЕ ДМС ПВЯЕЛФБ (ОБРТЙНЕТ, ОБ УФЕЛ). рПЬФПНХ НПЦОП РТПУФП ОБРЙУБФШ ЛПОУФТХЛФПТ, ЛПФПТЩК ЧЩДЕМСЕФ РБНСФШ, ЕУМЙ (Й ФПМШЛП ЕУМЙ) ПО ВЩМ ЧЩЪЧБО ЮЕТЕЪ new. оБРТЙНЕТ: mytype::mytype(int i) { if (this == 0) this = mytype_alloc(); // РТЙУЧБЙЧБОЙЕ ЮМЕОБН };

ьЛЧЙЧБМЕОФОПЗП УТЕДУФЧБ, ЛПФПТПЕ РПЪЧПМСЕФ ДЕУФТХЛФПТХ ТЕЫЙФШ ЧПРТПУ, ВЩМ МЙ ЕЗП ПВЯЕЛФ УПЪДБО У РПНПЭША new, ОЕ ЙНЕЕФУС, ЛБЛ ОЕФ Й УТЕДУФЧБ, РПЪЧПМСАЭЕЗП ЕНХ ХЪОБФШ, ЧЩЪЧБМБ МЙ ЕЗП delete, ЙМЙ ПО ЧЩЪЧБО ПВЯЕЛФПН, ЧЩИПДСЭЙН ЙЪ ПВМБУФЙ ЧЙДЙНПУФЙ. еУМЙ ДМС РПМШЪПЧБФЕМС ЬФП УХЭЕУФЧЕООП, ФП ПО НПЦЕФ УПИТБОЙФШ ЗДЕ-ФП УППФЧЕФУФЧХАЭХА ЙОЖПТНБГЙА ДМС ДЕУФТХЛФПТБ. дТХЗПК УРПУПВ, - ЛПЗДБ РПМШЪПЧБФЕМШ ПВЕУРЕЮЙЧБЕФ, ЮФП ПВЯЕЛФЩ ЬФПЗП ЛМБУУБ ТБЪНЕЭБАФУС ФПМШЛП УППФЧЕФУФЧХАЭЙН ПВТБЪПН. еУМЙ ХДБЕФУС УРТБЧЙФШУС У РЕТЧПК РТПВМЕНПК, ФП ЧФПТПК УРПУПВ ЙОФЕТЕУБ ОЕ РТЕДУФБЧМСЕФ.

еУМЙ ФПФ, ЛФП ТЕБМЙЪХЕФ ЛМБУУ, СЧМСЕФУС ПДОПЧТЕНЕООП Й ЕЗП ЕДЙОУФЧЕООЩН РПМШЪПЧБФЕМЕН, ФП ЙНЕЕФ УНЩУМ ХРТПУФЙФШ, ЙУИПДС ЙЪ РТЕДРПМПЦЕОЙК П ЕЗП ЙУРПМШЪПЧБОЙЙ. лПЗДБ ЛМБУУ ТБЪТБВБФЩЧБЕФУС ДМС ВПМЕЕ ЫЙТПЛПЗП ЙУРПМШЪПЧБОЙС, ФБЛЙИ ДПРХЭЕОЙК, ЛБЛ РТБЧЙМП, МХЮЫЕ ЙЪВЕЗБФШ. 5.5.8 пВЯЕЛФЩ рЕТЕНЕООПЗП тБЪНЕТБ лПЗДБ РПМШЪПЧБФЕМШ ВЕТЕФ ХРТБЧМЕОЙЕ ТБУРТЕДЕМЕОЙЕН Й ПУЧПВПЦДЕОЙЕН РБНСФЙ, ПО НПЦЕФ ЛПОУФТХЙТПЧБФШ ПВЯЕЛФЩ, ТБЪНЕТ ЛПФПТЩИ ЧП ЧТЕНС ЛПНРЙМСГЙЙ ОЕДЕФЕТНЙОЙТПЧБО. ч РТЕДЩДХЭЙИ РТЙНЕТБИ ЧНЕЭБАЭЙЕ (ЙМЙ ЛПОФЕКОЕТОЩЕ - РЕТЕЧ.) ЛМБУУЩ vector, stack, intset Й table ТЕБМЙЪПЧЩЧБМЙУШ ЛБЛ УФТХЛФХТЩ ДПУФХРБ ЖЙЛУЙТПЧБООПЗП ТБЪНЕТБ, УПДЕТЦБОЙЕ ХЛБЪБФЕМЙ ОБ ТЕБМШОХА РБНСФШ. ьФП РПДТБЪХНЕЧБЕФ, ЮФП ДМС УПЪДБОЙС ФБЛЙИ ПВЯЕЛФПЧ Ч УЧПВПДОПК РБНСФЙ ОЕПВИПДЙНП ДЧЕ ПРЕТБГЙЙ РП ЧЩДЕМЕОЙА РБНСФЙ, Й ЮФП МАВПЕ ПВТБЭЕОЙЕ Л ИТБОЙНПК ЙОЖПТНБГЙЙ ВХДЕФ УПДЕТЦБФШ ДПРПМОЙФЕМШОХА ЛПУЧЕООХА БДТЕУБГЙА. оБРТЙНЕТ: class char_stack { int size; char* top; char* s; public: char_stack(int sz) { top=s=new char[size=sz]; } ~char_stack() { delete s; } // ДЕУФТХЛФПТ void push(char c) { *top++ = c; } char pop() { return *--top; } };

еУМЙ ЛБЦДЩК ПВЯЕЛФ ЛМБУУБ ТБЪНЕЭБЕФУС Ч УЧПВПДОПК РБНСФЙ, ЬФП ДЕМБФШ ОЕ ОХЦОП. чПФ ДТХЗПК ЧБТЙБОФ: class char_stack { int size; char* top; char s[1]; public: char_stack(int sz); void push(char c) { *top++ = c; } char pop() { return *--top; } }; char_stack::char_stack(int sz) { if (this) error("УФЕЛ ОЕ Ч УЧПВПДОПК РБНСФЙ"); if (sz < 1) error("ТБЪНЕТ УФЕЛБ < 1"); this = (char_stack*) new char[sizeof(char_stack)+sz-1]; size = sz; top = s; }

ъБНЕФШФЕ, ЮФП ДЕУФТХЛФПТ ВПМШЫЕ ОЕ ОХЦЕО, РПУЛПМШЛХ РБНСФШ, ЛПФПТХА ЙУРПМШЪХЕФ char_stack, НПЦЕФ ПУЧПВПДЙФШ delete ВЕЪ ЧУСЛПЗП УПДЕКУФЧЙС УП УФПТПОЩ РТПЗТБННЙУФБ. 5.6 хРТБЦОЕОЙС (*1) нПДЙЖЙГЙТХКФЕ ОБУФПМШОЩК ЛБМШЛХМСФПТ ЙЪ зМБЧЩ 3, ЮФПВЩ ЙУРПМШЪПЧБФШ ЛМБУУ table. (*1) тБЪТБВПФБКФЕ tnode (#У.8.5) ЛБЛ ЛМБУУ У ЛПОУФТХЛФПТБНЙ, ДЕУФТХЛФПТБНЙ Й Ф.Р. пРТЕДЕМЙФЕ ДЕТЕЧП ЙЪ tnode'ПЧ ЛБЛ ЛМБУУ У ЛПОУФТХЛФПТБНЙ, ДЕУФТХЛФПТБНЙ Й Ф.Р. (*1) рТЕПВТБЪХКФЕ ЛМБУУ intset (#5.3.2) Ч НОПЦЕУФЧП УФТПЛ. (*1) рТЕПВТБЪХКФЕ ЛМБУУ intset Ч НОПЦЕУФЧП ХЪМПЧ node, ЗДЕ node - ПРТЕДЕМСЕНБС ЧБНЙ УФТХЛФХТБ. (*3) пРТЕДЕМЙФЕ ЛМБУУ ДМС БОБМЙЪБ. ИТБОЕОЙС, ЧЩЮЙУМЕОЙС Й РЕЮБФЙ РТПУФЩИ БТЙЖНЕФЙЮЕУЛЙИ ЧЩТБЦЕОЙК, УПУФПСЭЙИ ЙЪ ГЕМЩИ ЛПОУФБОФ Й ПРЕТБГЙК +, -, * Й /. пФЛТЩФЩК ЙОФЕТЖЕКУ ДПМЦЕО ЧЩЗМСЕДФШ РТЙНЕТОП ФБЛ: class expr { // ... public: expr(char*); int eval(); void print(); }

рБТБНЕФТ УФТПЛБ ЛПОУФТХЛФПТБ expr::expr() СЧМСЕФУС ЧЩТБЦЕОЙЕН. жХОЛГЙС expr::eval() ЧПЪЧТБЭБЕФ ЪОБЮЕОЙЕ ЧЩТБЦЕОЙЕ, Б expr::print() РЕЮБФБЕФ РТЕДУФБЧМЕОЙЕ ЧЩТБЦЕОЙС Ч cout. рТПЗТБННБ НПЦЕФ ЧЩЗМСДЕФШ, ОБРТЙНЕТ, ФБЛ: expr x("123/4+123*4-3"); cout

Соседние файлы в папке Введение в язык С++ - Б. Страустрап