Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Для того, чтобы заполнить, надо вывести правило заполнения, а оно в данном случае будет таким: если ряд нечетный(то есть номер строки –нечетное число), то A[I, J]=(I-1)*M+J, иначе(то есть когда строка четная) A[I, J]=I*M-J+1. По этому правилу составляем процедуру заполнения:
PROCEDURE FILL(VAR X:DMARRAY);
VAR I, J:INTEGER;
BEGIN
FOR I:=1 TO N DO
FOR J:=1 TO M DO
IF I MOD 2 =1 THEN X[I, J]:=(I-1)*M+J
ELSE X[I, J]:=I*M-J+1;
END;
Пример
Вставить строку из нулей после строки с номером K.
Решение
Для решения этой задачи необходимо:
1. Первые K строк оставить без изменения.
2. Все строки после K-той сдвинуть на одну назад, это лучше начать с последней строки и идти до (K+1)-ой.
3. Элементам строки K+1 присвоить заданное значение.
Кроме того, необходимо изменить размерность массива. Так как мы вставляем строку, то число строк будет на одну больше:
CONST N=5;M=7;
TYPE DMARRAY=ARRAY[1..N,1..M] OF INTEGER;
VAR A:DMARRAY;
Теперь опишем процедуру вставки:
PROCEDURE INSERT(K1:INTEGER; VAR X:DMARRAY);
VAR I, J:INTEGER;
BEGIN
FOR I:=N DOWNTO K1+1 DO
FOR J:=1 TO M DO
X[I+1,J]:=X[I, J];{элементу столбца J присваиваем значение элемента этого же столбца, но из предыдущей строки}
FOR J:=1 TO M DO
X[K1+1,J]:=0;
END;
Так как число строк меняется, то процедуру PRINT надо изменить, она должна выводить данное количество строк, начиная с первой:
PROCEDURE PRINT(N1:INTEGER; X:DMARRAY);
VAR I, J:INTEGER;
BEGIN
FOR I:=1 TO N1 DO
BEGIN
FOR J:=1 TO M DO WRITE(X[I, J]:4);
WRITELN;
END;
END;
Часть основной программы будет такой:
BEGIN
INIT(A);
PRINT(N, A);
WRITELN(‘Введите номер строки, после которой вставляем’)ж
REALDLN(K);
INSERT(K, A);
PRINT(N+1,A);
READLN;
END.
Обработка символов и строк
Кроме стандартного символьного типа данных в турбо паскаль поддерживает строковый тип STRING или STRING[n]. Переменная типа CHAR –это одиночный символ из алфавита клавиатуры, заключенный в одиночные апострофы. Переменная типа STRING может содержать до 255 символов. Строки называются динамическими, поскольку могут иметь различные длины в пределах объявленных границ. Если у нас есть две строки:
VAR S32:STRING[32];
S:STRING; то они отличаются тем, что S32 может содержать не более 32 символов, а S-до 255. Тип STRING является базовым строковым типом, и он совместим со всеми производными строковыми типами. При попытке записать в переменную строку длиннее, чем объявлено “лишняя” часть будет отсечена. Строке можно присвоить пустое значение. Например: S:=’’(подряд два апострофа). Строки различных длин совместимы между собой в операторах присваивания и сравнения, но “капризно” ведут себя при передаче в процедуры и функции. Строка, состоящая из одного символа совместима со значением переменной типа CHAR.
…
VAR CH:CHAR;ST:STRING;
BEGIN
ST:=’HELLO’;
CH:=ST[1]; {CH=’H’}
ST[2]:=’E’; {ST=’HELLO}
CH:=’X’;
ST:=CH; {ST=’X’}
END.
Операции над символами
Символы можно лишь присваивать и сравнивать друг с другом. При сравнении символов они считаются равными, если равны их ASCII - коды; и один больше другого, если имеет больший ASCII-код:’R’>’r’. Операции сравнения записываются традиционным способом: <, <=., =, >=, <>. Каждый символ можно рассматривать как элемент множества SET OF CHAR; и применять к нему операцию проверки на вхождение в множество:
VAR CH:CHAR;
BEGIN
…
CH:=’a’;
IF CH IN [‘a’..’z’] THEN…
К символьным значениям и переменным могут быть также применены следующие функции:
Функция: Тип | Назначение |
CHR(X:BYTE):CHAR | Возвращает символ ASCII-кода X |
ORD(C:CHAR):BYTE | Возвращает ASCII-код символа C |
PRED(C:CHAR):CHAR | Выдает предыдущий перед C символ |
SUCC(C:CHAR):CHAR | Выдает последующий за C символ |
UPCASE(C:CHAR):CHAR | Переводит символы из ‘a’…’z’ в’A’…’Z’ |
Операции над строками
Строки можно присваивать, сливать и сравнивать. Слияние строк записывается в естественном виде. Если сумма получается длиннее, чем длина переменной, стоящей слева, излишек отсекается.
Сравнение строк происходит посимвольно, начиная от первого символа в строке. Строки равны, если имеют одинаковую длину и посимвольно эквивалентны:
…
VAR S1,S2,S3:STRING;
BEGIN
S1:=’Вам’;
S2:=’привет’;
S3:=S1+S2; {S3=’Вам привет’}
S3:=S3+’!’; {S3=’Вам привет!}
END.
‘abcd’=’abcd’(TRUE)
‘abcd’<>’abcde’) (TRUE)
‘abcd’<>’ abcd’(TRUE)
‘abcd’>‘abcD’ {так как ‘d’>’D’}
‘abcd’>‘abc’ {так как ‘d’>’’}
‘aBcd’<‘ab’ {так как ‘B’<’b’}
Для работы со строками в турбо паскале есть большое количество процедур и функций.
ПРОЦЕДУРЫ И ФУНЦИИ | НАЗНАЧЕНИЕ |
РЕДАКТИРОВАНИЕ СТРОК | |
LENGTH(S:STRING):BYTE | Выдает текущую длину строки |
CONCAT(S1,S2,…Sn):STRING | Возвращает слияние строкS1…Sn |
COPY(S:STRING;START, LEN:INTEGER):STRIG | Возвращает подстроку длиной LEN, начинающуюся с позиции START в S |
DELETE(VAR S:STRING;START, LEN:INTEGER) | Удаляет из S подстроку длиной S, начинающуюся с позиции START в S |
INSERT(VARSUB:STRING;S:STRIG;START:INTEGER) | Вставляет в S подстроку SUB, начиная с позиции START |
POS(SUB, S:STRING):BYTE | Ищет вхождение подстрокиSUB в строке S и возвращает номер первого символа SUB в S или 0, если S не содержит SUB |
ПРОЦЕДУРЫ ПРЕОБРАЗОВАНИЯ | |
STR(X[:F[:N]]; VAR S:STRING) | Преобразует числовое значение X в строковое S. Возможно задание формата для X |
VAL(S:STRING;VAR X;VAR ERRCODE:INTEGER) | Преобразует строковое значение S (строку цифр) в значение числовой переменной X |
Пример
В строковую переменную ввести предложение из слов, разделенных одним пробелом. Подсчитать, сколько слов во введенной строке.
Признаком окончания слова, является пробел. Значит, нужно подсчитать число пробелов в строке, а число слов в предложении будет на единицу больше. Для подсчета числа пробелов нужно сначала выяснить число символов во введенной строке. Завести и обнулить переменную счетчик числа пробелов, а потом, организовав цикл просмотра, сравнивать каждый символ строки с пробелом и добавлять в счетчик единичку в том случае, если встретился пробел.
PROGRAM S;
VAR A:STRING;C:STRING[1];B, K:BYTE;I:INTEGER;
BEGIN
WRITELN('Введите предложение');
READ(A);{Ввод предложения в строку A}
B:=LENGTH(A);{В переменной B вычисляем длину строки}
K:=0;{Обнуляем счетчик}
FOR I:=1 TO B DO{Начинаем цикл просмотра}
BEGIN
C:=COPY(A, I,1);{копируем текущий символ в переменную C}
IF C=’ ‘ THEN K:=K+1;{Если встретился пробел добавляем единичку в K}
END;{Завершаем цикл просмотра}
WRITELN('Число слов в предложении= ',K+1:3);{Выводим результат}
END.
Пример
В строковую переменную ввести слово. Вывести это слово, прочитав его, справа налево, вставив между буквами символ *.
Сначала вычислим длину строки. Потом очистим переменную D, в которой в дальнейшем получим результат. Затем организуем цикл просмотра слова от конца к началу, на каждом шаге будем вырезать один символ и вместе со звездочкой добавлять его в переменную D. Когда цикл завершит свою работу, в переменной D получится слово, прочитанное от конца к началу.
PROGRAM SL;
VAR A, C,D:STRING;I, B:INTEGER;
BEGIN
WRITELN('Введите слово');
READ(A);{Ввод предложения в строку}
B:=LENGTH(A);{Вычисляем размер строки}
D:='';{Очищаем переменную, в которой получим результат}
FOR I:=B DOWNTO 1 DO{Начинаем цикл просмотра от конца к началу}
BEGIN
C:=COPY(A, I,1);{Копируем в C текущий символ}
D:=D+C+'*';{Накапливаем в C результат}
END;
WRITELN(D);{Вывод результата}
END.
Пример
Ввести строку, состоящую из слов, разделенных пробелом. Каждое слово напечатать с новой строки.
Разбирая этот пример, мы познакомимся с новой функцией и новым приемом. Признаком окончания слова по-прежнему остается пробел. Функция POS позволяет вычислить номер символа в строке A, начиная c которого в ней встретилась строка B, т.е., c ее помощью мы будем искать первый пробел. Наше первое слово будет находиться между первым символом строки и символом, имеющим номер на единицу меньший, чем номер пробела. Значит, можно его вывести на экран. После этого можно прибегнуть к такому приему: удалить первое слово из строки и повторять эти действия пока в предложении остается хотя бы один пробел. Сколько всего слов в предложении мы не знаем, поэтому нам подойдет только цикл WHILE. После его завершения в строке останется последнее слово.
PROGRAM S1;
VAR
A, B:STRING;L, I,J, Y:INTEGER;
BEGIN
WRITELN('введите предложение');
READ(A);{Ввод строки}
L:=LENGTH(A);{Вычисление длины предложения}
Y:=POS(‘ ‘,A);{вычисляем номер первого пробела}
WHILE Y>0 DO{Начинаем цикл, пока в предложении есть пробел}
BEGIN’
B:=COPY(A,1,Y-1);{копируем в переменную B первое слово}
WRITELN(B);{выводим на экран}
A=COPY(A, Y+1,L-Y);{Укорачиваем предложение на первое слово}
Y=POS(‘ ‘,A);{Ищем номер следующего пробела}
END;{Завершаем цикл }
WRITELN(A);{выводим на экран последнее слово}
END.
Пример
Ввести в строковую переменную текст латинскими буквами без пробелов. Зашифровать его, сдвинув каждую букву по алфавиту на одно и тоже число вправо.
Для решения этой задачи нам понадобятся функции, позволяющие по символу вычислять его код и, наоборот, по коду символ. Решение задачи начинаем с ввода строки и вычисления ее длины. Шифровать будем сдвигом по алфавиту вправо, поэтому возможен выход за алфавит со стороны z. Чтобы этого не случилось, мы должны в своей программе предусмотреть действия, которые помогли бы “закольцевать” алфавит. Для этого нам потребуется вычисление кода символа z. В переменной D получим зашифрованный текст, переменная M нужна для хранения величины смещения.
PROGRAM P;
VAR A, D:STRING;I, K,J, L,M:INTEGER;B, C:SRTRING[1];E:CHAR;
BEGIN
WRITELN('введите строку:');
READ(A);{Вводим строку}
K:=LENGTH(A);{Вычисляем длину строки}
L:=ORD('z'){Вычисляем код символа z}
;D:='';{Очищаем переменную, в которой получим результат}
M:=3;{Задаем смещение}
FOR I:=1 TO K DO{Начинаем цикл просмотра}
BEGIN
B:=COPY(A, I,1);{Копируем один символ в переменную }
E:=B[1];{Преобразует вырезанный символ из строкового в символьный тип}
J:=ORD(E)+M;{Вычисляет код зашифрованного символа}
IF J>L THEN J:=J-26;{“Закольцовываем” алфавит}
C:=CHR(J);{Вычислить по коду шифруемый символ}
D:=D+C;{Накапливаем зашифрованную строку}
END;
WRITELN(D);Вывод зашифрованной строки}
END.
Пример
Ввести в строковую переменную предложение на русском языке, содержащее ошибки на правило “ши”, “жи” пиши с буквой “и”. Написать программу, исправляющую ошибки и подсчитывающую их число.
PROGRAM SL2;
VAR A:STRING;K, S,I:INTEGER;
BEGIN
WRITELN('Введите текст:');
READLN (A);{Ввод строки}
K:=LE0NGTH(A);{вычисление ее длины}
S:=0;{обнуляем счетчик ошибок}
FOR I:=1 TO K-1 DO{начинаем цикл просмотра}
IF (COPY(A, I,2)='жы')OR (COPY(A, I,2)='шы') THEN{если ошибка обнаружена, то:}
BEGIN
S:=S+1;{увеличиваем счетчик ошибок}
DELETE(A, I+1,1);{удаляем “ы”}
INSERT('и',A, I+1);{вставляем “и”}
END;
WRITELN( 'число ошибок=',S);{вывод числа ошибок}
WRITELN(A);{вывод исправленной строки}
END.
Задачи для самостоятельного решения
1. Зашифровать текст на английском языке, поменяв “a” на “z”,”b”на”y”,”c”на”x” и т. д.
2. Ввести в строковую переменную предложение, заканчивающееся точкой. Слова в нем могут быть разделены разным количеством пробелов. Сжать текст, оставив в качестве разделителя один пробел.
3. Дано название футбольного клуба. Напечатать его на экран столбиком.
4. Дана фраза. Определить, сколько в ней предложений.
5. Дано предложение. Напечатать все его символы, предшествующие первой запятой.
6. Проверить, является ли некоторая символьная строка перевертышем после удаления из нее всех пробелов.
7. Даны два слова. Для каждой буквы первого слова определить, входит ли она во второе слово. Повторяющиеся буквы первого слова не рассматривать. Например, если заданные слова “процессор” и “информация”, то для букв первого из них ответом должно быть: ”нет да да да нет нет”.
8. Написать программу для выделения чисел из строки. Например: ”Стоимость 1 киловатт-часа электроэнергии в 1980 году равнялась 0.04 рубля” преобразовывается в последовательность чисел: 1,1988,0.04 .
9. Проверить, можно ли из заданной строки A (не нарушая порядка следования букв) получить заданную строку B.
Тесты:
A=”ручка”, B=”пучок”, ответ: ”нет”.
A=”коловорот”, B=”корт”, ответ: ”да”.
A=”коловорот”, B=”толк”, ответ: “нет”.
10. Дана последовательность слов, содержащая от 1 до 30 слов. В каждом слове до пяти строчных латинских букв, разделенных запятой, в конце точка. Напечатать те слова, перед которыми в последовательности находятся только меньшие (по алфавиту) слова, а за ними только большие.
11. Дана последовательность символов, количество букв которой<=255. Преобразовать последовательность, удалив все символы, не являющиеся буквами или цифрами, и заменив каждую большую букву одноименной малой.
12. Зашифровать текст, поставив в соответствие первым десяти буквам алфавита десять случайных цифр.
13. Составить программу подсчета частот символов из заданного набора в данном тексте.
14. Cоставить программу, заменяющую в данном тексте сочетание символов B на C.
15. Живой говорящий попугай способен запоминать и повторять фразы собеседника. В начале беседы он знает всего несколько фраз. В процессе беседы он увеличивает свой лексикон, запоминая фразы собеседника. Написать программу, имитирующую беседу с попугаем.
16. Даны два слова. A1иA2. Определить, можно ли из букв слова A1 составить слово A2, используя каждую букву только один раз. Вывести сообщение о том, сколько раз это удалось сделать.
Тесты:
A1=”абракадабра”, A2=”бар”, ответ: да, 2 раза.
A1=”абракадабра”, A2=”кадр”, ответ: да, 1 раз.
A1=”абракадабра”, A2=”брод”, ответ: нет.
17. Составить программу, которая по вводимому ключу может зашифровать либо, наоборот, расшифровать текст. Ключом здесь является конечная последовательность цифр, которую записывают подряд над текстом, требующим шифровки. Для каждой буквы текста написанная над ней цифра указывает величину смещения этой буквы вправо по алфавиту. Например, если в качестве ключа выбрана последовательность , то для того, чтобы зашифровать текст “ А Б Р А К А Д А Б Р А “, запишем:
ключ
А Б Р А К А Д А Б Р А – текст
Б Д У Е М Б Ж Г Е Т Б – шифровка.
Комбинированный тип данных (записи)
При работе с массивами основное ограничение заключается в том, что каждый элемент должен иметь один и тот же тип. Но при решении многих задач возникает необходимость хранить и обрабатывать совокупности данных различного типа.
Пример
Для каждого из двадцати пяти учеников класса известны фамилия и оценки по пяти предметам. Требуется вычислить среднюю оценку каждого ученика и выбрать человека, имеющего максимальный средний балл.
В данном случае фамилия может быть представлена строкой из15 символов, оценка - это целое число, а средний балл должен быть представлен вещественным числом. В турбо паскале для описания комбинаций объектов разных типов используются записи.
Запись – это структурированный тип, содержащий набор объектов разных типов. Составляющие запись объекты называются ее полями. В записи каждое поле имеет собственное имя. Чтобы описать запись, необходимо указать ее имя, имена объектов, составляющих запись и их типы. Общий вид такой:
TYPE
<имя записи>=RECORD
<поле 1>:<тип 1>;
<поле 2>:<тип 2>;
…
<поле n>:<тип n>
END;
Данные для решения рассматриваемой задачи можно описать как запись следующим образом:
TYPE
PUPLE=RECORD
FAM:STRING[15];{поле фамилии ученика}
B1,B2,B3,B4,B5:2..5;{поля баллов по предметам}
SB:REAL{поле среднего балла}
END;
Чтобы хранить информацию о всех 25 учениках класса, необходимо ввести массив, представляющий массив записей: VAR KLASS: ARRAY[1..25 ] OF PUPLE;
Имена полей, составляющих запись, не должны повторяться. Каждое поле записи может иметь любой тип (кроме файлового), в частности, оно может быть снова записью.
Доступ к полям записи.
Можно осуществить двумя способами.
1.Указанием имени переменной и имени поля. Например, KLASS[2].FAM, KLASS[2].SB, KLASS[1].B4. Поэтому ввод фамилий и оценок учащихся, то есть элементов массива KLASS, можно задать так:
FOR I:=1 TO 25 DO
BEGIN
READLN(KLASS[I].FAM);
READLN(KLASS[I].B1);
READLN(KLASS[I].B2);
READLN(KLASS[I].B3);
READLN(KLASS[I].B4);
READLN(KLASS[I].B5)
END;
2.Использованием оператора присоединения, который позволяет осуществить доступ к полям записи таким образом, как если бы они были простыми переменными. Его общий вид: WITH <имя записи> DO <оператор>.Внутри оператора к компонентам записи можно обращаться только с помощью имени соответствующего поля.
Пример
FOR I:=1 TO 25 DO
WITH KLASS[I] DO
BEGIN
READLN(FAM);
READLN(B1,B2,B3,B4,B5);
END;
Разбор на примерах
Программа для решения рассматриваемой задачи может быть записана в следующем виде:
PROGRAM KL;
TYPE
PUPLE=RECORD
FAM:STRING[15];{поле фамилии ученика}
B1,B2,B3,B4,B5:2..5;{поля баллов по предметам}
SB:REAL{поле среднего балла}
END;
VAR KLASS:ARRAY[1..25] OF PUPLE;
P:PUPLE;
I, M:INTEGER;
SBMAX:REAL;
BEGIN M:=25;
FOR I:=1 TO M DO{Ввод исходных данных}
WITH KLASS[I] DO
BEGIN
WRITELN(‘Введите фамилию и пять оценок’);
READLN(FAM);
READLN(B1,B2,B3,B4,B5);
END;
FOR I:=1 TO M DO{вычисление среднего балла}
WITH KLASS[I] DO SB:=(B1+B2+B3+B4+B5)/5;
SBMAX:=0
FOR I:=1 TO M DO{ поиск максимального среднего балла}
IF KLASS[I].SB>=SBMAX THEN SBMAX:=KLASS[I].SB;
FOR I:=1 TO M DO
IF KLASS[I].SB=SBMAX THEN
WITH KLASS[I] DO WRITELN(FAM:20,’ ‘,SB:6:3);
READLN;
END.
Задачи для самостоятельного решения
1. Известны баллы, набранные каждым из 20 спортсменов-пятиборцев в каждом из пяти видов спорта. Определить фамилию спортсмена - победителя соревнований.
2. Известны данные о массе и объеме 30 тел, изготовленных из различных материалов. Определить материал с минимальной плотностью.
3. Известны данные о 20 сотрудниках фирмы (фамилия, зарплата и пол). Определить:
а) фамилию мужчины, имеющего самую большую зарплату (считать, что он единственный);
б) фамилии мужчины и женщины, имеющих самую маленькую зарплату.
4. Известны данные о 16 сотрудниках фирмы: фамилия, возраст и отношение к воинской службе (военнообязанный или нет). Определить:
а) фамилию самого младшего по возрасту человека среди военнообязанных (считать, что он единственный);
б) фамилии самых старших по возрасту людей среди военнообязанных и среди невоеннообязанных (считать, что такие есть и они единственные в своей группе).
5. Известны данные о численности населения и площади(в тысячах квадратных километров) 28 государств. Определить название государства с минимальной плотностью населения.
Множественный тип данных
Множество в языке Паскаль – это ограниченный упорядоченный набор различных элементов одного (базового) типа.
Базовый тип-это совокупность значений, из которых могут быть образованы множества. Всего может быть не более 256 различных элементов. Значение переменной множественного типа может содержать любое количество различных элементов базового типа – от нуля элементов (пустое множество) до всех возможных значений базового типа (их должно быть 256). Иными словами, возможными значениями переменных множественного типа являются все подмножества значений базового типа. В качестве базового типа может быть использован любой тип, кроме вещественного.
Множества, используемые в программе, могут быть описаны либо в разделе описания типов:
TYPE <имя типа> set of <тип элементов>;
VAR <имя множества>:<имя типа>;
Можно также их описать в разделе описания переменных:
TYPE MNOG=SET OF CHAR;
VAR MN1:SET OF CHAR;
MN2:MNOG;
S1:SET OF BYTE;
S2: SET OF ‘A’..’Z’;
MN1 и MN2 – это множества символов, так как различных символов всего 256, то этот тип можно использовать в качестве базового типа для элементов;
S1 – множество целых чисел(от 0 до 255), так как тип byte содержит только целые числа от 0 до 255(всего 256 различных чисел), поэтому его тоже можно брать в качестве базового типа элементов;
S2 – множество целых чисел от 1000 до 1200.
Формирование (конструирование) множеств.
В программе элементы множества задаются в квадратных скобках, через запятую. Если элементы идут подряд друг за другом, то можно использовать диапозон.
Пример
TYPE DIGIT=SET OF 1..5;
VAR S:DIGIT;
ПЕРЕМЕННАЯ S может принимать значения, состоящие из любой совокупности целых чисел от 1 до 5:
[]- пустое множество;
[1],[2],[3],[4],[5]- одноэлементные множества;
[1,2],[1,3],…,[2,4],[4,5]- двухэлементные;
[1,2,3],[1,2,4],…,[3,4,5]- трехэлементные;
[1,2,3,4],[1,2,3,5],[1,2,4,5],[1,3,4,5],[2,3,4,5]-четырехэлементные;
[1,2,3,4,5]- полное множество (взяты все элементы базового типа).
Операции над множествами
Объединением двух данных множеств называется множество элементов, принадлежащих обоим множествам. Знак операции ”+”.
Примеры
· [‘A’,’F’]+[‘B’,’D’]=[‘A’,’F’,’B’,’D’]
· [1..3,5,7,11]+[3..8,10,12,15..20]=[1..8,10..11,15..20]
· Пусть S1:=[1..5,9] а S2:=[3..7,12]. Тогда если множество S:=S1+S2, то его значение S= [1..7, 9, 12];
· A1:=[‘a’..’z’]; A1:=A1+[‘A’];- к множеству добавляем элемент. Тогда A1=[‘A’,’a’..’z’];
Пересечением двух данных множеств называется множество элементов, принадлежащих одновременно и первому, и второму множеству, то есть это общие элементы. Знак операции: “*”.
Примеры
· [‘A’,’F’]*[‘B’,’D’]=[]-так как общих элементов нет;
· [1..3,5,7,11]*[3..8,10,12,15..20]=[3,5,7];
· Если S1:=[1..5,9] и S2:=[3..7,12], а S:=S1*S2, то результат выполнения S=[3..5].
Вычитанием двух множеств называется множество, состоящее из тех элементов первого множества, которые не являются элементами второго множества. Знак операции-“-”.
Примеры
· [‘A’,’F’]-[‘B’,’D’]=[‘A’,’F’]- так как общих элементов нет;
· [1..3,5,7,11]-[3..8,10,12,15..20]=[1..2,11];
· S1:=[1..5,9];S2:=[3..7,12];S:=S1-S2;тогда S=[1..2,9].
· A1:=[‘A’..’Z’];A1=A1-[‘A’]. Из множества исключили элемент. Тогда: A1=[‘B’..’Z’];
Операция определения принадлежности элемента множеству
Эта логическая операция обозначается служебным словом IN. Операция имеет результат TRUE, если значение входит в множество и FALSE в противном случае.
Примеры
· Выражение 5 IN [3..7] имеет значение TRUE, так как 5Î[3..7], то есть присутствует во множестве.
· Выражение ’a’ IN [‘A’..’Z’] имеет значение FALSE, так как, маленькой латинской буквы ’a’ нет среди больших латинских букв.
Сравнение множеств
Для сравнения множеств используются операции отношения, которые принимают одно из логических значений – FALSE или TRUE, в зависимости от результата сравнения:
= (равенство двух множеств);
<> (неравенство двух множеств);
<=,<(проверка на вхождение первого во второе множество);
>=.>(проверка на вхождение второго множества в первое множество).
Разбор на примерах
Пример
Составить программу выделения из множества целых чисел от 1 до 30 следующих множеств:
Множества чисел, кратных 2;
множества чисел, кратных 3;
множества чисел, кратных 6;
множества чисел, кратных 2 или 3.
Программа для решения этой задачи выглядит так:
PROGRAM EX49;
CONST N=30;
TYPE MN=SET OF 1..N;
VAR N2,N3,N6,N23:MN;{N2-множество чисел, кратных 2,N3- кратных 3,N6-кратных 6, n23-кратных 2 или 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];
IF K MOD 3=0 THEN N3:=N3+[K];
END;
{числа кратные 6-это те, которые кратны и 2, и 3, поэтому это пересечение двух первых множеств, а числа, кратные 2 или 3, ‘это объединение этих же множеств}
N6:=N2*N3;N23:=N2+N3;
WRITELN(‘числа, кратные 2’);
PRINT(N2);
WRITELN(‘числа, кратные ’);
PRINT(N3);
WRITELN(‘числа, кратные 6’);
PRINT(N6);
WRITELN(‘числа, кратные 23’);
PRINT(N23);
READLN;
END.
Пример
“Решето Эратосфена”. Составить программу поиска простых чисел в числовом промежутке[1..n]. Число n вводится с клавиатуры.
Решение
Простым числом называется число, которое не имеет других делителей, кроме единицы и самого этого числа. Для решения этой задачи воспользуемся методом “решето Эратосфена”, идея которого заключается в следующем: сформируем множество M, в которое поместим все числа заданного промежутка. Затем последовательно будем удалять из него элементы, кратные 2, 3, 4 и так далее до [n/2] (целая часть числа), кроме самих этих чисел. После такого “просеивания” в множестве M останутся только простые числа.
Примечание. Можно доказать, что можно удалять числа, кратные 2,3,4 и так далее, до[
n] то есть, до целой части квадратного корня числа n.
Вариант решения этой задачи:
PROGRAM EX52;
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{если число кратно делителю и отлично от него, то удаляем}
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.
Задачи для самостоятельного решения.
1. Дана непустая последовательность символов. Построить и напечатать множества, элементами которых являются встречающиеся в последовательности:
a) цифры от ‘0’ до ‘9’ и знаки арифметических операций;
b) буквы от ‘A’ до ‘F’ и ‘X’ до ‘Z’;
c) знаки препинания и буквы от ‘E’до ‘N’.
2. Составить программу подсчета количества цифр в заданной строке и печати их.
3. Составить программу печати всех символов заданного текста, входящих в него по одному разу.
4. Составить программу поиска и печати в порядке убывания все простые числа из промежутка [2..201], используя метод ”решето Эратосфена”.
5. Составить программу формирования множества строчных латинских букв, входящих в строку, введенную с клавиатуры, и подсчета количества знаков препинания в ней.
Литература
1. , , Практикум по турбо паскалю. Учебное пособие по курсам “Основы программирования”,”Информатика и вычислительная техника”-М., АБФ, 1998.
2. , Тюляева по основам программирования. Язык ПАСКАЛЬ:учебное пособие для учащихся средних специальных учебных заведений.-М.:высшая школа, 1991
3. ,Круглов в среде Турбо Паскаль (версия 5.5): Справочно-методическое пособие.-М.:Изд-во МАИ, 1992.
4. К. Йенсен, Н. Вирт ПАСКАЛЬ. Руководство для пользователя и описание языка. М.:финансы и статистика, 1982.
Введение................................................................................................................................... 2
Структура программы............................................................................................................. 2
Величины и операция присваивания.................................................................................... 3
Стандартные типы данных..................................................................................................... 3
Целый тип............................................................................................................................ 4
Вещественный тип.............................................................................................................. 5
Символьный тип.................................................................................................................. 5
Логический тип................................................................................................................... 6
Выражения и приоритет операций........................................................................................ 6
Организация ввода-вывода в турбо паскале........................................................................ 8
Вывод значений переменных целого типа....................................................................... 8
Вывод значений переменных вещественного типа......................................................... 9
Условный оператор............................................................................................................... 11
Простой условный оператор............................................................................................ 11
Вложенные операторы условия....................................................................................... 12
Ограниченный и перечисляемый типы данных................................................................ 16
Оператор варианта................................................................................................................ 16
Ограниченный тип данных.............................................................................................. 16
Перечисляемый тип данных............................................................................................. 16
Оператор варианта............................................................................................................ 17
Операторы цикла................................................................................................................... 18
Оператор цикла с параметром.......................................................................................... 18
Оператор цикла с предусловием...................................................................................... 21
Оператор цикла с постусловием...................................................................................... 23
Использование графики и звука в языке Turbo Pascal....................................................... 25
Переменные и циклы в графике.......................................................................................... 25
Процедуры и функции.......................................................................................................... 25
Процедуры.......................................................................................................................... 25
Функции............................................................................................................................. 25
Рекурсия.................................................................................................................................. 25
Файловый тип данных.......................................................................................................... 25
Общие положения............................................................................................................. 25
Операции для работы с последовательными файлами.................................................. 25
Обработка файлов.............................................................................................................. 25
Текстовые файлы............................................................................................................... 25
Обработка текстовых файлов........................................................................................... 25
Регулярные типы данных..................................................................................................... 25
. Одномерные массивы. Работа с элементами................................................................ 25
Способы заполнения одномерных массивов.................................................................. 25
Сортировка массива.............................................................................................................. 25
Сортировка методом простого выбора........................................................................... 25
Сортировка методом простого обмена............................................................................ 25
Двумерные массивы.............................................................................................................. 25
Обработка символов и строк................................................................................................ 25
Операции над символами................................................................................................. 25
Операции над строками.................................................................................................... 25
Комбинированный тип данных (записи)............................................................................ 25
Множественный тип данных............................................................................................... 25
Формирование (конструирование) множеств................................................................ 25
Операции над множествами............................................................................................. 25
Операция определения принадлежности элемента множеству................................... 25
Сравнение множеств......................................................................................................... 25
Литература.............................................................................................................................. 25
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


