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

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

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






#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; просмотров: 405. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

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

Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Именные части речи, их общие и отличительные признаки Именные части речи в русском языке — это имя существительное, имя прилагательное, имя числительное, местоимение...

Интуитивное мышление Мышление — это пси­хический процесс, обеспечивающий познание сущности предме­тов и явлений и самого субъекта...

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

Методика обучения письму и письменной речи на иностранном языке в средней школе. Различают письмо и письменную речь. Письмо – объект овладения графической и орфографической системами иностранного языка для фиксации языкового и речевого материала...

Классификация холодных блюд и закусок. Урок №2 Тема: Холодные блюда и закуски. Значение холодных блюд и закусок. Классификация холодных блюд и закусок. Кулинарная обработка продуктов...

ТЕРМОДИНАМИКА БИОЛОГИЧЕСКИХ СИСТЕМ. 1. Особенности термодинамического метода изучения биологических систем. Основные понятия термодинамики. Термодинамикой называется раздел физики...

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