«СТРОКОВЫЕ ФОРМАТЫ ДАННЫХ». Лабораторная работа 3 V3. Лабораторная работа 3 строковые форматы данных по дисциплине Архитектура вычислительных систем Руководитель
Скачать 450.87 Kb.
|
Федеральное агентство железнодорожного транспорта Сибирский государственный университет путей сообщения Кафедра « Информационные технологии транспорта » Лабораторная работа № 3 «СТРОКОВЫЕ ФОРМАТЫ ДАННЫХ»по дисциплине «Архитектура вычислительных систем» Руководитель Разработал студент гр. БИСТ-112 ________________. ________________ (подпись) . (подпись) __________________ _____________________ (дата проверки) (дата сдачи на проверку) Краткая рецензия: ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ _________________________________ (запись о допуске к защите) ________________________________ _________________________________ (оценка по результатам защиты) (подписи преподавателей) 2020год Цель работы: изучение кодовых таблиц, внутренних форматов хранения строк и основных функций обработки строк. 2. Программное обеспечение для выполнения работы. Для выполнения работы используются программы, местонахождение которых необходимо уточнить у преподавателя. 2.1 Программа StrLab предназначена для изучения внутренних форматов строковых переменных и реализована в виде консольного приложения Windows в среде DELPHI. Здесь функция Sizeof() используется для определения физического размера участка памяти, выделяемого для хранения переменных. programstrlab; {$APPTYPE CONSOLE} usesSysUtils; vara,b,c: ShortString; d,e,f: AnsiString; i: Integer; str1: string[7]; str2: PChar; procedure print(n: char); // выводсимволанаэкран begin if n=#0 then Write('_') else Write(n); end; begin WriteLn('Uses variables:'); WriteLn('a,b,c: ShortString'); WriteLn('d,e,f: AnsiString'); WriteLn('str1: String[7]'); WriteLn('str2: PChar'); WriteLn('__________________________________'); WriteLn('String[7] Type:'); Write('Enter the string ''str1'': '); ReadLn(str1); WriteLn('The size of the string ''str1'' = ', sizeof(str1)); WriteLn('The string ''str1'' :'); For i:=0 to 7 do Print(str1[i]); WriteLn; // выводпустойстроки WriteLn('Kod of first byte in the ''str1'' string = ', Ord(str1[0])); WriteLn('The ''str1'' string length = ', Length(str1)); WriteLn; // вывод пустой строки ReadLn; WriteLn('ShortString Type:'); Write('Enter the string ''a'': '); ReadLn(a); Write('Enter the string ''b'': '); ReadLn(b); WriteLn; // вывод пустой строки // физическийразмер 'a' WriteLn('The size of the string ''a'' = ', sizeof(a)); // посимвольный вывод первых 40 символов строки WriteLn('Thestring ''a'' (0-40):'); For i:=0 to 40 do Print(a[i]); WriteLn; // вывод пустой строки // выводимначальныйбайт WriteLn('Kod first byte in the ''a'' string = ', Ord(a[0])); WriteLn('The ''a'' string length = ', Length(a)); WriteLn; // выводпустойстроки WriteLn('The size of the string ''b'' = ', sizeof(b)); WriteLn('The string ''b'' (0-40):'); For i:=0 to 40 do Print(b[i]); WriteLn; WriteLn('The first character''s position in the ''b'' string = ', Ord(b[0])); WriteLn('The ''b'' string length = ', Length(b)); WriteLn; // вывод пустой строки ReadLn; // находим конкатенацию WriteLn('c = a + b'); c:=a + b; WriteLn('The size of the string ''c'' = ', sizeof(c)); WriteLn('The string ''c'' (0-40):'); For i:=0 to 40 do Print(c[i]); WriteLn; // выводпустойстроки WriteLn('The first character''s position in the ''c'' string = ', Ord(c[0])); WriteLn('The ''c'' string length = ', Length(c)); ReadLn; d:=a; e:=b; WriteLn('ANSIString Type (d=a, e=b):'); WriteLn('The size of the string ''d'' = ', sizeof(d)); WriteLn('The string ''d'':'); For i:=1 to Length(d) do Print(d[i]); WriteLn; WriteLn('The ''d'' string length = ', Length(d)); WriteLn; // вывод пустой строки ReadLn; WriteLn; // выводпустойстроки WriteLn('The size of the string ''e'' = ', sizeof(e)); WriteLn('The string ''e'':'); for i:=1 to Length(e) do Print(e[i]); WriteLn; WriteLn('The ''e'' string length = ', Length(e)); WriteLn; f:=d+e; WriteLn('f = d + e'); WriteLn('The size of the string ''f'' = ', sizeof(f)); WriteLn('The string ''f'':'); For i:=1 to Length(f) do Print(f[i]); WriteLn; WriteLn('The ''f'' string length = ', Length(f)); ReadLn; WriteLn('PChar Type:'); str2:='Winter is cold'; WriteLn('The size of the string ''str2'' = ', sizeof(str2)); WriteLn('The string ''str2'' :'); for i:=0 to Length(str2) do Print(str2[i]); WriteLn; // выводпустойстроки WriteLn('Kod of first byte in the ''str2'' string = ', Ord(str2[0])); WriteLn('The ''str2'' string length = ', Length(str2)); WriteLn; // вывод пустой строки ReadLn; WriteLn;WriteLn; WriteLn('And now all strings...'); WriteLn('a=', a); WriteLn('b=', b); WriteLn('c=', c); WriteLn('d=', d); WriteLn('e=', e); WriteLn('f=', f); WriteLn('str1=', str1); WriteLn('str2=', str2); ReadLn; // ждет ввода для завершения программы End. 2.2 Программа StrFunc используется для изучения основных функций обработки строк и реализована в виде консольного приложения Windows в среде DELPHI. programStrFunc; {$APPTYPE CONSOLE} {$J+} // можно менять значения типизированных констант uses SysUtils; const ss = '!'; sx : string = '2.7'; var s, s1, s2, s_two : String; // AnsiString, т.к. поумолчанию {$H+} x : Real; code, i : integer; begin // вводдвухстрок Writeln('Enter first string "s": '); Readln(s); Writeln('Enter second string "s_two": '); Readln(s_two); // операция конкатенации Writeln; Writeln ('Concat: '); s1 := Concat (s, s_two); s2 := s + s_two; WriteLn ('s1: ', s1); // операция сложения строк Writeln; Writeln ('Add: '); WriteLn ('s2: ', s2); // выделение подстроки, начиная с 3 позиции, длиной 4 символа Writeln; Writeln ('Copy(s1,3,4): '); s := Copy (s1,3,4); WriteLn ('s: ',s); // удаление подстроки, начиная с 3 позиции, длиной 4 символа Writeln; Writeln ('Delete(s1,3,4): '); Delete (s1, 3, 4); WriteLn ('s1: ',s1); // вставка подстроки s в строку s1, начиная с 5 позиции Writeln; Writeln ('Insert(s,s1,5): '); Insert (s, s1, 5); WriteLn ('s1: ',s1); // определение позиции, с которой начинается подстрока ss Writeln; Writeln ('Pos(ss, s2): '); WriteLn ('First posision ''!'' in s2: ',pos(ss, s2)); // преобразование целочисленной переменной i в переменную s строкового типа Writeln; Writeln ('Str : '); i := High (Byte); // i = 255 - максимальное значение типа byte Str (i, s); ifIOResult = 0 then {успешноепреобразование} WriteLn ('i= ', i, ' s= ', s); // преобразование строковой переменной sx в вещественную переменную x (3 примера) // если преобразование успешно, то code=0 Writeln; Writeln ('Val : (3 examples) '); Val (sx, x, code); if code = 0 then WriteLn ('1) sx= ', sx, ' x= ', x:9:3) elseWriteLn ('1) Error'); // здесь преобразование будет ошибочным, определите причину !, sx := '2,7'; Val (sx, x, code); if code = 0 then WriteLn ('2) sx= ', sx, ' x= ', x:9:3) elseWriteLn ('2) Error'); sx := ' 2.7'; Val (sx, x, code); if code = 0 then WriteLn ('3) sx= ', sx, ' x= ', x:9:3) elseWriteLn ('3) Error'); // преобразование регистра Writeln; Writeln ('UpCase : '); sx := 'example 1'; fori := 1 to length (sx) do // функция UpCase преобразует символ типа char из нижнего регистра в верхний регистр Write(UpCase(sx[i])); Writeln; // определение кода символов Writeln; Writeln ('Ord : '); sx := 'example 1'; fori := 1 to length (sx) do // функция IntToStr преобразует целое число в строку // функция Ord(s) возвращает код символа s Write(IntToStr(Ord(sx[i])) + ' ' ); ReadLn; end. 2.3Программа Translate, предназначенная для перевода во внутренний формат различных типов числовых, символьных и строковых данных применительно к языкам программирования C# и ObjectPascal. Программа реализована в виде графического приложения Windows иможет работать в двух режимах: обучение и контроль. Она имеет эффективную систему справочной помощи, которая может использоваться для изучения материала. Порядок работы с программой также описан в справочной системе. 4. Порядок выполнения работы 1. Изучить исходные тексты программ для выполнения лабораторных работ. 2. С помощью программы StrLab.pas изучить строковые форматы, результаты представить в виде таблицы 21. В качестве значений переменным a, b, cприсвоить фамилию, имя и отчество студента. Таблица 21
2.С помощью программы StrFunc.pas изучить основные функции обработки строк, результаты представить в виде таблицы 22.
С помощью программы Translate самостоятельно проконтролировать свои знания по переводу символьной строки во внутренний формат, результаты контроля занести в отчет. С помощью редактора Word: создать файл в формате .txt, в каждый из которых записать свою фамилию с использованием кодировок DOS создать файл в формате .doc, в который также записать свою фамилию. Занести в отчет скриншоты, показывающие содержимое файлов в шестнадцатиричном виде. Для просмотра внутреннего содержимого файлов можно использовать любой шестнадцатиричный редактор, например свободно распространяемую версию редактора DMDE (сайт разработчика http://dmde.ru). Основные сведения о редакторе и методику работы с ним Вы можете найти в приложении 2.
.dos С помощью программы Translate, изученной при выполнении лабораторной работы № 2, получить и занести в отчет свою фамилию во внутреннем формате C#.В скриншоте выделить байты, содержащие фамилию, определить используемую кодировку. - строка хранится в виде последовательности символов, доступных только для чтения ;значение строки после её создания изменить нельзя, а все методы класса Stringи операторы C#, которые изменяют значение строки, в действительности возвращают результаты в новый строковый объект; - в конце строки всегда находится null-символ, но, в отличие от ObjectPascal,он является допустимым символом и может встречаться в любом месте строки; - за счет наличия null-символа в конце строки С# совместим с другими динамическими строками (например, строками С++), но не наоборот. Общая схема хранения строк С# выглядит следующим образом: Заголовок имеется у каждого объекта .NET, имеющего ссылочный тип, и состоит из индекса синхронизации (SyncBlockIndex)размером 4 байта и указателя на таблицу виртуальных методов (VirtualMethodsTable, VMT) размером 4 байта. Индекс синхронизации используется для организации многопоточного доступа к объекту, а VMT– для доступа к методам объекта. Длина заголовка для архитектуры х86 равна 8 байтов, для архитектуры х64 – 16 байтов. Вывод: изучены кодовые таблицы, внутренних форматов хранения строк и основных функций обработки строк. |