Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


Решето Эратосфена. Составить программу поиска простых чисел в промежутке [1;n]. число n вводиться с клавиатуры.

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

Разработка алгоритмов и программ обработки строк. Использование множеств для решения задач

Цель работы: научиться составлять алгоритмы и программы обработки строк, научиться использовать множества для решения задач.

Теоретические сведения

Copy (st,p,n) – из строки st копируется n символов в память, начиная с позиции p.

Delete (st,p,n) – Из строки st удаляется n символов, начиная с p.

Insert(st1,st2,p) – Вставить строку st1 в st2, начиная с позиции p.

Length (st) – Вычисляет длину строки st.

Pos (st1,st2) – Находит позицию первого появления строки st1 в строке st2.

Str(n,st) – Процедура перевода цел. переменной n в строку st.

Val(st,n,m) – Процедура переводит содержимое строки st в целочисленную переменную n, причем m – номер ошибочного символа.

UpCase (Ch) — преобразует строчную букву в прописную. Обрабатывает буквы только латинского алфавита.

Concat (Strl,Str2,...,StrN) — выполняет сцепление строк Strl, Str2,..,StrN в том порядке, в каком они указаны в списке параметров. Сумма символов всех сцеплен​ных строк не должна превышать 255.

 

d:=copy(a,x,y) функция, возвращает копию из y (integer) знаков части строки a (string), начиная с позиции x (integer). Формат: d:=copy(a,x,y). Результат записывается в переменную d, например:

a:='бегемот';

d:=copy(a,5,3);

writeln(d);

результат - мот

delete(a,x,y) процедура, удаляет y (integer) знаков части строки a (string), начиная с позиции x (integer). Формат: delete(a,x,y). Результат записывается в переменную а, например:

a:='антрекот';

delete(a,1,5);

writeln(а);

результат - кот

insert(a,b,x) процедура, вставляет строку a (string) в строку b (string), в позицию x (integer). Формат: insert(a,b,x). Результат записывается в переменную b, например:

b:='коледж';

a:='л'

insert(a,b,3);

writeln(b);

результат - колледж

x:=pos(a,b) функция, возвращает номер позиции, с которой располагается подстрока а (string), в строке b (string). Формат: x:=pos(a,b). Результат записывается в переменную x, например:

b:='колледж';

a:='л'

x:=pos(a,b);

writeln(b);

результат – 3

x:=length(a) функция, возвращает длину строки а (string). Например:

a:='школа';

x:=length(a);

writeln(x);

результат 5.

x:=ord(a) функция, возвращает цифровой код символа а (char). Например:

a:='Й';

x:=ord(a);

writeln(x);

результат 137

a:=chr(x) функция, возвращает символ а (char) по его цифровому коду. Например:

х:=137;

a:=chr(x);

writeln(а);

результат - Й.

 

Значение Str Выражение Результат
'абвгде' 'река Волга' Delete(Str, 4, 2); Delete(Str, 1, 5); 'абве' 'Волга'

 

Значение St Выражение Результат
'ABCDEFG' 'ABCDEFG' Copy(St, 2, 3) Copy(St, 4, 10) 'BCD' 'DEFG'

 

Значение St Выражение Результат
'123456789' 'System 370' Length(St) Length(St)  

 

Значение Str1 Выражение Результат
'abcdef ' 'abcdef' Pos('de',Strl) Pos('r',Strl)  

 

Значение Ch Выражение Результат
'd' UpCase(Ch) 'D'

 

Выражение Результат
Concat('AA','XX','Y') Соnсаt('Индекс','394063') 'AAXXY' 'Индекс 394063'

 

Множества

Объединение

1) [‘A’, ‘F’]+[‘B’, ‘D’] = [‘A’, ‘F’, ‘B’, ‘D’];

2) [1..3, 5, 7, 11] + [3..8, 10, 12, 15..20] = [1..8, 10..12, 15..20]

Пусть S1:=[1..5, 9], a S2:=[3..7, 12]. Тогда если S:=S1 + S2, то S=[1..7, 9, 12].

Пусть А1:=[‘a’..’z’]; A1:=A1 = [‘A’]. Тогда A1=[‘A’, ‘a’..’z’].

 

Пересечение

1) [‘A’, ‘F’]*[‘B’, ‘D’] = [ ], так как общих элементов нет;

2) [1..3, 5, 7, 11]*[3..8, 10, 12, 15..20] = [3, 5, 7];

3) если S1:=[1..5, 9] и S2:=[3..7, 12], a S:=S1 * S2, то S=[3..5].

 

Разность

1) [‘A’, ‘F’] - [‘B’, ‘D’] = [‘A’, ’F’ ], так как общих элементов нет;

2) [1..3, 5, 7, 11] - [3..8, 10, 12, 15..20] = [1, 2, 11];

3) если S1:=[1..5, 9] и S2:=[3..7, 12], a S:=S1 - S2, то S=[1, 2, 9];

4) A1:=[‘A’..’Z’]; A1:=A1 - [‘A’]. Тогда А1=[‘B’..’Z’].

 

Логическая операция определения принадлежности элемента множеству обозначается служебным словом in. Результат операции имеет значение true, если элемент входит в множество, и false в противном случае.

Примеры.

1) Выражение 5 in [3..7] имеет значение true, так как 5 принадлежит [3;7];

2) Выражение ‘a’ in [‘A’..’Z’] имеет значение false, так как маленькой латинской буквы «а» нет среди больших латинских букв.

 

Задания:

1. Слова и фразы, которые можно читать справа налево и слева направо. Такие слова или фразы называются перевертыши или палиндромы. Например, ШАЛАШ, РОТОР.

Данная программа проверяет, является ли слово палиндромом. При вводе выражения пробелы не вводить.

program palindrom;

uses crt;

var q:integer;

a,b,c:string;

begin

clrscr;

writeln('Введите слово - палиндром ');

readln(a);

for q:=1 to length(a) div 2 do {проверка до середины слова}

begin

b:=copy(a,q,1); {очередная буква слева}

c:=copy(a,length(a)+1-q,1); {соответствующая буква справа}

if b<>c then

write('Это не палиндром!!!');

end;

write('Правильно.');

end.

Исправьте программу.

 

2. Если выражение состоит из нескольких слов, то нужно, чтобы компьютер анализировал наличие пробелов. Это реализовано в следующей программе:

program palindrom2;

uses crt;

var q:integer;

a:string;

begin

clrscr;

write('Введите фразу ');

readln(a);

{==========Алгоритм удаления пробелов===========}

for q:=1 to length(a) do

if copy(a,q,1)=' ' then delete(a,q,1);

{============================================}

for q:=1 to length(a) div 2 do

begin

if copy(a,q,1)<>copy(a,length(a)+1-q,1) then

write('Это не палиндром, вот пример палиндрома: "аргентина манит негра"');

end;

write('Правильно.');

end.

Исправьте программу.

 

3. Составить программу выделения следующих множеств из множества целых чисел от 1 до 30:

- множество чисел, кратных 2;

- множество чисел, кратных 3.

 

Program Example_1;

Const n=30;

Type mn=set Of 1..n;

Var n2, n3:mn;

{n2 — множество чисел, кратных 2, n3 — кратных 3}

k:Integer;

Procedure Print(m:mn);

Var i:Integer;

Begin

For i:=1 To n Do

If i In m Then Write(i:3);

Writeln;

End;

Begin

n2:=[ ]; n3:=[ ];

{ начальное значение множеств}

For k:=1 To n Do { формирование n2 и n3}

Begin

{если число делится на 2, то заносим его в n2}

If k Mod 2=0 Then n2:=n2+[k];

{если число делится на 3, то заносим его в n3}

If k Mod 3=0 Then n3:=n3+[k];

End;

{вывод множеств}

Writeln (' числа, кратные 2');

Print(n2);

Writeln (' числа, кратные 3');

Print(n3);

Readln;

End.

 

На основании представленной программы составьте программу для выделения следующих множеств:

- множество чисел, кратных 6;

- множество чисел, кратных 2 или 3.

 

quot;Решето Эратосфена". Составить программу поиска простых чисел в промежутке [1;n]. число n вводиться с клавиатуры.

Решение

Простым называется число, которое не имеет других делителей, кроме единицы и самого этого числа. Для решения этой задачи воспользуемся методом "решета Эратосфена", идея которого заключается в следующем: сформируем множество М, в которое поместим все числа заданного промежутка. Затем последовательно будем удалять из него элементы, кратные 2, 3, 4 и так далее, до [n/2] (целая часть числа). После такого "просеивания" в множестве М останутся только простые числа.

 

Program Example_3;

Var m:Set Of Byte;

i, k, n: Integer;

Begin

Writeln('введите размер промежутка (до 255)');

Readln(n);

m:=[2..n];{начальное значение}

For k:=2 To n Div 2 Do

{перебираем все делители}

For i:=2 To n Do

{если число кратное делителю k и отлично от него}

If (i Mod k=0) And (i<>k) Then m:=m-[i];

{Распечатаем оставшиеся элементы}

For i:=1 To n Do If i In m then Write (i:3);

Readln;

End.

 

4. Из числовых переменных, равных 4, 7, 9 с помощью строковых функций получить число 794 и вывести его на экран.

5. Из слова "ВЕЛИКОЛЕПНЫЙ" с помощью строковых функций получить слова: ВЕЛИК, КОЛ, ЛИК, ЛЕВ, ВЕК, вывести их на экран и определить их длину.

6. Из диапазона целых чисел m..n выделить множество чисел делящихся без остатка или на k, или на р (k, р –простые).

7. Дан текст из строчных латинских букв, за которым следует точка. Напечатать все буквы, входящие в текст по одному разу.

***. Даны три множества Х1, Х2, Х3, содержащие целые числа. Введите их с клавиатуры. Мощность каждого равна 10. Сформируйте новое множество Y=(Х1+Х2)-(Х3*Х2). Выведите на экран множество Y и его мощность. Проверьте, есть ли во множестве числа кратные 5.

 



<== предыдущая лекция | следующая лекция ==>
Общие критерии оценивания эссе | Об участии верных в Евхаристии
Поделиться с друзьями:


Дата добавления: 2016-12-18; Мы поможем в написании ваших работ!; просмотров: 661 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

80% успеха - это появиться в нужном месте в нужное время. © Вуди Аллен
==> читать все изречения...

2294 - | 2147 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.013 с.