Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Операции со строками





#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <sys/mman.h>

#include <sys/neutrino.h>

#include <sys/siginfo.h>

#include <hw/inout.h>

#include <pthread.h>

 

struct sigevent event;

 

const struct sigevent *

isr_handler (void *arg, int id);

void * int_thread (void *arg);

 

main ()

{

clock_t prevtime,curtime;

 

// start up a thread that is dedicated to interrupt

// processing:

SIGEV_INTR_INIT(&event);

pthread_create (NULL, NULL, int_thread, NULL);

 

//wait for 10 seconds:

prevtime=clock();

do{curtime=clock();}

while(curtime<prevtime+10*CLOCKS_PER_SEC);

}

 

// this thread is dedicated to handling and

// managing interrupts:

void * int_thread (void *arg)

{

unsigned char flags;

clock_t prevtime,curtime;

int k;

 

// enable I/O privilege:

ThreadCtl (_NTO_TCTL_IO, NULL);

 

// enable I/O port access:

mmap_device_io(1, 0x60);

 

printf ("Started OK");

prevtime=clock();

 

// attach the ISR to IRQ 1:

if(InterruptAttach (1, isr_handler, NULL, 0, 0)!=-1)

printf ("Attached OK");

 

k=1;

while (1)

{

if(InterruptWait (NULL, NULL)==-1)

{

printf ("Wait failed");

break;

};

curtime=clock();

printf (" %ld ",curtime);

 

if(curtime>prevtime+CLOCKS_PER_SEC/10)

{

prevtime=curtime;

out8(0x60,0xFF);

printf (" _%d_ ",k);

k++;

}

InterruptUnmask(1,0);

}

}

 

// this is the ISR:

const struct sigevent * isr_handler (void *arg, int id)

{

InterruptMask(1,0);

return (&event);

}

 

Лабораторная работа № 7

СТРОКИ

ЦЕЛЬ РАБОТЫ

Целью работы является приобретение навыков алгоритмизации и программирования задач, оперирующих строковыми типами данных:

- ввод и вывод строковых данных;

- обработка строковых данных;

- использование стандартных процедур и функций языка Turbo-Pascal для обработки строковых данных.

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

Основные понятия и определения

В Турбо-Паскале существует тип данных STRING (строка), специально предназначенный для обработки строк (цепочек символов). Этот тип данных занимает промежуточное положение между простыми типами данных (целочисленные, вещественные, логические, символьные, интервальные, перечисляемые) и структурированными типами данных (массивы, записи, множества).

Обработка строковых данных является необходимым элементом программ, работающих с текстами. К таким программам относятся программы лингвистического анализа текстов, текстовые редакторы, программы, работающие в диалоговом (интерактивном) режиме, программы, содержащие текстовые пояснения результатов своей работы.

Строка – последовательность символов (от 0 до 255), заключенная в апострофы. При составлении программ используются строковые константы и строковые переменные.

Строковые константы – элементы данных, значения которых известны заранее, описаны в разделе описания констант и в ходе выполнения программы не изменяются. Формат описания строковых констант

CONST

<идентификатор> = <значение>;

Например,

CONST

ZAG = `Результат расчета`;

VAR1 = ` Вариант №1 `;

VAR2 = ` Вариант № 2`;

KNIGA = `Турбо-Паскаль 7.0`;

Строковые переменные – элементы данных, которые по ходу выполнения программы могут изменять значение и количество символов в пределах от 0 до числа, равного заданной программистом максимальной длины строковой переменной. Определить строковую переменную можно двумя способами.

1. Определение через описание типа в разделе описания типов.

Формат

TYPE

<имя типа> = STRING [максимальная длина строки];

VAR

<идентификатор1, идентификатор2,…>: <имя типа>;

где STRING – зарезервированное слова (строка);

максимальная длина строки – наибольшее допустимое количество символов переменной данного типа (;255 ). Например,

TYPE

FLO = STRING [130];

FTK = STRING; {По умолчанию длина строки равна 255}

VAR ST1: FLO;

ST2, ST3: FTK;

2. Определение непосредственно в разделе описания переменных

Формат

VAR ST4, ST5: STRING [60];

ST6,ST7: STRING;

Операции со строками

Выражения, в которых операндами служат данные строкового типа, называются строковыми выражениями. Они могут состоять из:

- строковых констант;

- строковых переменных;

- знаков операций;

- указателей процедур;

- указателей функций.

Над строковыми данными допустимо выполнять операции сцепления и операции отношения. Операции сцепления (+) применяются для сцепления нескольких строк в одну результирующую строку, длина которой не должна превышать 250 символов.

Например, выражение

`Процессор ` + ` Intel ` + ` Celeron ` + ` 1.7/20 GHz`

дает результат `Процессор Intel Celeron 1.7/20 GHz`,

а выполнение операторов

STR1:= `Группа студентов `;

STR2:= `ФК- 418`;

STR3:= STR1+STR2;

дает строку `Группа студентов ФК- 418`.

Такой же результат можно получить и так

STR3:= STR1+`ФК- 418`.

Операции отношения (=, <>, <, >, >=, <=) проводят сравнение двух строковых операндов и имеют приоритете более низкий, чем операции сцепления. Это значит, что сначала выполняются все операции сцепления (если они присутствуют в данном строковом выражении), а затем операции отношения.

Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией (см. Приложение).

Результат выполнения операций отношения над строковыми данными всегда имеет булевский тип (boolean), и равен TRUE, если выражение истинно, и FALSE, если выражение ложно.

Например,

Выражение Результат

`COM1` < `KOM2` TRUE

`DOS1.0` > `DOC1.0` TRUE

`АККОРД` < `AKKORD` FALSE

Строки считаются равными, если они равны по длине и содержат одни и те же символы.

Если строки имеют различную длину. Но в общей части символы полностью совпадают, считается, что более короткая строка меньше.Для присваивания строковой переменной результата строкового выражения используется оператор присваивания (:=).

Например, STR10:= `Название факультета`;

STR11:= STR10 + `ФЭМФ`;

Если значение переменной после выполнения оператора присваивания превышает по длине максимально допустимую величину, указанную при описании этой переменной, то все лишние символы справа отбрасываются.

Например,

Описание Строковое выражение Получаемое значение

переменной А переменной А

A: STRING [14]; A:= `Группа ФК-418`; `Группа ФК-418`

A: STRING [9]; A:= `Группа ФК-418`; `Группа ФК`

A: STRING [6]; A:= `Группа ФК-418`; `Группа`

В одно выражение допускается включать операнды строкового и литерного (CHAR) типа. Если при этом литерной переменной присваивается значение строкового типа, фактическая длина строки должна быть равна единице, иначе возникает ошибка выполнения. Например,

VAR LITERA: CHAR;

ST1, ST2: STRING [12];

BEGIN

LITERA:= `A`;

ST1:= ‘КЛАСС ’;

ST2:= ST1 + LITERA; {Дает результат «КЛАСС А»}

ST1:= ‘B’;

LITERA:= ST1;

ST2:= ‘B2’;

LITERA:= ST2; {Ошибка, т.к. литерной переменной нельзя присваивать значения длиной более одного символа}

К отдельным символам строки можно обращаться по номеру (индексу) данного символа в строке. Индекс определяется выражением целочисленного типа, которое записывается в квадратных скобках. Например, после выполнения присваивания

STR5:= ‘Специальность ФК’;

выражение STR5[1] дает обращение к первому символу, а выражение

STR5[15] + STR5[16]

дает значение «ФК».

Запись STR5[0] дает доступ к нулевому байту, содержащему значение текущей длины строки. Это значение не должно превышать число 255.

Замечание.

При вводе и обработке строковых данных кроме непосредственного указания входящих в эти строки символов для обозначения символов можно использовать соответствующие им ASCII коды. В этом случае перед числом, обозначающим код ASCII символа, необходимо поставить знак #. Таким образом можно в качестве элементов строк задавать и символы, не обозначенные на клавиатуре.

Например

VAR ST1: STRING [32];

BEGIN

ST1:= ‘TEKST’ + ‘ ‘ + #3;

Переменной ST1 будет присвоено значение

‘TEKST ♥’

Фрагмент таблицы обмена информацией ASCII CARACTER CODE CARD приведен в Приложении А.







Дата добавления: 2015-08-31; просмотров: 425. Нарушение авторских прав; Мы поможем в написании вашей работы!




Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...


Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...


Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...

Краткая психологическая характеристика возрастных периодов.Первый критический период развития ребенка — период новорожденности Психоаналитики говорят, что это первая травма, которую переживает ребенок, и она настолько сильна, что вся последую­щая жизнь проходит под знаком этой травмы...

РЕВМАТИЧЕСКИЕ БОЛЕЗНИ Ревматические болезни(или диффузные болезни соединительно ткани(ДБСТ))— это группа заболеваний, характеризующихся первичным системным поражением соединительной ткани в связи с нарушением иммунного гомеостаза...

Способы тактических действий при проведении специальных операций Специальные операции проводятся с применением следующих основных тактических способов действий: охрана...

Искусство подбора персонала. Как оценить человека за час Искусство подбора персонала. Как оценить человека за час...

Этапы творческого процесса в изобразительной деятельности По мнению многих авторов, возникновение творческого начала в детской художественной практике носит такой же поэтапный характер, как и процесс творчества у мастеров искусства...

Studopedia.info - Студопедия - 2014-2025 год . (0.014 сек.) русская версия | украинская версия