Некоторые алгоритмы решения задач с использованием строковых переменных

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«ДОНСКОЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Колледж экономики, управления и права

Методические рекомендации

Для УЧЕБНОЙ практиКИ студентов

По дисциплине «Основы алгоритмизации и программирования»

Специальность

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ И АВТОМАТИЗИРОВАННЫХ СИСТЕМ

Автор-составитель Шинакова С.В.

 

Ростов-на-Дону 2011


Рассмотрены на заседании Ц(П)К специальности 230105.51 Программное обеспечение вычислительной техники и автоматизированных систем

«07» апреля 2011 г. Протокол № 8

Председатель Ц(П)К _____________ Шинакова С.В.

 




Практическая работа  №3

Использование строковых переменных в среде программирования Pascal

Цель работы

Научиться принципам работы со строковыми переменными в среде программирования Pascal.

 

Задачи работы

Изучить приемы решения задач с использованием строковых переменных.

 

Порядок выполнения работы

3.1 В среде программирования Turbo Pascal составить и отладить программу решения следующей задачи:

Задан список студентов из 7 фамилий. Распечатать данный список в столбец и выполнить задание в соответствии с указанным вариантом приложения А, Б.

3.2 Провести анализ результатов работы программы.

3.3 Составить отчет о проделанной работе.

 

Отчет о проделанной работе должен содержать

- название и цель работы;

- номер и условие своего варианта;

- текст программы;

- полученные при расчетах результаты;

- анализ полученных результатов;

- ответы на контрольные вопросы пункта 6 в соответствии с указаниями преподавателя.

Теоретические положения

Описание переменных строкового типа

Для обработки текстов в среде программирования Turbo Pascal используется тип STRINGI (строка). Количество символов в строке-переменной задается объявлением типа STRING[N], где значение N может быть любой константой порядкового типа, не превышающей 255.

Объявление типа STRING[N] указывает, что число символов в строке-переменной может изменяться в диапазоне от 1 до N. Если при описании типа количество символов в строке не указано, то по умолчанию длина строки принимается максимально возможной, т.е. 255 символов.

Строка в Turbo Pascal трактуется как цепочка символов. К любому символу в строке можно обратиться так же, как к элементу символьного массива типа ARRAY [1..N] OF CHAR. Над символами строки можно осуществлять необходимые действия и, тем самым, изменять содержание строки, ее длину и т.д.

Пример:

program pr1;

var st:string[6];

i:integer;

begin

 st:=' primer ';

 for i:=1 to 6 do

 write(st[i], ' ');

end.

 

В результате работы данной программы на экран будут распечатаны следующие значения:

p r i m e r

Таким образом, первым символом st[1] в переменной st является буква p, вторым символом st[2] является r, третьим  i  и т.д.

К строкам можно применять операцию сцепления, например:

program pr2;

var st:string[3];

begin

       st:=’a’+’b’+’c’;

writeln(st);

end.

 

В результате работы предложенной выше программы переменной st будет присвоено значение ’abc’.

Допускается сравнение строковых переменных. Операции отношений =, <>, >, <, >=,<= выполняются над двумя строками посимвольно, слева направо, с учетом внутренней кодировки символов.

Примеры сравнения строковых переменных с результатом «Истина»:

‘A’ < ‘B’ 

‘Turbo Pascal’ > ‘Turbo’

‘2’ > ’1’

 

Процедуры и функции по работе со строками

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

5.2.1 Функция Concat(S1[,S2,…,SN]): string – сцепляет (объединяет) строки S1, S2,…, SN. Параметры, указанные в квадратных скобках, не являются обязательными.

Пример использования функции:

program pr3;

var

S: string;

begin

S:= Concat('ABC', 'D');

writeln(S);                       {ABCD}

end.

       Здесь и далее (в примерах использования строковых операторов) в фигурных скобках приводится выводимый на экран результат работы программы.

 

5.2.2 Функция Copy(S: string; Index, Count: integer): string – копирует из строки S количество Count символов, начиная с символа с номером Index.

Пример:

program pr4;

var S: string;

begin

S:= 'ABCDEF';

S:= Copy(S, 2, 3);

writeln(S);                  {BCD}

end.

 

5.2.3 Функция Length(S: string):byte – определяет длину строки S.

Пример использования функции:

program pr5;

var

S: string;

begin

s:='ABCD';

Writeln(Length(S));  {4}

end.

 

5.2.4 Функция Pos(SubS, S: string):byte – отыскивает в строке S первое вхождение подстроки SubS и определяет номер позиции, с которой она начинается. Если подстрока не найдена, то выдается 0.

Например:

program pr6;

var S: string;

begin

S:= ' 123.5';

{Замена всех пробелов нулями}

while Pos(' ', S) > 0 do

S[Pos(' ', S)]:= '0';

writeln(S);       {000123.5}

end.

 

5.2.5 Функция UpCase(C: char):char – преобразует строчную латинскую букву в прописную. Любые другие символы возвращаются без преобразования.

Пример:

program pr7;

 var

s: string;

 begin

s:='red';

s[1]:= UpCase(s[1]);

writeln(s);     {Red}

 end.

 

5.2.6 Процедура Delete(var S: string; Index, Count: integer) – удаляет количество Count символов из строки S, начиная с символа с номером Index.

Пример использования процедуры:

program pr8;

 var

s: string;

 begin

s:= 'Иванов Петр';

Delete(s,8,4);

writeln(s);   {Иванов}

 end.

 

5.2.7 Процедура Insert(SubS: string; var S: string; Index: integer) – вставляет подстроку SubS в строку S, начиная с символа с номером Index.

Пример:

program pr9;

var

S: string;

begin

S:= 'Петр Иванов';

Insert('Петрович ', S, 6);

writeln(S);    {Петр Петрович Иванов}

end.

 

5.2.8 Процедура Str(X [:Width [:Decimals]]; Var S: string) – преобразует число Х в строку символов S. Параметры Width  и Decimals задают формат преобразования (общую ширину поля и количество символов в дробной части соответственно).

Пример:

program pr10;

var

S: string[12];

begin

Str(5461, S);

writeln('Результат: '+S+' балл');      {Результат: 5461 балл}

end.

 

5.2.9 Процедура Val(S: String; var X; var Code: integer) – преобразует строковое значение S  в его численное представление X типа Real или Integer. Параметр Code содержит признак ошибки преобразования (0 – нет ошибки), например:

program pr11;

var I, Code: Integer;

S:string;

begin

S:='7908';

Val(S, I, Code);

writeln(I,' ',Code);    {7908 0}

end.

 

Некоторые алгоритмы решения задач с использованием строковых переменных

Рассмотрим алгоритмы по работе со строковыми переменными на примере некоторых задач.

Задача 1. Задан список из 6 слов. Определить, сколько слов списка начинается на букву «п».

Одно из возможных решений данной задачи имеет следующий вид:

program z1;

var

s: string[20];

i,k:integer;

begin

k:=0;

for i:=1 to 6 do

begin

writeln('Введите слово');

readln(s);

if s[1]='п' then k:=k+1;

end;

 writeln(k);

end.

 

       В приведенной выше программе обработка слов происходит без их последующего хранения, т.е. на каждом шаге цикла переменной s присваивается значение очередного слова и происходит сравнение первой буквы s[1] данного слова s с образцом 'п'.

       Примечание. Аналогично можно определить и количество слов, заканчивающихся на ту или иную букву. В этом случае достаточно ввести некоторую промежуточную целочисленную переменную len, служащую для обозначения длины слова s и вычисляемую как length(s), после чего проводить сравнение последней буквы s[len] слова s с образцом.

 

Задача 2. Задан список из 8 слов. Найти самое короткое слово в списке. Если таких слов несколько, то распечатать их в один столбец.

Решение поставленной задачи сводится к нескольким этапам: ввести список слов в виде массива строковых переменных; подсчитать длину каждой строки; определить наименьшую из длин; распечатать те строки массива, длина которых совпадает с наименьшей.  

Пример возможного решения поставленной задачи:

program z2;

type t=array[1..8] of string[20];

tt=array[1..8] of integer;

var s: t;

       n: tt;

  i, min: integer;

begin

 for i:=1 to 8 do

begin

writeln('Введите слово');

readln(s[i]);

n[i]:=length(s[i]);

end;

 min:=n[1];

 for i:=2 to 8 do

if min>n[i] then min:=n[i];

 for i:=1 to 8 do

if n[i]=min then writeln(s[i]);

end.

 

       В данной программе для обозначения слов используется массив строковых переменных s, для обозначений соответствующих им длин слов – целочисленный массив n. Наименьший элемент массива n хранится в виде переменной min.

 

Задача 3. Задана строка из двух слов, разделенных пробелом. Поменять в данной строке слова местами.

Пример программы-решения задачи:

program z3;

 var s: string[40];

    s1,s2: string[20];

    i,n: integer;

 begin

writeln('Введите строку');

readln(s);

n:=length(s);

i:=pos(' ', s);

s1:=copy(s, 1, i);

s2:=copy(s, i+1, n-i);

s:=s2 + ' ' + s1;

writeln(s);

end.

 

       В данной программе переменная s служит для обозначения строки из двух слов, переменные s1 и s2 – для обозначения первого и второго слова строки соответственно. Алгоритм решения заключается в том, что сначала с помощью оператора pos выясняется, каким по счету символом в строке s находится пробел. Далее в строке выделяются две подстроки: одна включает все символы левее пробела (первое слово), другая – правее пробела (второе слово). В конце программы слова сцепляются в обратном порядке с использованием разделяющего их пробела.

Задача 4. Пусть задана некоторая произвольная цифра. Создать программу, позволяющую вывести на экран название данной цифры в прописном виде, например, «5 – пять», «8 - восемь» и т.д.

Возможное решение задачи:

 program z4;

var n:integer;

s:string[30];

begin

 writeln('Введите цифру');

 readln(n);

case n of

 0: s:='ноль';

 1: s:='один';

 2: s:='два';

 3: s:='три';

 4: s:='четыре';

 5: s:='пять';

 6: s:='шесть';

 7: s:='семь';

 8: s:='восемь';

 9: s:='девять';

else

 s:=' ­ не является цифрой';

end;

writeln(n,' - ', s);

end.

 

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

 

       Задача 5. Задан двумерный строковый массив, состоящий из 3 строк и 4 столбцов. Выяснить, сколько раз встречается латинская буква «а» в первом и последнем столбцах массива и поменять данные столбцы местами.

Пример решения задачи:

program z5;

 type mas=array[1..3,1..4] of string[10];

 var s: mas;

  i, j, k, n_1, n_4: integer;

c: string[10];

begin

 for i:=1 to 3 do

for j:=1 to 4 do

begin

writeln('vvedite s[', i:2, j:2,']');

readln(s[i,j]);

end;

writeln('ishodnii masiv');

for i:=1 to 3 do

begin

for j:=1 to 4 do write(s[i,j]:10,' ');

writeln;

end;

n_1:=0;

n_4:=0;

for i:=1 to 3 do

   for k:=1 to 10 do

   begin

     if s[i,1][k]='a' then n_1:=n_1+1;

      if s[i,4][k]='a' then n_4:=n_4+1;

   end;

for i:=1 to 3 do

begin

c:=s[i,1];

s[i,1]:=s[i,4];

s[i,4]:=c;

end;

writeln('V 1-m stolbze ',n_1, ' а');

writeln('V 4-m stolbze  ',n_4, ' а');

writeln(‘Poluchenii masiv');

for i:=1 to 3 do

begin

for j:=1 to 4 do write(s[i,j]:10,' ');

writeln;

end;

 end.

 

Здесь вспомогательная переменная с используется при перестановке местами элементов первого и четвертого столбцов; переменные n_1 и n_4 содержат количество букв «а» в первом и четвертом столбцах матрицы соответственно.

 

Контрольные вопросы

1) Для чего служит тип STRING?

2) Как задать количество символов в строковой переменной?

3) Сколько символов могут содержать строковые переменные a и b, если они были описаны как var a: string; b: string[15]?

4) Как можно обратиться в программе к первому символу строковой переменной s?

5) Как происходит сравнение строковых переменных?

6) Какими способами можно сцепить строковые переменные?

7) Поясните назначение и формат оператора Length.

8) Чему равно значение функции Length('program')?

9) Как удалить несколько символов из строковой переменной?

10) Как добавить несколько символов в строковую переменную?

11) Поясните назначение операторов Str и Val.

12) Для чего служит оператор UpCase?

 


ПРИЛОЖЕНИЕ А



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: