«программирование»





Название«программирование»
страница5/11
Дата публикации08.03.2015
Размер1.89 Mb.
ТипУчебно-методический комплекс
100-bal.ru > Информатика > Учебно-методический комплекс
1   2   3   4   5   6   7   8   9   10   11

Контрольные вопросы и задания


  1. Какое определение называется рекурсивным? Приведите собственные примеры рекурсивных определений.

  2. Какой вспомогательный алгоритм (подпрограмма) называются рекурсивными? Приведите собственные примеры содержательных задач, где для решения может быть использован рекурсивный вспомогательный алгоритм.

  3. Что такое граничное условие, и каково его назначение в рекурсивной подпрограмме?

  4. Что такое рекурсивный спуск?

  5. Что такое рекурсивный подъём?

  6. Что такое глубина рекурсии? Чему равна глубина рекурсии в приведённых выше примерах?

  7. На каком этапе выполнения рекурсивной подпрограммы могут выполняться её операторы?

  8. Почему приведённый ниже алгоритм посимвольного формирования строки завершится аварийно?

Function Stroka : String;

Var C : Char;

Begin

Write('Введите очередной символ: '); ReadLn(C);

Stroka:=Stroka+C

End;

  1. На каком этапе выполняются действия в этом алгоритме?



Лекция №8. Строковый тип данных в языке Pascal
Познакомимся с типом данных, который относится к числу структурированных. Это строковый тип данных (строка). Строка — это последовательность символов. Каждый символ занимает 1 байт памяти (код ASCII). Количество символов в строке называется ее длиной. Длина строки может находиться в диапазоне от 0 до 255. Строковые величины могут быть константами и переменными. Особенностью строки в Turbo Pascal является то, что с ней можно работать как с массивом символов, с одной стороны, и как с единым объектом, — с другой. За счет этого обработка строк достаточно гибка и удобна. Строковая константа есть последовательность символов, заключенная в апострофы. Например: 'это строковая константа', ‘272’. Строковая переменная описывается в разделе описания переменных следующим образом:

Var <идентификатор> : string[<максимальная длина строки>];
Например:

Var Name : string[20];
Параметр длины может и не указываться в описании. В таком случае подразумевается, что он равен максимальной величине — 255. Например: Var slovo : string.

Строковая переменная занимает в памяти на 1 байт больше, чем указанная в описании длина. Дело в том, что один (нулевой) байт содержит значение текущей длины строки. Если строковой переменной не присвоено никакого значения, то ее текущая длина равна нулю. По мере заполнения строки символами ее текущая длина возрастает, но она не должна превышать максимальной по описанию величины.

Символы внутри строки индексируются (нумеруются) от единицы. Каждый отдельный символ идентифицируется именем строки с индексом, заключенным в квадратные скобки. Например: N[5], S[i], slovo[k+l]. Индекс может быть положительной константой, переменной, выражением целого типа. Значение индекса не должно выходить за границы описания.
Тип string и стандартный тип char совместимы. Строки и символы могут употребляться в одних и тех же выражениях.

Строковые выражения строятся из строковых констант, переменных, функций и знаков операций. Над строковыми данными допустимы операции сцепления и операции отношения.

Операция сцепления (конкатенации) (+) применяется для соединения нескольких строк в одну результирующую строку. Сцеплять можно как строковые константы, так и переменные.

Пример: 'Мама ' + 'мыла ' + 'раму'. В результате получится строка: 'Мама мыла раму'. Длина результирующей строки не должна превышать 255.

Операции отношения: =, <, >, <=, >=, <>. Позволяют произвести сравнение двух строк, в результате чего получается логическое значение (true или false). Операция отношения имеет приоритет более низкий, чем операция сцепления. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в таблице символьной кодировки. Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная. Строки равны, если они полностью совпадают по длине и содержат одни и те же символы.
Пример:Выражение Результат

‘True1’<’True2’ True

‘Mother’>’MOTHER’ True

‘Мама ‘ <> ‘Мама’ True

‘Cat’=’Cat’ True
Функция Copy(S, Pozition, N) выделяет из строки S подстроку длиной N символов, начиная с позиции Pozition. Здесь N и Pozition — целочисленные выражения.
Пример: Значение S Выражение Результат

‘Мама мыла раму’ Copy(S, 6, 4) ‘мыла’

‘Маша ела кашу’ Copy(S, 1, 8) ‘Маша ела’
Функция Concat(S1, S2, …, SN) выполняет сцепление (конкатенацию) строк S1, S2, …, SN в одну строку.
Пример: Выражение Результат

Concat('Маша ', 'ела ', 'кашу') 'Маша ела кашу'
Функция Length(S) — определяет текущую длину строки S. Результат — значение целого типа.
Пример: Значение S Выражение Результат

est-5' Length(S) 6

'(A+B)*C' Length(S) 7
Функция Pos(S1, S2) — обнаруживает первое появление в строке S2 подстроки S1. Результат — целое число, равное номеру позиции, где находится первый символ подстроки S1. Если в S2 подстроки S1 не обнаружено, то результат равен 0.
Пример: Значение S2 Выражение Результат

'abcdef' Pos('cd', S2) 3

'abcdcdef' Pos('cd', S2) 3

'abcdef' Pos('k', S2) 0

Процедура Delete(S, Poz, N) — удаление N символов из строки S, начиная с позиции Poz.

Пример: Исходное значение S Оператор Конечное значение S

'abcdefg' Delete(S, 3, 2) 'abefg'

'abcdefg' Delete(S, 2, 6) 'a'

В результате выполнения процедуры уменьшается текущая длина строки в переменной S.

Процедура Insert(S1, S2, Poz) — вставка строки S1 в строку S2, начиная с позиции Poz.
Пример: Исходное значение S2 Оператор Конечное значение S2

'ЭВМ РС' Insert('IBM-', S2, 5) 'ЭВМ IBM-PC'

'Рис. 2' Insert('N', S2, 6) 'Рис. N 2'

Контрольные вопросы и задания


  1. Как можно объявить величину строкового типа?

  2. К каким типам данных относятся строки?

  3. Какова максимально возможная длина строки?

  4. С величиной какого типа данных совместим по присваиванию отдельный символ строки?

  5. Расскажите об операциях, которые можно выполнять над строковыми величинами.

  6. Расскажите о функциях, определенных для величин строкового типа.

  7. Расскажите о процедурах, определенных для величин строкового типа.

  8. Как осуществляется доступ к отдельному символу строки?

  9. Почему значение отношения 'Мама'<>'мама' равно TRUE?

  10. Дан фрагмент программы:

  11. S:= '';

  12. For I:= '0' to '9' do S:=S+I;

  13. Какое значение получит переменная S после его исполнения?

  14. Дан фрагмент программы.

Type String40 = String[40]; M = Array[1..100] Of String40;

Var A : M; I, J, Min, N : Byte; Vsp : String40;

Begin

Write('N? '); ReadLn(N);

For I := 1 To N Do ReadLn(A[I]);

For I := 1 To N-1 Do

Begin Min := I;

For J := I + 1 To N Do If A[J] < A[Min] Then Min := J;

Vsp := A[I]; A[I] := A[Min]; A[Min] := Vsp;

End;

WriteLn('Ответ: '); For I := 1 To N Do WriteLn(A[I])

End.

Точно и однозначно сформулировать условие задачи, решение которой приведено в данном фрагменте.
Лекция №9. Множества в языке Pascal
Множество — это структурированный тип данных, представляющий собой набор взаимосвязанных по какому-либо признаку или группе признаков объектов, которые можно рассматривать как единое целое. Каждый объект в множестве называется элементом множества.

Все элементы множества должны принадлежать одному из порядковых типов, содержащему не более 256 значений. Этот тип называется базовым типом множества. Базовый тип задается диапазоном или перечислением.

Область значений типа множество — набор всевозможных подмножеств, составленных из элементов базового типа. В выражениях на языке Паскаль значения элементов множества указываются в квадратных скобках: [1,2,3,4], ['а',‘b','с'], ['a'..'z'].

Если множество не имеет элементов, оно называется пустым и обозначается как []. Количество элементов множества называется его мощностью.

Множество может принимать все значения базового типа. Базовый тип не должен превышать 256 возможных значений. Поэтому базовым типом множества могут быть byte, char, boolean и производные от них типы.

Множество в памяти хранится как массив битов, в котором каждый бит указывает является ли элемент принадлежащим объявленному множеству или нет. Максимальное число элементов множества 256, а данные типа множество могут занимать не более 32 байт.

Число байтов, выделяемых для данных типа множество, вычисляется по формуле:

ByteSize = (max div 8) - (min div 8) + 1,

где max и min — верхняя и нижняя границы базового типа данного множества.

Номер байта для конкретного элемента Е вычисляется по формуле:

ByteNumber = (E div 8) - (min div 8),

номер бита внутри этого байта по формуле:

BitNumber = E mod 8
Не имеет значения порядок записи элементов множества внутри конструктора. Например, [1, 2, 3] и [3, 2, 1] — это эквивалентные множества.

Каждый элемент в множестве учитывается только один раз. Поэтому множество [1, 2, 3, 4, 2, 3, 4, 5] эквивалентно [1..5].

Переменные множественного типа описываются так:

Var <идентификатор> : set of <базовый тип>;
Например:

Var A, D : Set Of Byte;

B : Set Of 'a'..'z';

C : Set Of Boolean;
Нельзя вводить значения во множественную переменную процедурой ввода и выводить процедурой вывода.

Множественная переменная может получить конкретное значение только в результате выполнения оператора присваивания:

<множественная переменная> := <множественное выражение>;

Например:

A : = [50, 100, 150, 200];

B : = ['m', 'n', 'k']; C : = [True, False];

D : = A;
Кроме того, выражения могут включать в себя операции над множествами.

Операции над множествами

Объединением двух множеств A и B называется множество, состоящее из элементов, входящих хотя бы в одно из множеств A или B. Знак операции объединения в Паскале «+».


Примеры:

1) [1, 2, 3, 4] + [3, 4, 5, 6] => [1, 2, 3, 4, 5, 6]

2) []+[‘a’..’z’]+[‘A’..’E’, ‘k’] => [‘A’..’E’, ‘a’..’z’]

3) [5<4, true and false] + [true] => [false, true]
Пересечением двух множеств A и B называется множество, состоящее из элементов, одновременно входящих во множество A и во множество B.



Знак операции пересечения в Паскале «*»

Примеры:

1) [1, 2, 3, 4] * [3, 4, 5, 6] => [3, 4]

2) [‘a’..’z’]*[‘A’..’E’, ‘k’] => [‘k’]

3) [5<4, true and false] * [true] => []
Разностью двух множеств A и B называется множество, состоящее из элементов множества A, не входящих во множество B.


Примеры:

1a) [1, 2, 3, 4] - [3, 4, 5, 6] => [1, 2]

1b) [3, 4, 5, 6] - [1, 2, 3, 4] => [5, 6]

2a) [‘a’..’z’]-[‘A’..’E’, ‘k’] => [‘a’..’j’, ‘i’..’z’]

2b) [‘A’..’E’, ‘k’] - [‘a’..’z’] => [‘A’..’E’]

3a) [5<4, true and false] - [true] => [false]

3b) [true] - [5<4, true and false] => [true]
Операция вхождения. Это операция, устанавливающая связь между множеством и скалярной величиной, тип которой совпадает с базовым типом множества. Если x — такая скалярная величина, а M — множество, то операция вхождения записывается так: x in M.
Результат — логическая величина true, если значение x входит в множество M, и false — в противном случае.

Например, 4 in [3, 4, 7, 9] –– true, 5 in [3, 4, 7, 9] –– false.

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

1) Натуральное число n является двухзначным. Вместо выражения (n >= 10) and (n <=99) можно записать n in [10..99].

2) Символ c является русской буквой. Вместо выражения (c >= ‘А’) and (c <= ‘Я’) or (c>=‘а’) and (c<=‘п’) or (c>=‘р’) and (c<=‘я’) пишем c in [‘А’.. ‘Я’, ‘а’.. ‘п’, ‘р’.. ‘я’] и т.д.
Добавить новый элемент в множество можно с использованием операции объединения. Например, a:= a+[5] Для этих же целей в Turbo Pascal 7.0 предназначена процедура Include: include (M, A) M – множество, A – переменная того же типа, что и элементы множества M. Тот же пример можно записать так: Include (a, 5)
Исключить элемент из множества можно с помощью операции «разность множеств». Например, a:= a-[5] Для этих же целей в Turbo Pascal 7.0 предназначена процедура Exclude: exclude (M, A) M – множество, A – переменная того же типа, что и элементы множества M. Тот же пример можно записать так: Exclude (a, 5)
Рассмотрим несколько примеров использования множеств при решении задач.
Задача 1. В городе имеется n высших учебных заведений, которые производят закупку компьютерной техники. Есть шесть компьютерных фирм: «Диалог», «Avicom», «Нэта», «Сервер», «Декада», «Dega.ru». Ответить на следующие вопросы:

1) в каких фирмах закупка производилась каждым из вузов?

2) в каких фирмах закупка производилась хотя бы одним из вузов?

3) в каких фирмах ни один из вузов не закупал компьютеры?
Решим задачу с использованием множеств. Для удобства дальнейших манипуляций в порядке следования занумеруем компьютерные фирмы, начиная с единицы. Занесём информации о месте закупок компьютеров каждым из вузов в отдельное множество.

Ответ на первый вопрос можно получить, выполнив пересечение всех таких множеств.

Ответ на второй вопрос – результат объединения множеств.

И, наконец, на последний – разность множества всех фирм и множества фирм, где хотя бы один вуз делал покупки.

program ex_set_1;

type firma = set of 1..6;

v = array[0..20] of firma;

const f: array [1..6] of string[10] = ('Диалог', 'Avicom', 'Нэта', 'Сервер', 'Декада', 'Dega.ru');
{процедура ввода информации о закупке компьютеров в очередной фирме}

procedure vvod(var a: firma);

var i: byte; ans: 0..1;

begin

a:= [];

for i := 1 to 6 do

begin

Write('Вуз покупал компьютеры в фирме ', f[i], ' (1 - да, 0 - нет)? '); ReadLn(ans);

if ans = 1 then a:=a+[i]

end;

end;
{процедура вывода элементов массива, номера которых содержатся в множестве}

procedure Print(a : firma);

var i: byte;

begin

for i := 1 to 6 do if i in a then write(f[i]:10);

writeln

end;
{Процедура, дающая ответ на первый вопрос}

procedure Rez1(a: v; n : byte; var b : firma);

var i : byte;

begin

b := [1..6];

for i := 0 to n-1 do b := b * a[i];

end;
{Процедура, дающая ответ на второй вопрос}

procedure Rez2(a: v; n : byte; var b : firma);

var i : byte;

begin

b := [];

for i := 0 to n-1 do b := b + a[i];

end;
var a: v; n, i : byte; c : firma;

begin

write('Сколько вузов делали закупку? '); readln(n);

for i := 0 to n-1 do vvod(a[i]);

Rez1(a, n, c);

writeln('Каждый из вузов закупил компьютеры в фирмах: '); Print(c);

Rez2(a, n, c);

writeln('Хотя бы один из вузов закупил компьютеры в фирмах: '); Print(c);

writeln('Ни один из вузов не закупил компьютеры в фирмах: '); Print([1..6]-c);

end.
Задача 2. Сгенерировать n множеств (нумерацию начать с 1). Вывести элементы, которые входят во все множества с номерами, кратными трём, но не входят в первое множество.

program ex_set_2;

type mn = set of byte;

v = array[1..30] of mn;

{процедура ввода информации в очередное множество}

procedure vvod(var a: mn);

var i, n, vsp: byte;

begin

a:= []; n := 1 +random(200);

for i := 1 to n do

begin

vsp:= random(256);

a:=a+[vsp]

end;

end;

{процедура вывода элементов множества}

procedure Print(a : mn);

var i: byte;

begin

for i := 0 to 255 do if i in a then write(i:4);

writeln

end;
{Процедура, дающая ответ на вопрос}

procedure Rez(a: v; n : byte; var b : mn);

var i : byte;

begin

b := [0..255];

i:= 3;

while i <= n do

begin

b := b * a[i];

i := i + 3

end;

b := b - a[1]

end;
var a: v; n, i : byte; c : mn;
begin

randomize;

write('Сколько множеств? '); readln(n);

for i := 1 to n do

begin vvod(a[i]);

print (a[i])

end;

Rez(a, n, c);

Print(c);

end.

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

program ex_set_3;

var m : set of char;

s : string; i : byte;

begin

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

readln(s);

m :=[];

i := 1;

while i <= length(s) do

if s[i] in m then delete(s, i, 1)

else begin m:=m+[s[i]]; i := i + 1 end;

writeln(s)

end.

1   2   3   4   5   6   7   8   9   10   11

Похожие:

«программирование» icon12 Достижения компьютерной техники 15 Программирование
Программирование 3
«программирование» iconПрограмма по формированию навыков безопасного поведения на дорогах...
Понятно, что программирование стержень профильного курса информатики. Но какова его роль и есть ли необходимость изучать программирование...
«программирование» iconРабочая программа дисциплины оп. 08 Теория алгоритмов (с дополнениями...
Специальность 09. 02. 03 «Программирование компьютерных систем» (базовая подготовка)
«программирование» iconОсновная образовательная программа среднего профессионального образования...
Нормативные документы для разработки ооп спо по специальности 230115 Программирование в компьютерных системах
«программирование» icon«Динамическое Web-Программирование»
Целью курса "Динамическое Web-Программирование" является изучение принципов разработки приложений, работающих в среде Интернет и...
«программирование» iconРабочая программа по дисциплине “алгоритмизация и программирование”...
Алгоритмизация и программирование” составлена в соответствии с требованиями Государственного общеобразовательного стандарта высшего...
«программирование» iconПрограмма учебной дисциплины технические средства информатизации...
Рабочая программа учебной дисциплины разработана на основе Федерального государственного образовательного стандарта (далее – фгос)...
«программирование» iconСамостоятельная работа Методические указания к выполнению самостоятельной...
Методические указания выполнению самостоятельной работы по курсу «Информатика» и «Информатика и программирование»: Авт сост Н. В....
«программирование» iconОбзор цифровых образовательных ресурсов, рекомендованных Министерством...
Программа предназначена для проведения квалификационных испытаний в рамках процедуры аттестации педагогических работников по должности...
«программирование» iconРеферат по дисциплине «Информатика и программирование»

«программирование» iconРазработка урока по информатике с применением икт на тему «Программирование...
...
«программирование» iconПрограммирование в среде логомиры
«Убегающая кнопка» развивает у учеников первоначальные навыки работы с мышью
«программирование» iconАннотация рабочих программ учебных дисциплин (модулей) специальности...

«программирование» icon«икт в образовании»
Рабочая программа дисциплины «Программирование» /сост. Хатаева Р. С.– Грозный: чгпи, 2012г
«программирование» iconУчебно-методический комплекс дисциплины «Информатика и программирование»
Государственного образовательного учреждения высшего профессионального образования
«программирование» iconКурсовая работа по дисциплине «Информатика и программирование»
Кафедра «Программное обеспечение вычислительной техники и автоматизированных систем»


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск