«Соңғы автоматтар және формальдік тілдер теориясы»


Тілдің контексті бос емес қасиеттері. Символдар кестесінің ұйымдастыру. Идентификатордың кестесі. Орналастыру кестесі



жүктеу 14,81 Mb.
бет98/127
Дата21.05.2018
өлшемі14,81 Mb.
#15467
1   ...   94   95   96   97   98   99   100   101   ...   127

Тілдің контексті бос емес қасиеттері. Символдар кестесінің ұйымдастыру. Идентификатордың кестесі. Орналастыру кестесі.

  • Тізімді қойылым кестесі. Орналастыру функциясы. Ағаштар кестесі. Блоқтық құрылым.




    Дәріс № 9 ЖАДЫНЫҢ БӨЛІНУІ ЖӘНЕ КОД ГЕНЕРАЦИЯСЫ
    Жоспары:

    1. Жады ұйымдастыру. Статикалық және динамикалық жады.

    2. Компиляцияның уақыт адресі. Уақытша жады.

    3. Кодтың генерациясы. Кодты құру. Үш адресті код. Р – коды. Байт – коды. Машиналық кодты құру.

    4. Нұсқаның таңдауы. Регистрлердің үлестіру. Объектті кодтың ықшамдылығы.


    Жады ұйымы.

    Фундаменталды шешім бірінші РС-ны жобалағанда қабылданған. 8088-ші микропроцессор қолдануы үшін, ол мекендік болу тиіс. Белгілі болғандай, қолданылған IBM PC, PC/XT микропроцессор і8088 өзінің 20 мекендік шині арқылы барлық 1-Мбайттік жадтың кеңестігіне кіре алады.

    ІВМ конструкторлары спецификалық мақсатта жадтың арнайы аймағын бөлуді қажет деп тапты. Олар барлық жадты бөлімдерге бөлуді және әрбір бөлім өзінің функциясын таратуға арналған. Нәтижесі диаграмма жадтың картасы деп аталған. РС-ны өндіруде барлық жадтың жартысы резервтелген. Мекендік кеңістіктің жоғарғы жартысы ВІОS кодының мазмұны үшін және жадқа тікелей процессорлық кіруге бөлінген. Алғашқы бірнеше Кбайт система туралы ақпаратқа және негізгі кодтар секциясының орналасуына резервтелген. Олар программаны қамтамасыз ету кезінде орындалады. Бұл жад ұяшықтары үзіліс векторлары деп аталады, ал программалық кодтың функциясы – үзіліс механизмі деп аталады.

    Мекендік кеңістіктің аяғында 16 байт номиналымен клавиатура буфері орналасқан. Бұл буфер процессор басқа тапсырманы орындағанда терілген мәтінді сақтау үшін қажет. Тапсырма орындалғаннан кейін бұл мәтін қайта өңделеді. Компьютердің ұнамсыз дыбысы буфердің толғанын және ары қарай басу қажет еместігін көрсетеді. Сонымен қатар, әртүрлі системалық жалаулар, (системалық ішкі жағдайын көрсететін) олар да жадтың төменгі бөлімінде сақталады. Сол кезде компьютерлер 60К жадына ие болғанда 512К жады ғажайып болып көрінеді. Сондықтан 128К программалау қамтамасыз етудің юрисдикциясына беріледі, қалған 384К бастапқы мекендік кеңістік BIOS программасын қолдануға және көру жадына арналды. Бұл шешім 640К стандартты жадты (DOS-қа арналған) шығарды. Бұл программаны орындау кезінде 8088 операция орындай алатын мекендік кеңістіктің жоғарғы мүмкіндігі, кейіннен бұл 640К базалық жад деп аталады, себебі барлық ІВМ біріңғай системалары орын алатын негізгі стандарт болып есептелді.



    Статикалық және динамикалық жады.

    Осы уақыттта дейін біз программалаудың статикалық деректерді өңдеу жағдайларын қарастырдық.Статикалық шамалар дегеніміз жады компиляция кезінде бөлінетін және барлық жұмыс программасы кезінде сақталатын шамаларды айтады. Паскальда динамикалық деп аталатын басқа әдіс қолданылады. Бұл жағдайда шамалар астындағы жады программаны орындау кезінде шығарылады. Осындай шамаларды динамикалық деп атаймыз. Статикалық таратылған оперативтік жады бөлімі статикалық жады деп, ал динамикалық таратылу бөлімі динамикалық жады деп аталады.

    Динамикалық шамаларды қолдану программалаушыға қосымша мүмкіндіктер береді. Біріншіден, динамикалық жадқа қосылу деректерді жаңалаудың көлемін ұлғайтады.

    Екіншіден, кейбір деректер программасының аяғына дейін қажет болмаса, онда ол сақталған жадты басқа информация үшін босатуға болады.

    Үшіншіден, динамикалық жадты қолдану арқылы деректердің құрылымының өлшемін өзгертуге болады.

    Динамикалық шамалармен жұмыс істеу тағы бір деректерді сілтеме түрімен байланысты сілтеме түрдегі деректерді нұсқаулар деп атайды. Нұсқау біртекті типтегі шамаларды сақтайтын динамикалық жадтағы жазықтықтың орнын құрайды.

    Статикалық жад Динамикалық жад

    Нұсқау Шама


    Шама

    Мәні

    Шама мекені – бұл жазықтық жадының бірінші байтындағы номері. Жазықтық өлшемі типпен анықталады

    Сілтеме типінің шамасы айнымалыларды анықтау бөлімінде төмендегідей анықталады:

    Var <идентификатор> := <сілтеме типі>

    Паскаль стандартында әрбір нұсқау шаманың тек бір ғана анықталған типіне жібереледі. Бұл нұсқаудың базалық типі. Базалық типтің атауы жазбада мынадай түрде көрсетіледі:

    < сілтеме типі > : ^<тип атауы>

    Нұсқауды анықтау мысалдары:

    Type Massiv=Array [1..100] of Integer;

    Var P1: ^Integer;

    P2: ^Char;

    PM: ^Massiv;


    Мұндағы Р1 – бүтін типтегі динамикалық шамаға нұсқау.

    Р2 – белгілік типтегі динамикалық шамаға нұсқау.

    РМ – ТУРЕ бөліміндегі динамикалық массивке нұсқау.

    Динамикалық шамалардың өздері программада жазылуы талап етпейді, себебі, компиляция кезінде оның астындағы жады білінбейді. Компиляция кезінде тек статикалық шамалардың астындағы жады білінбейді.

    Нұсқаулар – бұлар статикалық шамалар, сондықтан жазуда қажет етеді.

    Динамикалық жадтың астындағы қандай жағдайда бөлініп шығады? Нұсқаумен байланысқан динмикалық астындағы жады NEW стандартты процедурасының орындалу нәижесінде бөлінеді. Бұл процедураға сұрау салу форматының түрі мынадай:

    NEW (<нұсқау>);

    Бұл операторда орындағаннан кейін:



    <динамикалық шаманың аты>:=<нұсқау>^

    түріндегі динамикалық шама құралады деп есептеледі.

    Программада NEW(P1); NEW(P2); NEW(PM); операторлары қатысқан болсын. Олар орындалғаннан кейін динамикалық жадта үш шаманың (екі скаляр және бір массив) астындағы орны бөлінбейді. Олардың идентификаторлары мынадай

    Р1^,P2^,PM^.

    Мысалы, P1^ белгісін былай түсінуге болады: Ол Р1 нұсқауына сілтенетін динамикалық айнымалы болып табылады. Мына суретте көрсетілген схемада, динамикалық шамалар мен олардың нұсқауларының арасындағы байланыс көрсетілген.

    Статикалық жад Динамикалық жад

    Нұсқау Шама


    P1



    P1^2(2 байта)

    P2


    Р2^(1 байт)



    PМ^(200 байт)

    Динамикалық айнымалылармен ары қарай жұмыс істеу тура сәйкес типтегі статикалық айнымалылардғы сияқты жүргізіледі. Оларға мынадай мән беруге болады, оларды өрнектерде операнд есебіне иқолдануға болады, сол сияқты параметр астындағы программаларға, тағы сол сияқты жағдайларға қолдануға болады. Мысалы, егер P1^ айнымалысы 25 мәнін иелену қажет болса, P2^ айнымалысы “W” белгінің мәнін иелену қажет болса, ал PM^массиві 1-ден 100-ге дейінгі сандарды ретімен толтыру керек болса, онда бұл былай орындалады:

    P1^:=25;

    P2^:=’W’;

    For I:=1 To 100 Do PM^:={I}:I;

    NEW процедурасынан басқа нұсқау мәні иелену оператормен анықталады



    <нұсқау> :=<сілтеме өрнек>;

    Сілтеме өрнек ретінде мыналарды қолдануға болады:



    • Нұсқау

    • Сілтеме функциясы (мәні нұсқау болатын функция)

    • Ni 1 константасы.

    Ni 1 – бұл қосымшаланған константа, ештеңені көрсетпейтін бос сілтемені көрсетеді. Нұсқаудың базалық типін иелену кезінде және сілтеме өрнектер бірдей болуы қажет. Ni 1 константасын кез келген базалық типтегі нұсқауға иеленуге болады.

    Сілтеме айнымалының мәнін иеленуге дейін (иелену операторының көмегімен немесе NEW процедурасы арқылы) ол анықталмаған болады.

    Кіру және шығу нұсқаулары жіберілмейді

    Мысал қарастырайық. Программада төмендегі нұсқаулар жазылған болсын:

    Var D,P: ^Integer;

    K: ^Boolean;

    Онда иелену операторлары D:=P; K:=Ni 1 қолдануға болады. Себебі, сәйкестендіру типінің принципі сақталатын болғандықтан. K:=D операторы қатеб себебі оң және сол бөліктерінің базалық типі әр түрлі. Егер динамикалық шама өзінің нұсқауын жоғалтса, онда ол <<қоқыс>> болады. Программалауда бұл сөздің мағынасы жадты ауыстыратынб бірақ енді керегі жоқ информацияны береді. Егер программада жоғарыда аталған нұсқаулар қатысатын болса, операторлар бөлімінде төмендегідей жазылады:

    NEW(D); NEW(Р);

    (Екі бүтін айнымалының астындағы динамикалық жадта бөлінген орын. Нұсқаулар сәйкес мәнге ие болады)

    D^:=3; P^:=5;

    (Динамикалық айнымалыларға мәндер берілді)

    P:=D;


    {Р және D нұсқаулары 3-ке тең сол шамаға сілтенеді}ю

    Writeln (P^,D^);

    {3 саны екі рет басылады}

    Осындай үлгіде 5-ке тең динамикалық шама, өзінің нұсқауын жоғалтты да кіргізілмейтін болды. Бірақ ол жадтан орын алады. Міне осы <<қоқыстың>> пайда болу мысалы.

    Мына суреттегі схемада P:=D операторының орындалу нәтижесіндене болғаны көрсетілген

    Болды Қалды

    P:=D


    Р


    5

    P

    5

    D


    3

    D

    3

    Паскальда қажетсіз болып қалған, жадты берілгендерден босататын стандарттық процедура бар. Оның форматы:

    Dispose (<нұсқау>);

    Мысалы, егер Р^ динамикалық айнымалысы керегі жоқ болса, онда Dispose(P) операторы оны жадтан шығарады. Бұдан кейін Р нұсқауының мәні анықталмайды. Әсіресе үлкен массивтерді жоятын жадтарда үнемдеу эффектісі мағыналы болады. MS DOS операциялық системасының басқаруымен жұмыс істейтін Турбо Паскаль нұсқаларында бір программаның астында 64 килобайт жады бөлінеді. Міне осы жадтың статикалық облысы. Үлкен массивті информациялармен жұмыс істегенде бұл аздық етеді. Динамикалық жадтың өлшемі әлдеқайда көп (жүздеген киллобайт). Сондықтан динамикалық деректермен жұмыс істеу программаның орындалуын тежейді. Шамаға кіру 2 қадамға жүзеге асадыЖ алдымен нұсқау ізделеді, содан кейін шама сол бойынша табылады. Үнемі болатын <<келеңсіздіктің сақталу заңы>> орындалады; Жадтағы ұтыс уақытындағы ұтылыспен қорландырады.

    1 мысал. 10 000 сандардан заттық массив құру керек. 0-ден 1-ге дейінгі диапазонда оларды кездейсоқ сандармен толтыру қажет. Массивтің орташа мәнін есептеу керек. Динамикалық жадты тазалау керек. 100-ден 100-ге дейінгі диапазонда бүтін кездейсоқ сандармен толтыру керек, және оның орташа мәнін есептеу керек.

    Program Sr;

    Const NMax=10000;

    Type Diapazon=1..NMax;

    MasInt=Array[Diapazon] of Integer;

    MasReal=Array[Diapazon] of Real;

    Var PIint: ^N|MasInt;

    PReal: ^MasInt;

    I, Miding: LongInt;

    MidReal : Real;

    Begin


    MidReal:=0; MidInt:=0;

    Randomize;

    NEW (PReal);

    {Заттық массивтің астындағы жадтың бөлінуі}

    {Массивтің қосындысы және есептенуі}

    For I:=1 To NMax Do

    Begin PReal^[I]:=Random;

    MidReal:=MidReal+PReal^[I]

    End;

    Dispose (PReal); {Заттық массивті жою}



    NEW (PInt); {Бүтін массивтің астындағы жадтың бөлінуі}

    {Бүтін массивтің қосындысы мен есептеуі}

    For I:=1 To NMax Do

    Begin


    PInt^[I]:=Random (200)-100;

    MidInt:=MidInt6+PInt^[I]

    End;

    {Орташа мәннің қорытындысы}



    Writeln{‘Орташа мән тең:’,MidInt Div Max};

    Writeln(‘Орташа шама тең:’,(MidReal/NMax):10:6);

    End.

    Байланысқан тізімдер.



    Мынадай сұрақты қарастырайық:

    Динамикалық жадқа айнымалы өлшемдегі берілгендердің құрылымын қалай құрау керектігін келесі мысалда талдайық. Физикалық эксперименттер процесінде құралдардың көрсетілуі бірнеше рет анықталады және ары қарай өңдеу үшін компьютер жадына жазылады. Алдын ала қанша өлшем жүргізілетіні белгісіз .

    Егер мұндай берілгендерді өңдеу үшін ішкі жадты (файлдарды) қолданбасақ, онда динамикалық жадта мұны дұрыстап орналастыра аламыз. Біріншіден, динамикалық жад статикалық жадқа қарағанда үлкен информациялар көлемін сақтауға мүмкіндік береді. Екіншіден, динамикалық жадқа бұл сандарды байланысқан тізімдерде ұйымдастыруға болады. Себебі, массивке ұқсас сандардың мөлшерін қосымша қажет етпейді. Байланысқан тізім дегеніміз не? Схемалық түрде оны былай көрсетеді:


    X1 P2



    X2 P3

    X4 Ni 1 111

    X3 P4

    Тізімдегі әрбір элемент екі бөліктен тұрады: информациялық бөлік ( P2,P3 және т.с.с. ) және тізімнің келесі элементін нұсқау бөлігі. (X1,X2 және т.с.с.) Соңғы элемент бос нұсқауды көрсетеді: Ni 1. Осындай типтегі байланысқан бір бағыттағы тізбек деп аталады. Жоғарыдағы тұжырымдалған есептің информациялық бөлігі берілген заңдар тізімі:

    X1 - бірінші өлшеу нәтижесі,

    X2 - екінші өлшеу нәтижесі,

    сол сияқты X4–соңғы өлшеу нәтижесі. Байланысқан тізімнің ерекше қасиеті бар, оны информация түскен сайын толықтырып отыруға болады. Толықтыру тізімнің соңына жаңа элементті тіркеу негізінде жүргізімді.

    Ni 1 мәні соңғы элементте тізбектің жаңа элементіне сілтемемен ауыстырылады:


    X1 P2



    X2 P3

    X3 P4

    X4 P5 111

    X5 Ni 1

    Байланысқан тізім артық жадтан орын алмайды. Түскен информацияға қажетті жағдай бойынша жады сондай көлемде шығындалады. Программада тізбек элементтерін ұсыну мақсатында араласқан тип қолданылады. Біздің мысал үшін мұндай элементтің үлгісі мынадай болуы мүмкін:

    Type Pe=^Elem;

    Elem=Record

    T: Real;

    P: Pe


    End;
    Мұндағы, Ре – Elem айнымалы типіне сілтеме типі. Осы атпен екі жазықтан тұратын аралас тип белгіленген. Оның біріншісі: Т – заттық шама, температурасы сақталған, Р – Elem динамикалық типіне нұсқау. Мұндай жазбада Паскальдың негізгі принциптерінің бірі бұзылған. Кез келген программалық объектке оның жазбасынан кейін сілтеме жасауға болады. Негізінен, Ре типі Elem типі арқылы анықталады. Бірақ Паскальда сілтеме типі мен байланысты, бұл ережеден тыс жалғыз мүмкіндік бар. Программаның келтірілген фрагменті дұрыс болып табылады.

    2 Мысал:


    Type Pe=^TypElem;

    TypElem=Record

    T:Real; P: Pe

    End;


    Var Elem, Beg: Pe;

    X: Real; Ch: Char;

    Begin {Тізімнің алғашқы мекенінің анықтамасы}

    NEW (Elem); Beg:=Elem;

    Elem^.P:=Elem;

    {Тізімге кіргізу мәндерінің диалогтық кірісі және элементтер арасындағы байланыс ұйымы}

    While Elem^ . P<>Nil Do

    Begin


    Write (‘Санды енгізіңіз’);

    ReadLn (Elem^ . T);

    Write (‘Кіруді қайталау? (N/Y)’);

    ReadLn (Ch);

    If (Ch=’n’) or (Ch=’N’)

    Then Elem^ . P:=Nil

    Else Begin

    NEW (Elem^.P);

    Elem:=Elem^.P

    End


    End;

    WriteLn(<<Берілгендерді кіргізу>>);

    {Алынған санды тізбектердің қорытындысы}

    WriteLn (<<Бақылап шығару>>);

    Elem:=Beg;

    Repeat


    WriteLn (N,’:’,Elem^.T:8:3);

    Elem:=Elem^.P

    Until Elem=Nil

    End.
    Beg айнымалы сілтеме тізбектің алғашқы мекенін сақтау үшін қолданылады. Тізбекті әрқалай өңдеу оның бірінші элементінен басталады. Программада өңдеу кезінде тізбектің қалай жүргізілетіндігі көрсетілген. (Берілген мысалда тізімнің информациялық бөлігін рет бойынша басылған). Бір бағытта тізбек – байланысқан тізімнің қарапайым нұсқасы. Программалау практикасында екібағытты тізбектер қолданылады. (әрбір элемент тізімнің келесі элементтеріне нұсқау сақтайды) Осындай берілгендер құрылымдар деп аталады.



    Код генерациясының ақпараттық ұйымы.

    Объективті код генерациясы – бұл ішкі командаларды аударумен және шығару программаларын енгізу тізбегіндегі символдармен түсіндіреді. Объекттік код генерациясы ассемблер тілінде программаны құруда немесе машиналық тілде құруды айтады. Программа ішінің анықтамасы әртүрлі құрылымнан тұруы мүмкін. Сондықтан объектік кодтың генерациясы барлық жағдайда іс - әрекетті орындау керек. Ол сызықтық тізбекте синтаксистік құрылымның қиындығынан туындайды. Код генерациясы функция деп атауға болады. Егер ол синтаксистік ағашта информациялар берсе. Ол идентификатор таблицасында беріледі. Сондықтан объектік кодтың генерациясы орындалғаннан соң программа синтаксистік анализінің қалай орындалғанын және код генерациясына дайындаудың барлық іс- әрекетті орындау керек: Ауыспалы функцияда кеңістік адресі анықталған, ауыспалы типтерде аттары анықталған, констант және шығару программаның синтаксистік конструкциясы берілген. Негізгі программаның принциптері командаларға генерацияларға енгізу тілдеріне есептеуіш жүйенің архитектурасына байланысты. Компилятор синтаксистік енгізілген программаларды орындайды. Содан соң оны семантикалық анализге көшіреді, код генерациясына дайындайды. Сондықтан мұндай компилятор жұмысының схемасы практикада қолданылады. Мәселен бұл жағдайда бір семантикалық анализаторда және бір компиляторда енгізу программасы бүтін түрде келеді. Ереже бойынша компилятор код генерациясые этап бойынша орындайды. Компилятор енгізу программасының текстік синтаксистік конмтрукциясында аяқтайды. Содан соң ол келесі синтаксистік констукцияға келеді. Сонымен барлық енгізілген программа өңдегенше осылай жалғаса береді. Синтаксистік конструкцияның әрбір мағынасын енгізу тілінде анықтауға болады. Оның типін синтансистік анализаторын айқындайды. Мұндай типтерге циклдік оператор, шартты оператор, таңдау операторлары қолданылады. Мұндай типтер синтаксистік конструкциясында программалау тілінде белгілі бір мағына береді. Компилятор енгізу тіліндегі синтаксистік басқару әдісі қолданылады. Бұл әдіс ыңғайлы болу үшін синтаксистік ыңғайды қолданамыз. СУ ауысуының прициптері келесідегідей. Әрбір ағаштың биіктігінде синтаксистік өңдеуде N тізбегі C(N) аралық кодында беріледі. Өз кезегімен ол N биіктігінде кодтарды құруды және N биіктігінің деңгейінде табылады. Бұл процесс төменне жоғары қарай ретімен орындалады. СУ аударуын құру үшін берілген синтаксистік ағашта түпкі ағашты табу керек. Сондықтан әрбір ағаш биіктігі код тізбегін туындатады. Жалпы жағдайда код интерпретациясын алу үшін N биіктігінен C(N)-ді белгілейміз. Бұл принцип бойынша бұл есептің өзіндік мағынасы бар. СУ аударуын қолдану үшін код интерпретациясының есебі әрбір ағаш биікігіне сәйкес келуі керек. Компилятор моделі беріледі, егер синтаксистік анализде енгізу программасы және код генерациясы нәтижелі болса. СУ компиляциясының схемасын программалау тілін енгізгенде көруге болады. Егер СУ аударуының принципі КС тілінде енгізілсе, онда СУ командасын қолдану мүмкін болады. Жалпы жағдайда СУ аударуының схемасы келесі әрекеттермен орындалады:

    • Берілген машиналық клдта немесе ассемблер тілінде компилятор жұмысының нәтижесі.

    • Табылған қателерді және есептеулерді енгізу тізбегінен шығару.

    • Туынды және командаларды орындау.


    Программаны орындаудың ішкі әдістері.

    Компиляторда шығару программасын синтаксистік конструкциясында орындау мүмкіндіктері бірнеше этаптардан тұрады. Этаптарда қолданылатын синтаксистік анализдер жұмыс генерациясында және объектік код оптимизациясында өте ыңғайсыз. Сондықтан операцияда объекті кодты генерациясында программаны таңдау тізбек формасына сәйкес келеді. Программаның барлық ішкі туындысы екі принцип бойынша орындалады. Операторда және операндыда. Бұл екі форманың арасындағы айырмашылықтары жоқ. Қалай операторда орындалса, солай операндыда орындалады. Бұл екеуі өте тығыз байланысты. Сонымен қатар оператор және операндылар бір бірінен ажыратылуы керек. Егер олар әр түрлі ретте кездессе, операторлар және операндылардың мағынасы жоғарыда айтылғандай компьютерде өңдеумен байланысты. Олардың келесі формалары белгілі:



    • Байланысты тізбекті құрылым

    • Көп адресті код және нәтижесі

    • Көп адресті код және нәтижесіз

    • Қайтымды операцияларды жазу

    • Ассемблер және машиналық код

    Әрбір нақты кодта бұл формалардың біреуі қолданылуы мүмкін. Бірақ жиі жағдайда компьютерде бұл формалардың біреуі ғана кездеспейді. Кейбір компьютерлер нәтижелі код береді. Жалпы жағдайда СУ компиляциясында схема қолданылады. Олар синтаксистік өңдеудің фазалары, семантикалық анализдер, объекті кодың генерациясы. Сонда ішкі программада келесі алгоритмдер қадамы орынды. Барлық жағдайда компьютерлер әрқашан машиналық командалармен жұмыс жасай алады.

    Кодтарды құру. Үш адресті код.

    Код дегеніміз белгілердің, символдардың ақпаратты берудің ережелерінің жиынтығы.

    Екілік және үштік кодты айыруға болады. Біріншісінің алфавиті 2 символмен шектелген (0,1), ал екіншісі 3-тік символдармен (-1,0,1). Кодты қарастыратын сигналдар келесідей сипатталады.


    • Униполялы код.

    • Полярлы код.

    • Биполярлы код.

    Биполярлы кодтар каналдарда анықтамаларды беру үшін қолданылады. Мұндағы бірліктер оң және теріс импульстармен анықталады. Егер импульстің қалпы ноль болса, ол тоқтатылады. Биполярлы кодтау және қателерді қарастыруға керек. Егер нольдің орнына бір пайда болса, онда бір нольге айналады. Бұл тез айқындалады.

    Дискретті ақпараттық әдістерін қарастырайық. Бірінші мысал болып Морзе алфавиті болып табылады. Онда латын әріптері және цифрлары кодталған олар нүктеден және сызықшадан тұрады. Кодталған элементтерді енгізу алфавитында символдар деп аталады. Символ деп ереже бойынша сандарды әріптерді, иероглифтерді пробел белгісін пунктуациялық белгілерді операциялық символдарды арнайы белгілерді ұғамыз.

    Морзе кодының фрагменттері.


    Енгізу алфабитінің символдары

    МСС бойынша мнемоникалық ұғымдар




    A

    B

    C



    D

    E



    Y

    Z

    1



    9


    Alfa

    Bravo


    Charlie

    Delta


    Echo

    Yankee



    Zulu

    One


    nine



    .-

    -…

    -.-.



    -..

    .



    -.-

    -…

    .--



    --.


    Кодталған элементтер енгізу алфавитында белгілер деп аталады. Енгізу алфавитіндегі әртүрлі белгілер санын белілік деп аталады. Кодталған символдар белгілерінің санын кодтың разрядталуы деп аталады. Соңғы кодта бірінен кейін бірі орындалады. Ал кейбір белгілер параллель біге орындалады. Морзе азбукасында:



    • Символдар деп алфавит тілінің элементтерін және сандық алфабитті атайды.

    • «Нүкте» және «Сызықша» белгілері бойынша (немесе «+» немесе «-» немесе «1» немесе «0»).

    • Екі белгілеу бойынша Морзе азбукасы екі мағыналы болып келеді. (Болжарлық, екілік код) егер олар үшеу болса, онда біз үштік тернарлық үш мағыналы кодпен жұмыс атқарушы едік.

    • Морзе азбукасы бірден беске дейінгі әріптермен және цифрлармен берілсе онда мұндағы код ауыстырылымдылы разрядты деп атлады. Егер белгілеулер бірінен кейін бірі берілсе онда Морзе азбукасы кезекті код деп аталады. Бірінші телеграф және радиобайланыс әдістері осы Морзе азбукасымен орындалған. Мұнда нүкте және сызықша түрінде импульс құрылғысы берілген. Олар телеграф лентасы арқылы XX ғасыр басында бес разрядты телеграф кодына айналды. Бірде сегіздік таблицасында белгілі кодтар тізбегі берілген. Олардың кейбіреуі ең басында байланыс үшін анықтамаларды кодтау үшін ЭВМ-да ақпаратты өңдеу үшін қолданылған.

    • Бодо коды – бес разрядты код. Европалық стандартты телеграф байланысында қолданылған. (Екінші атауы IA-1- international alphabet # 1);

    • М-2 немесе IA-2 телеграф коды ол бүкілхалықтық комитетпен телефон және телеграф байланысының және Бодо кодының орнына қолданылған.

    • ASCII стандартты 7 биттік код. Ол 128 символдан тұрады, және бағанның символдары латынша сандары арнайы белгілеулермен және символдармен жазылған. Бұл кодқа ұлттық символдар 10 бинарлық комбинация құрылған.

    • EBCDIC 8- разрядты код IBM фирмасымен ұсынылған. IBM/360-375 машина сериясына арналған.

    • ASCII -8-8 –разрядты код ішкі және сыртқы анықтамаларды беруде және жүйелерді орындауда қолданылады. Ол 128- симролдан тұрады, оның ұлттық кодтық таблицасы бар.

    • Холлерита коды – ол ДК-ға ұсынылған. Содан ол ақпаратты енгізудің кодын ЭВМ перфокартында қолданылады. Ақырғы сөздерді өзгерісте жүйелерді символдың кодтауда универсалды код UNICODE қолданылады. Ол 16- разрядты кодтау символдарынан тұрады.

    UNICODE стандартты техникалық комитеті екі үлкен фирмада өз жұмыстарын көрсеткен. Ол кодты анықтайды және әр түрлі символдарды, әріптерді, иероглифтерді, цифрларды идентификациялайды. Код 7-8 – биттік және ASCII орнына қолданылады. 16- разрядты UNICODE 65536 символдарды 128 ASCII кодының орнына кодталады.
    Кейбір кодтың кестелік фрагменттері.

    Символ

    IA-2

    Бодо

    ISO-7

    EBCDIC

    ASCII-8

    Холлерид

    А

    03

    10

    41

    С1

    А1

    900

    В

    19

    06

    42

    С2

    А2

    880

    С

    OE

    16

    43

    C3

    A3

    840

    D

    09

    1E

    44

    C4

    A4

    820

    a







    61

    81

    E1




    b







    62

    82

    E2




    c







    63

    83

    E3




    d







    64

    84

    E4




    .(нүкте)

    1C

    05

    2E

    4D

    4E

    842

    ,(үтір)

    0C

    09

    2C

    6B

    4C

    242

    :(қос нүкте)

    1E




    3B

    5E

    5B

    40A

    ?(сұрақ)

    10

    0D

    3F

    6F

    5F

    206

    UNICODE 28000 әріптерді, белгілерді, тіркестерді, иерогливтерді дүние жүзі ұлттық тілдерін қамтамассыз етеді. UNICODE 30000 математикалық және техникалық символдарды құрайды.

    Бірлік стандартты тілдік форматта ол халықаралық алфавиттерді кодтауды ретке келтіреді. Мұндағы тілдер иврит және араб тілдері. Мұнда мәтін оңнан солға қарай жазылады. Анықтамаларды беруде қалдық қодтар қолданылады. Оларға бірінші кезекпен қатені табатын кодтар жатады. Бұл кодтарды циклдің қалдық кодтары деп аталады. Бұл кодтың түрі барлығын нақты анықтайды. Бұл код берілген блокта және CRC циклдік қалдық кодында қатені табу үшін кеңінен қолданылады. Ол берілген блокта қайталанып орындалады. Егер нәтиже шығарылмаса онда мазмұнда қате бар деген сөз. Қатені түзеуде кодтар маңызды роль аталады. Бұл кодтарды қолдануда берілген қателерді анықтауға және түзетуге болады. (Хемминг коды берілген блоктағы қателерді түзейді).



    Кодтау және сандарды түзеу.

    Символдарды кодтаудан басқа ЭВМ-да сандарды кодтау беріледі. Біз заттарды ондық санаумен және 100-дік санаумен санауға т үйрендік, он бірлік ондықты құрайды. Он ондық жүздікті , он жүздік мыңдықты құрайды. Он ондық жүйелік санау болып табылады. Мысалы он екілік жүйелік санау немесе Римдік жүйелік санау бар. Ең қарапайым әдіс болып компьютерлік жүйе болып табылады. Санау жүйесі символдар көмегімен сандарды анықтайды, оның мағыналарын ашады. Жүйелік сандарды санауда келесі түрлерге бөлінеді:



    • Позициялық емес;

    • Позициялық;

    Позициялық емес жүйелік санау сандарды реттеген кезде олардың мағынасын

    ауыстырмайды. Ең қарапайым мысал болып жүйелік санау яғни ондағы сандар бірлікпен немесе таяқшамен беріледі.

    1=I;

    2=II;


    5=IIIII;

    10=IIIIIIIIII.

    Келесі символдар санмен беріледі.

    -1;


    -6;

    -12;


    -24;

    -60;


    -365,

    және ереже бойынша сандармен ол кез келген символдың комбинацмяларды жазуына және оның нәтижесін шығаруға болады. Мысалы 444 – үш әдіспен жазуға болады.

    (365+60+2+6+1);

    (6+1+365+60+12);



    Позициялық жүйелік санау әрбір санның мағынасын ашады. Оның жүйелік санауы позициялық болып табылады.

    Мысалы:


    23=2*10+3;

    32=3*10+2;

    және 23=32
    Римдік жүйелік санау араласқан болып табылады. Оның сандарының әрбір мағынысы оның реттілігінің орнына байланысты.

    VII;


    VI;

    IV.


    V- бесті білдіреді, I- бірді білдіреді. Ал екінші жағынан цифрлардың бір – бірімен қалай орналасқаны маңызды.

    VII=5+1+1=7;

    VI=5+1=6;

    IV=5-1=4.



    Жүйелік санаудың негізі болып әртүрлі цифрлардың саны олардың позициялық жүйелік санауда қолданылады. Цифрлардың мағынасы 0-дан Р-1-ге санау жүйесі екі түрде беріледі.
    N=

    Төменгі индекстер цифрда мыналарды анықтайды:

    • Индекстің мағынасының ондығы;

    • Бүтін мағынаның тірістігі;

    Максималды бүтін сан a m разрядында берілген.

    N=

    Минималды бөлшек сан S разрядында берілген.



    N=P

    Екілік санау жүйесі Р=2 0 және 1 екі цифрының ақпаратын қолданады. Бірінші жүйелік санаудан екінші жүйеге көшу ережесі пайда болады. Мысалы екілік сан 101110,101 ондық санға 46,625-ке тең.



    101110,101=1*2+0*2+1*2+1*2+1*2+0*2+1*2=46.625

    жүктеу 14,81 Mb.

    Достарыңызбен бөлісу:
  • 1   ...   94   95   96   97   98   99   100   101   ...   127




    ©g.engime.org 2024
    әкімшілігінің қараңыз

        Басты бет
    рсетілетін қызмет
    халықаралық қаржы
    Астана халықаралық
    қызмет регламенті
    бекіту туралы
    туралы ережені
    орталығы туралы
    субсидиялау мемлекеттік
    кеңес туралы
    ніндегі кеңес
    орталығын басқару
    қаржы орталығын
    қаржы орталығы
    құрамын бекіту
    неркәсіптік кешен
    міндетті құпия
    болуына ерікті
    тексерілу мемлекеттік
    медициналық тексерілу
    құпия медициналық
    ерікті анонимді
    Бастауыш тәлім
    қатысуға жолдамалар
    қызметшілері арасындағы
    академиялық демалыс
    алушыларға академиялық
    білім алушыларға
    ұйымдарында білім
    туралы хабарландыру
    конкурс туралы
    мемлекеттік қызметшілері
    мемлекеттік әкімшілік
    органдардың мемлекеттік
    мемлекеттік органдардың
    барлық мемлекеттік
    арналған барлық
    орналасуға арналған
    лауазымына орналасуға
    әкімшілік лауазымына
    инфекцияның болуына
    жәрдемдесудің белсенді
    шараларына қатысуға
    саласындағы дайындаушы
    ленген қосылған
    шегінде бюджетке
    салығы шегінде
    есептелген қосылған
    ұйымдарға есептелген
    дайындаушы ұйымдарға
    кешен саласындағы
    сомасын субсидиялау