Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК по СПО.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.79 Mб
Скачать

10.Обеспечение лабораторного практикума

Лабораторный практикум проводится по соответствующим методическим указаниям и предназначен, в основном, для формирования навыков объектно-ориентированного программирования, изучения типовых программных решений для объектно-ориентированных программ и существующих программных заделов. Методические указания приведены в приложении (Приложение 3. Методические указания к лабораторным работам по дисциплине «Системное программное обеспечение. Синтаксические анализаторы»).

Защита лабораторных работ представляет собой одну из форм текущего контроля успеваемости по данному курсу. Распределение защит лабораторных работ во времени показано в приложении (Приложение 1. Учебно–методическая карта дисциплины “Системное программное обеспечение. Синтаксические анализаторы”).

11.Дополнительная информация. Примеры

11.1.Функции работы со строками языка С/С++ для С, MS Visual C++, Borland C++ Builder

Рассмотрим функции на примерах:

MS Visual C++

CString str,mid;

int i;

str="aa dddf hjjh (555) jhjhj jhgjh";

i=str.Find("aa",0);

i=str.Find("555",0);

if(i!=-1){

mid=str.Mid(i,3);

str.Delete(i,3);

str.Insert(i,'_');

MessageBox(str.GetBuffer(1),mid.GetBuffer(1));

}

str.Empty();

Borland C++ Builder

AnsiString as="aa dd (555) jjkk",mid;

int i=0;

i=as.Pos("555");

if(i){

mid=as.SubString(i,3);

as.Delete(i,3);

as.Insert("777",i);

i=as.LastDelimiter(". ");

MessageBox(NULL,as.c_str(),mid.c_str(),0);

}

11.2.Функции работы с потоками языка С / С++

Класс basic_ostream предоставляет функции, которые предназначены для форматирования и вывода символьных последовательностей посредством потокового буфера.

Поддерживаются две группы функций, а именно форматированного и неформатированного вывода. Обе группы функций отсылают символы посредством функций класса basic_streambuf. Форматирующие функции выполняют преобразование скалярных значений в строку и затем выполняют вывод.

//

// Пример 1

//

#include<iostream>

#include<ostream>

#include<sstream>

#include<iomanip>

void main ( )

{

using namespace std;

float f=3.14159;

int i=22;

const char* s="Randy is the king of stdlib";

// создадим объект istringstream для типа char

istringstream in( ios_base::in | ios_base::out );

// свяжем объект ostream с istringstream объектом

ostream out(in.rdbuf());

out << "test beginning !" << endl;

// выведем i в шестнадцатиричном формате

out << hex << i <<endl;

// установим ширину поля в 10

// установим символ '@' заполнителем поля

// и выведем i в десятичном формате

out << setw(10) << oct << setfill('@') << i << endl;

// установим точность в 2 цифры после запятой

// выведем f

out << setprecision(3) << f << endl;

// выведем 17 первых символов строки s

out.write(s,17);

// перевод строки

out.put('\n');

// выведем s

out << s << endl;

// выведем на экран полученный буфер

cout << in.rdbuf();

}

Класс basic_istream предоставляет функции, которые предназначены для форматирования и ввода символьных последовательностей посредством потокового буфера.

Также поддерживаются две группы функций, а именно форматированного и неформатированного ввода.

//

// Пример 2

//

#include<iostream>

#include<istream>

#include<fstream>

void main ( )

{

using namespace std;

float f= 3.14159;

int i= 3;

char s[200];

// открытие файла для вывода

ofstream out("example", ios_base::in | ios_base::out

| ios_base::trunc);

// связывание istream объекта с ofstream буфером

istream in (out.rdbuf());

// вывод в файл

out << "Annie is the Queen of porting" << endl;

out << f << endl;

out << i << endl;

// перемещение файлового указателя на начало

in.seekg(0);

f = i = 0;

// чтение из файла функциями с форматированием

in >> s >> f >> i;

// перемещение файлового указателя на начало

in.seekg(0,ios_base::beg);

// вывод всего файла на экран

cout << in.rdbuf();

// перемещение файлового указателя на начало

in.seekg(0);

// чтение первой строки файла

// "Annie is the Queen of porting"

in.getline(s,100);

cout << s << endl;

// чтение следующей строки файла

// 3.14159

in.getline(s,100);

cout << s << endl;

// перемещение файлового указателя на начало

in.seekg(0);

// читает первую строку файла (разделитель '\n')

// "Annie is the Queen of porting"

in.get(s,100);

// удаление перевода строки

in.ignore();

cout << s << endl;

in.get(s,100);

cout << s << endl;

in.ignore();

// сохранение позиции в переменной

istream::pos_type position = in.tellg();

// установить указатель в сохраненную позицию

in.seekg(position);

cout << "\n\n\n" << flush;

}

11.3.Функции работы с потоками в Borland C++ Builder

Этот пример показывает, как используются потоки для технологии VCL

AnsiString ComponentToString(TComponent c)

{

AnsiString as;

TMemoryStream* pms = new TMemoryStream();

TStringStream* pss = new TStringStream(as);

try

{

pms->WriteComponent(&c);

pms->Seek(0, soFromBeginning);

ObjectBinaryToText(pms, pss);

pss->Seek(0, soFromBeginning);

as = pss->DataString;

}

catch(...) {

ShowMessage("Streaming error.");

}

delete pms;

delete pss;

return as;

}

TComponent StringToComponent(AnsiString as){

TMemoryStream* pms = new TMemoryStream();

TStringStream* pss = new TStringStream(as);

TComponent *pc;

try {

ObjectTextToBinary(pss, pms);

pms->Seek(0, soFromBeginning);

}

catch(...) {

ShowMessage("Streaming error.");

}

pc = pms->ReadComponent(NULL);

delete pms;

delete pss;

return *pc;

}