
Pascal
#1
Отправлено 19 2007 - 11:29
#2
Отправлено 19 2007 - 11:37
Множина – структура даних, що представляє собою деяку підмножину значень заданого базового типу, включаючи порожню множину.
Сукупність усіх можливих підмножин базового типу визначає область значень відповідної множини. Кількість таких значень визначається автоматично і містить 2n варіантів, де n - потужність множини (кількість елементів базового типу).
Формат оголошення множини:
set of <базовий тип>.
Наприклад,
type digit = set of 0..9;
var w : set of char;
d : digit;
Як базові типи можуть використовуватися тільки порядкові типи, потужність яких не перевищує 256 значень, а верхня і нижня межі не виходять із діапазону 0 .. 255.
Множини-константи задаються у вигляді:
[<значення_1>, <значення_2>, ...,<значення_n>].
Наприклад,
d := [2, 5, 3, 9]; kl := ['A', 'B']; t := [ ];
Порядок перерахування значень множини є несуттєвим.
Як елементи множин можуть використовуватися не тільки константи, але і змінні, вирази, діапазони значень. Наприклад,
[1, 3, k]; [k .. 2*k]; [1,2..50]; ['k', 'a' ..'d'].
Для множин визначені наступні операції:
- Об'єднання множин ("+"). Результатом є множина, що містить елементи, які входять до обох множин-операндів. Ця операція часто використовується для включення нового елемента в множину.
- Перетин множин ("*"). Результатом є множина, що містить спільні елементи двох множин-операндів.
- Різниця множин ("-"). Результатом є множина, що складається з елементів першої множини, які не входять у другу множину. Ця операція часто використовується для видалення елемента із множини.
- Операції відношення ("=", "<>", "<=", ">="). Перевіряють рівність чи нерівність множин ("=", "<>"), а також, чи є одна множина підмножиною іншої ("<=", ">=").
- Операція входження in. Визначає належність елемента множині. Результат операції має тип boolean.
Для включення нового елемента в множину і видалення елемента із множини використовують також стандартні процедури:
- Include (M,Elem) - додає значення Elem в множину M;
- Exclude (M,Elem) - видаляє значення Elem з множини M.
Допускається використання множин в операторах присвоювання.
Приклад програми
Завдання: Заданий рядок із цифр і латинських літер. Підрахувати кількість цифр і літер та вивести їх на друк окремими множинами.
Program Mnogina;
Uses Crt;
Var
mainSet, charSet, numSet: set of Char;
numCount, charCount, mainCount: Integer;
Procedure inputSet;
Var key: Char;
Begin
mainCount:=0;
writeln('Please fill the set (to end the filling press ENTER)');
while (true) do
begin
key:=ReadKey;
if key = #13 then break
else if key in mainSet then continue
else
begin
inc(mainCount);
Include(mainSet, key);
writeln(key);
end;
end;
End;
Procedure work;
Var i: Char;
Begin
numCount:=0; charCount:=0; numSet:=[]; charSet:=[];
for i:='0' to '9' do if i in mainSet then
begin
inc(numCount);
Include(numSet, i);
end;
for i:='a' to 'z' do if i in mainSet then
begin
inc(charCount);
Include(charSet, i);
end;
End;
Procedure display;
Var i: Char;
Begin
writeln('Main set (consist of ',mainCount,' symbols)');
for i:='0' to '9' do if i in mainSet then write(' ',i);
for i:='a' to 'z' do if i in mainSet then write(' ',i);
writeln;
writeln('Numeric set (consist of ',numCount,' symbols)');
for i:='0' to '9' do if i in numSet then write(' ',i);
writeln;
writeln('Letters set (consist of ',charCount,' symbols)');
for i:='a' to 'z' do if i in charSet then write(' ',i);
End;
BEGIN ClrScr;
inputSet;
work;
display;
ReadLn;
END.
Сообщение отредактировал killma: 19 2007 - 11:42
#3
Отправлено 20 2007 - 08:57
#4
Отправлено 29 2007 - 01:52
и де ссыочка сскачать етот Паскать потому что тоот Паскаль который я знаю некоторых вещей в Данном коде я незнаю...
Сообщение отредактировал uk.ru: 29 2007 - 01:56
#5
Отправлено 14 2007 - 06:11
#6
Отправлено 23 2009 - 04:59
Даны множественные числа A[1,2,5,7,9,11]; B[2,4,6,8,10]. Образовать множественное число, которое бы содержало один из элементов множественного числа A и один из элементов множественного числа B
#7
Отправлено 27 2009 - 10:03
const
N = 255; {Количество элементов}
var
a: set of 1 .. N; {Множество A}
b: set of 1 .. N; {Множество B}
c: set of 1 .. N; {Результат}
i: integer;
begin
a := [1, 2, 5, 7, 9, 11];
b := [2, 4, 6, 8, 10];
c := a * b; {пересечение множества a и b}
{вывод множества c}
for i := 1 to N do
if i in c then
write(i, ' ');
writeln;
end.
#8
Отправлено 21 2010 - 01:25
sin*sin - это я так синус в квадрате обозвал (для тех кто не понял).
#9
Guest_nitro1_*
Отправлено 21 2010 - 04:16
uses
SysUtils;
var
N : integer;
i : integer;
A : array of real;
f1 : boolean;
begin
f1:= False;
write ('Please enter N:');
readln (N);
SetLength(A,N+1);
write ('Please enter A(0):');
readln (A[0]);
for i := 1 to N do
begin
A[i]:= ( A[i-1] + 1 ) / ( i - Sin(i)*Sin(i) );
if A[i]>=0 then
begin
writeln ('Answer: i: ' + IntToStr(i) + ' A[' + IntToStr(i) + ']= ' + FloatToStr(A[i]));
f1:= True;
break;
end;
end;
if f1=False then
writeln ('No answer');
writeln ('Enter any key');
readln;
end.
#10
Отправлено 21 2010 - 08:50
nitro1, а что такое SysUtils? Никогда такого не видел! Что это подключает?