Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка по информатике, часть 2

.pdf
Скачиваний:
24
Добавлен:
30.03.2015
Размер:
525.19 Кб
Скачать

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

5.Дана последовательность символов, содержащая символ «я». Определить

порядковый номер символа «я» в последовательности.

6.Дана последовательность символов. Определить в ней символ, который по алфавиту предшествует другим.

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

взаданный текст из 100 литер.

8.Определить, является ли заданная последовательность символов в строке симметричной: читается одинаково слева направо и справа налево.

9.Напечатать текст, образованный символами с порядковыми номерами 56, 89, 84 и 69 и текст с изменением регистра.

10.Даны две строки с1 и с2, содержащие до 5 цифр каждая. Преобразовать их к данным целого типа, используя процедуру VAL, вычислить арифметическое выражение с3 = (с1– с2)/(с1+с2).

11.Вычислить суммы кодов всех букв, входящих в слова SUM и ALFA. Сравнить слова и определить, какое из них больше.

12.Напечатать заданный текст с удалением из него всех букв b, непосредственно перед которыми находится буква с.

13.Имеется символьная переменная d, присвоить логической переменной T значение true, если значение d-цифра, и значение false в противном случае.

14.Если в заданный тексте входит каждая из букв слова key, тогда напечатать

«yes» , иначе – «no».

15.Написать программу, которая предварительно запрашивает ваше имя, а затем приветствует вас по имени.

16.Ввести вещественное число, преобразовать его в строку. Подсчитать количество разрядов в целой и дробной частях. Найти представление числа в виде мантиссы (по модулю меньшее единицы) и порядка.

17.Ввести строку, состоящую из нулей, единиц и десятичной точки. Преобразовать ее в десятичное число.

Задание 2 (программа 10_2)

1. Дана строка, содержащая не более двадцати латинских букв. Все вхождение «max» в ней заменить на «min» и «макс» на «мин». Подсчитать число таких замен.

2. Дана строка, содержащая сорок латинских букв. Подсчитать все вхождение «abc» в строку и их удалить. Вывести на экран два варианта полученных строк,

заполняя образовавшую «дыру» последующими буквами с добавлением в конце пробелов, и, оставляя на месте удаленных символов пробелы.

3.Определить сколько различных символов входит в заданный текст, содержащий не более 100 литер и оканчивающийся точкой.

4.Определить номера позиций гласных букв в заданном тексте.

5.Напечатать заданный текст из 60 символов, удалив из него повторные вхождения каждой литеры.

31

6.Дана строка, состоящая из слов, разделенных пробелами, в конце строки – точка. Определить, сколько в строке слов, содержащих четное число символов.

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

8.Дан непустой текст из строчных букв, за которыми следует точка. Определить упорядочены ли эти буквы по алфавиты. Напечатать результат проверки и исходный текст прописными буквами.

9.Дана последовательность от двух до восьми слов, в каждом из которых от одной до десяти строчных букв; между соседними словами – не менее одного пробела, за последним словом – точка. Напечатать слово с максимальной длиной.

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

11.Дана последовательность, содержащая от одного до восьми слов, в каждом из которых от одной до пяти строчных букв; между соседними словами – запятая, за последним словом – точка. Напечатать эту же последовательность, удалив из нее повторные вхождения слов.

12.В заданном тексте (слова разделены пробелами) поменять местами первое

ипоследнее слово.

13.Даны числа K и текст из слов, разделенных пробелами, в конце – точка. Определить количество слов в тексте, состоящих из K букв.

14.Дана последовательность, содержащая от двух до десяти слов, в каждом из которых от одной до восьми строчных букв; между соседними словами – не менее одного пробела, за последним словом – точка. Напечатать те слова, в которых буквы слова упорядочены по алфавиту.

15.Дана последовательность, содержащая от двух до десяти слов, в каждом из которых от одной до пяти строчных букв; между соседними словами – запятая, за последним словом – точка. Напечатать эту же последовательность слов, но в обратном порядке.

16.В заданный текст входят только цифры и буквы. Определить, является ли текст десятичной, шестнадцатеричной или двоичной записью целого либо вещественного числа (указать при выводе какого).

17.В заданном тексте найти и, если есть, напечатать все слова-палиндромы (слова, которые одинаково читаются слева направо и справа налево).

18.Дан текст из слов, разделенных пробелами, в конце точка. Найти слово наименьшей длины (содержащее наименьшей количество букв).

19.Разработать программу шифровки – дешифровки текста путем замены каждой буквы текста другой буквой, с кодом на N больше (меньше) исходной.

20.Дана непустая последовательность слов, в каждом на которых от одной до шести букв; между соседними словами – запятая, за последним – точка. Напечатать

те слова, у которых одинаковые «соседи». (Определить процедуру, которая вводит

очередное слово и присваивает его шестилитерной строке, а запятую или точку присваивает некоторой глобальной переменной).

32

Лабораторная работа 11

Файлы

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

При работе с файлами в разделе описаний должна быть объявлена файловая переменная. В основном блоке программы файловая переменная связывается с конкретным физическим файлом процедурой

ASSIGN (<файловая переменная>,’имя файла’);

 

Далее открывается файл для чтения процедурой

RESET(f1);

для записи – процедурой REWRITE(f2);

где f1, f2 – файловые переменные. Далее считывается информация из файла или записывается в файл через соответствующую файловую переменную.

После окончания работы с файлом необходимо его закрыть процедурой

CLOSE (<файловая переменная>);

Пример. Вычислить суммы элементов в столбцах двумерного числового массива А[1..2,1..4], заданного в файле FILE1.dat. Полученные значения поместить в файл FILE2.dat.

Начало

Связывание

f1,f2 c файлами

Открыть

f1

i=1,2

j=1,4

Ввод aij из

файла

f1

Закрыть f1,

 

Открыть f2

 

j=1,4

 

 

Закрыть f2

Sj=0

 

i=1,2

Конец

 

Sj=Sj+aij

Вывод Sj

 

в файл f2

Рис.12

 

Для решения задачи разработана СА (рис.12) и программа:

Program lr_11;

Var

a: array [1..2,1..4] of integer;

33

s: array[1..4] of integer;

i, j: integer;

f1, f2: text; {объявление файловых переменных текстового типа}

Begin

 

 

ASSIGN (f1,’FILE1.dat’);

{ связывание f1 с физическим файлом}

ASSIGN (f2,’FILE2.dat’);

 

 

RESET (f1);

{открыть файл для чтения}

for i:=1 to 2 do

 

 

for j:=1 to 4 do

 

 

Read(f1,a[i,j]);

{чтение из файла, связанного с f1 }

CLOSE (f1);

{закрыть файл, связанный с f1}

REWRITE (f2);

{открыть файл для записи}

WRITELN (f2,’ 1 2 3 4 столбцы’);

{вывод в файл через f2}

WRITELN (F2,’суммы по столбцам’);

{вывод в файл через F2}

for j:=1 to 4 do

 

 

begin

 

 

s[j]:=0;

 

 

for i:=1 to 2 do

s[j]:=s[j]+a[i,j];

write(f2,s[j]:3)

{вывод в файл через F2}

end;

 

CLOSE(F2);

{закрыть файл, связанный с F2}

END.

 

 

Файл результатов

Исходный файл

FILE2.dat

FILE1.dat

1 2 3 4 – столбцы

1 2 3 4

суммы по столбцам

1 2 3 4

2 4 6 8

Задание 1 (программа 11_1)

Выполнить задачу из лабораторной работы 9, считывая исходные данные из одного файла и записывая полученные результаты в другой текстовый файл. Файл с исходными данными должен быть подготовлен предварительно.

Задание 2 (программа 11_2)

1. В текстовом файле Т1 записана последовательность целых чисел, разделенных пробелами. Написать программу, записывающую в текстовый файл Т2 все положительные числа из Т1.

2.В текстовом файле f1 записана последовательность чисел. Сформировать текстовый файл f 2, содержащий все числа в обратном порядке.

3.В текстовом файле Т1 записана последовательность чисел. Разработать программу, переписывающую в текстовый файл Т2 сначала все положительные числа из Т1, нуль, затем – все отрицательные числа.

34

4.В текстовом файле f 1 дана последовательность целых чисел, разделенных пробелами. Записать в тестовый файл F2 все положительные числа, а в файл F3 – отрицательные числа и нулевые элементы.

5.Сформировать файл из девяти строк, в первой из которых – одна единица, во второй – две двойки,…, в девятой – девять девяток.

6.Даны два файла F1, F2. Сформировать третий файл F, в который сначала записать все элементы файла F1, а затем – элементы файла F2.

7.Элементы каждого из заданных в двух файлах массивов X и Y упорядочены по возрастанию. Объединить элементы этих двух массивов в один файл F с упорядочением их по возрастанию.

8.В заранее подготовленном файле K задан массив из 15 целых чисел. Выделить в другой файл те элементы массива K, индексы которых являются степенями двойки.

9.В текстовом файле S1 записана последовательность из N*K чисел. Написать программу, формирующую в файле S2 матрицу из N строк по K чисел в каждой строке.

10.В файле W задан массив из девяти элементов. В новом файле WW сформировать массив, в котором каждому элементу будет присвоено значение справа

соседнего с ним. Последнему элементу присвоить значение первого.

11.В файле D1 задана квадратная матрица вещественных чисел. Сформировать файл D2, в котором поменять местами первую и последнюю строки матрицы.

12.В текстовом файле F подготовить последовательность целых чисел, разде-

ленных пробелами. Написать программу, записывающую в текстовый файл FF все различные значения, встречающиеся в файле F.

13.В файле X задан массив из 20 чисел. Упорядочить его по возрастанию и занести в файл Y.

14.В файле X1 задана матрица целых чисел. Сформировать файл Х2, в котором все элементы с четными номерами строки и столбца матрицы заменить нулем (стереть).

15.Задана в файле строка текста. Выполнить все циклические сдвиги слов в заданном тексте влево. Каждый полученный при этом текст вывести в другой файл.

16.В файле Y1 задана матрица вещественных чисел. Сформировать файл Y2, в котором строки матрицы упорядочены по убыванию элементов первого столбца.

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

18.Имеется текстовый файл BOOK. Написать программу, которая игнорирует исходное деление этого файла на строки, переформирует его, разбивая на строки так, чтобы каждая строка оканчивалась точкой либо содержала ровно 40 литер, если среди них нет точки.

19.Имеется текстовый файл T. Вывести в новый файл и напечатать первую из самых коротких его строк.

35

20. Имеется текстовый файл, содержащий фразу. Написать программу, которая считывает из файла литеры до первой точки и записывает их (без точки) в другой текстовый файл, формируя в нем строки по 20 символов (в последней строке литер может быть меньше).

Лабораторная работа 12

Записи

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

Запись – описание комбинированного типа, состоящее из нескольких полей, каждое из которых имеет свой тип. Записи состоят из фиксированного числа компонентов, называемых полями записи. В отличие от массива компоненты

(поля) записи могут быть различного типа. Структура объявления типа «запись»:

TYPE <ИмяТипа>=RECORD <поле1>:<тип поля1>; <поле2>:<тип поля2>;

...

<полеN>:<тип поляN>

end;

где <Имя_Типа> и <поля> являются правильными идентификаторами. Если тип нескольких полей совпадает, то имена полей можно перечислить через запятую. Доступ к каждому из компонентов записи производится указанием составного имени: имени переменной и через точку имени поля.

Для упрощения доступа к полям записи может использоваться оператор присоединения. Его структура:

WITH <переменная_Типа"запись"> DO <оператор>;

Доступ к вложенным элементам таких структур (к записи в записи) выполняется записью ряда полей через точки или операторы присоединения. В Турбо Паскале также допускаются записи с вариантными полями.

Пример: Разработать программу формирования списка студентов с указание М дат рождения и выборки студентов по году рождения.

Program zapis;

 

USES CRT;

{подключение модуля СRT}

type

{определение нового типа}

student = record

{запись}

name: string[15];

denRogd: RECORD {вложенная запись} den, mes: byte;

god: word

end;

end;

var

Z: ARRAY [1..20] OF student;

36

g, i, n: byte;

{g – год}

BEGIN

 

CLRSCR;

{очистка экрана}

n:=20;

writeln('ВВЕДИТЕ КОЛИЧЕСТВО СТУДЕНТОВ'); READln(n); for i:=1 to n do

begin

writeLN('ВВЕДИТЕ ИМЯ ',i,'СТУДЕНТА');

readln(z[i].name);

WRITELN ('ВВЕДИТЕ день рождения');

readLN(z[i].denRogd.den);

WRITELN ('ВВЕДИТЕ месяц рождения');

readLN(z[i].denRogd.mes);

WRITELN ('ВВЕДИТЕ год рождения'); ReadLN (z[i].denRogd.god);

end;

WRITELN ('ВВЕДИТЕ год для поиска'); writeln(' СПИСОК ');

readln(g);

for i:=1 to n do

if g=z[i].denRoad.god then

begin

Write ('ИМЯ СТУДЕНТА');

WRITELN(z[i].name); WRITE (' Дата рождения –');

WITH z[i].denRogd DO writeln(den,'.',mes,'.',god);

WRITELN; end

END.

Задание 1 (программа 12_1)

1.Ввести оценки студента по 5 экзаменам. Определить средний балл и подсчитать количество удовлетворительных, хороших и отличных оценок. Напечатать название предмета, если есть «неуд».

2.Дан список студентов и оценка каждого на экзамене (оценки на N экзаменах). Подсчитать количество удовлетворительных оценок, хороших, отличных и средний балл в группе. Напечатать фамилии неуспевающих студентов.

3.Дан список студентов группы. Заполнить его следующими сведениями: фамилия, имя, отчество; имеет ли компьютер (если имеет, то какой и с какого года). Подсчитать сколько студентов имеют ПК.

4.Сформировать список студентов группы со следующими сведениями: Фамилия, имя, отчество, знает ли языки программирования Turbo Pascal, Cи (если да, где обучался и сколько лет). Подсчитать, сколько студентов знают язык Си,

сколько – Turbo Pascal, сколько оба языка.

37

5.Сформировать список студентов группы, в котором указать фамилию (имя, отчество); город, в котором получил среднее образование (номер школы, если обучался в Омске). Подсчитать, сколько в группе иногородних студентов.

6.Сформировать запись «ключевые слова ТР»: слово и перевод. Подсчитать

их количество. Организовать поиск: по ключевому слову перевод и наоборот.

7.Сформировать телефонный справочник. По номеру организовать поиск владельца и наоборот.

8.Сформировать запись «Даты – праздники». Организовать в программе ввод дат, подсчитать число праздничных дней и рабочих.

9.Сформировать запись «английское слово-перевод». Вводя слово

(английское или русское), найти перевод или выдать сообщение «нет в словаре». По возможности предусмотреть пополнение словаря.

10.Сформировать запись «операторы ТР»: оператор, действие. Подсчитать их количество и количество операторов имеющих повторяющиеся ключевые слова.

11.Сформировать запись «типы ТР»: имя, тип, операции, разрешенные в

данном типе. Подсчитать количество разных операций и вывести списки типов для каждой операции.

12. Сформировать пополняемую базу данных «Континент страны», в кото-

рой указать столицы, численность населения, крупные города. Организовать поиск страны по городу, стран или городов на континенте.

13.В файле задан список книг (автор, название, год издания). Разработать программу выбора книг, выпущенных ранее заданного года.

14.Сформировать список граждан, в котором указать фамилию, имя, отчество; адрес; профессию. Организовать в программе выборку и подсчет граждан с одинаковой профессией.

15.Сформировать список студентов группы, в котором указать фамилию, имя, отчество; день, число и месяц рождения. Организовать выборки по месяцу и году рождения.

16.Дан список студентов группы. Заполнить его следующими сведениями: фамилия, имя, отчество; день, число и месяц рождения. Распечатать список в порядке возрастания дат рождения.

17.Сформировать базу данных «Единицы измерения», в которой указать название единицы, обозначение, назначение, соотношение. Организовать поиск по любому полю.

18.Разработать базу данных « География. Реки», в которой указать название реки, местоположение, длину, глубину.

19.Разработать базу данных «Астрономия», в которой указать название звезды, величину, созвездие.

20.Разработать базу данных «Планеты солнечной системы», в которой указать название планеты, величину, удаленность, спутники.

38

21.Сформировать базу данных «Химические элементы», в которой указать название элемента, формулу, группу, организовать выборки.

22.Ввести сведения о человеке: фамилия, имя, отчество, пол, национальность, рост, вес, дата рождения.

23.Ввести сведения о гражданине: Ф.И.О., дата рождения, ИНН, № страхового свидетельства, № мед. полиса. Запрограммировать поиск.

24.Сформировать справочник о спортивных командах: название, город, число сыгранных игр, число очков, количество игроков.

Задание 2 (программа 12_2)

Дополнить программу 12_1 заполнением и обработкой файлов. Имя файла вводить с клавиатуры в процессе работы программы.

Лабораторная работа 13

Множества

Множество набор однотипных логически связанных друг с другом объектов

[1].

Объявление переменных типа «множество» производится в следующем виде: Var <Имя Переменной>: SET of <базовый тип>;

где <Имя Переменной> правильный идентификатор ТП, <базовый тип> тип элементов множества, в качестве которого может применяться любой порядковый тип кроме Word, Integer, Long Int, Short Int.

Над множествами определены операции пересечения (*); объединения (+); разности (–); операции отношений: эквивалентности (=), неэквивалентности (< >), проверки вхождения (< = и >=), проверки принадлежности элемента множеству

(in).

Структура бинарной операции принадлежности, возвращающей значение TRUE, если выражение (элемент) принадлежит указанному множеству, имеет вид

<выражение или элемент> in <множество>.

Пример: Ввести два множества по пять цифр. Найти множество разности R, напечатать его элементы.

Program Mnog13;

Uses Crt, Graph;

Type

MN=set of 0..9; {множество цифр}

Var

S1, S2, R: MN; i, x, y: byte;

BEGIN s1:=[];

s2:=[];

writeln('Введи 2 множества по 5 чисел по 2 числа в строке'); for i:=1 to 5 do

39

begin

 

read(x, y);

 

s1 := s1 + [x];

 

s2 := s2 + [y];

 

end;

 

R:= s1–s2;

{ Разность}

if R<=s1 then writeln('Разность входит в S1');

if NOT(R<=s2) then writeln('Разность не входит в S2');

for i:=0 to 9 do

if i in R then writeln('R содержит цифру – ', i)

for i:=0 to 1 do

if i in R then writeln('В R есть двоичная цифра – ', i)

else writeln('Двоичная цифра ', i, 'не входит в R ');

END.

Задание 1 (программа 13_1)

Разработать программу c заданным индивидуальным кодом (табл. 1), в которой

ввести два множества M1 и М2 с размерами, указанными 1 и 2 цифрами, а тип символов указан цифрой 3 в таблице 1;

выполнить для них заданную операцию (цифра 3);

проверить, входят ли исходные множества в результат операции, а результат в исходные множества;

проверить, равны ли множества;

проверить, принадлежат ли элементы, указанные буквой в коде варианта, раздельно множеству M1 или М2 и подсчитать их количество по множествам.

Наименование пунктов в коде:

Первая и вторая цифры размерность исходных множеств.

 

 

 

 

 

 

 

Таблица 1

№ ва-

код

 

код

 

код

 

код

 

рианта

 

 

 

 

 

 

 

 

1

1-9-1-1-е

9

4-4-3-9-j

17

4-6-5-8-d

25

5-4-1-6-е

 

2

2-8-2-2-b

10

5-5-4-1-f

18

3-7-6-9-m

26

5-4-1-6-e

 

3

3-7-3-3-k

11

6-6-5-2-c

19

2-8-1-5-g

27

6-3-3-9-m

 

4

4-6-4-4-i

12

9-1-6-3-n

20

5-5-2-6-d

28

7-2-4-7-c

 

5

5-5-5-5-n

13

8-2-1-4-h

21

6-6-3-7-b

29

8-3-5-9-g

 

6

6-4-6-6-a

14

7-3-2-5-d

22

4-4-4-8-n

30

6-5-6-8-b

 

7

7-3-1-7-n

15

6-4-3-6-n

23

3-6-5-6-j

31

1-8-1-9-r

 

8

8-2-2-8-a

16

5-5-4-7-a

24

2-7-6-9-k

32

2-7-2-8-f

 

 

Операции (третья цифра)

1.

*, +

4.

+, *

2.

*, –

5.

–, *

3.

+, –

6.

–, +

∙ Тип символов во множествах (четвертая цифра)

40