Главная страница
Навигация по странице:

  • Кафедра « Информационные технологии транспорта » Лабораторная работа № 3

  • Руководитель Разработал студент гр. БИСТ-112 ________________. ________________ (подпись) .

  • Краткая рецензия

  • Имя переменной Физическая длина (байт) Длина строки (байт)

  • Функция Назначение Пример вызова Результат

  • «СТРОКОВЫЕ ФОРМАТЫ ДАННЫХ». Лабораторная работа 3 V3. Лабораторная работа 3 строковые форматы данных по дисциплине Архитектура вычислительных систем Руководитель


    Скачать 450.87 Kb.
    НазваниеЛабораторная работа 3 строковые форматы данных по дисциплине Архитектура вычислительных систем Руководитель
    Анкор«СТРОКОВЫЕ ФОРМАТЫ ДАННЫХ»
    Дата12.09.2020
    Размер450.87 Kb.
    Формат файлаdocx
    Имя файлаЛабораторная работа 3 V3.docx
    ТипЛабораторная работа
    #137655

    Федеральное агентство железнодорожного транспорта

    Сибирский государственный университет путей сообщения

    Кафедра « Информационные технологии транспорта »

    Лабораторная работа № 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

    Имя переменной

    Физическая длина (байт)

    Длина строки (байт)




    a

    256

    7




    b

    256

    6




    c

    256

    13




    d

    4

    7




    e

    4

    6




    f

    4

    13




    Str1

    7

    7

    Str2

    4

    14






    2.С помощью программы StrFunc.pas изучить основные функции обработки строк, результаты представить в виде таблицы 22.

    Функция

    Назначение

    Пример вызова

    Результат

    UpCase

    Преобразует символ к верхнему регистру

    UpCase(‘a’)

    “A”

    Concat


    Функция возвращает строку, являющуюся

    объединением нескольких строк, например s1 и s2.


    Concat(s1)

    s1:A

    Copy

    Функция выделяет из строки (s1) заданное число

    символов (m), начиная с заданной позиции (n).


    Copy(s1,3,4)

    s:8,10

    Delete

    Процедура удаляет из строки (s1) заданное числа

    символов (m), начиная с заданной позиции (n).


    Delete(var s1:string; n:

    integer; m: integer);


    S1:a

    Insert

    Процедура вставляет подстроку (s1) в строку (s2)

    начиная с заданной позиции (m)


    Insert(s1,s1.5)

    S1: a

    Pos

    Str


    Функция проводит поиск подстроки. Если

    подстрока найдена, то возвращает номер позиции

    первого символа подстроки s1 в строке s2; иначе возвращает 0

    Процедура преобразует вещественное или целое

    число x в символьную строку s


    Pos(s1, s2:

    Str(x; var s: string);

    First

    posision

    i=255

    s=255

    Val

    Процедура преобразует символьное представление

    числа (строка s) в числовую переменную целого

    или вещественного типа (v). Переменная code равна

    0, если преобразование выполнено правильно.


    Val(3 example)

    1 sx=2.7 x= 2.700

    2 Error

    3 sx= 2.7 x= 2.700

    Ord

    Функция возвращает код символа (его порядковый

    номер в кодировочной таблице)


    Ord(x: char): longint;

    101 120 97 109 112 108 101 32 49 a

    Chr


    Функция возвращает символ по заданному коду


    Chr(x: byte): char;

    X :A





    1. С помощью программы Translate самостоятельно проконтролировать свои знания по переводу символьной строки во внутренний формат, результаты контроля занести в отчет.



    2. С помощью редактора Word:

    • создать файл в формате .txt, в каждый из которых записать свою фамилию с использованием кодировок DOS

    • создать файл в формате .doc, в который также записать свою фамилию.

    1. Занести в отчет скриншоты, показывающие содержимое файлов в шестнадцатиричном виде. Для просмотра внутреннего содержимого файлов можно использовать любой шестнадцатиричный редактор, например свободно распространяемую версию редактора DMDE (сайт разработчика http://dmde.ru). Основные сведения о редакторе и методику работы с ним Вы можете найти в приложении 2.




    ANSI





    UNICOD




    UTF-8




    DOS






    .dos



    1. С помощью программы Translate, изученной при выполнении лабораторной работы № 2, получить и занести в отчет свою фамилию во внутреннем формате C#.В скриншоте выделить байты, содержащие фамилию, определить используемую кодировку.



    - строка хранится в виде последовательности символов, доступных только для чтения ;значение строки после её создания изменить нельзя, а все методы класса Stringи операторы C#, которые изменяют значение строки, в действительности возвращают результаты в новый строковый объект;

    - в конце строки всегда находится null-символ, но, в отличие от ObjectPascal,он является допустимым символом и может встречаться в любом месте строки;

    - за счет наличия null-символа в конце строки С# совместим с другими динамическими строками (например, строками С++), но не наоборот.

    Общая схема хранения строк С# выглядит следующим образом:

    Заголовок имеется у каждого объекта .NET, имеющего ссылочный тип, и состоит из индекса синхронизации (SyncBlockIndex)размером 4 байта и указателя на таблицу виртуальных методов (VirtualMethodsTable, VMT) размером 4 байта. Индекс синхронизации используется для организации многопоточного доступа к объекту, а VMT– для доступа к методам объекта. Длина заголовка для архитектуры х86 равна 8 байтов, для архитектуры х64 – 16 байтов.

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


    написать администратору сайта