Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы Pascal.docx
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
285 Кб
Скачать
☆

Задания I уровня

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

              1. Дана программа нахождения большего из двух чисел:

на алг.языке

На Паскале

Программма БИД

Описание а,b,max:Вещественный

Ввод (а,b,’Введите 2 числа’)

Если а>b

То max:=a

Иначе max:= b

Конец_Если

Вывод (max)

Конец_Программы

Var a,b, max: real;

BEGIN

READ(a,b);

IF A>B

THEN max: = a

ELSE max: = b;

writeln(max)

END.

Введите программу в память ЭВМ, исполните ее (см. лаб. работу №1)

для значения a=15; b=7 (когда вы нажмете клавиши ‘ctrl+f9’ (исполнение программы), компьютер переключится на черный экран ( экран пользователя). Здесь вы введете значения a и b). Просмотр результата–комбинация клавиш ‘Alt-F5’.

2 . Найдите меньшее из двух, для чего знак '>' в решении задачи 1 надо изменить на ...

3. Найти большее из трех, использовав следующий алгоритм:

Алгоритм Наибольшее

a, b, c, мах: Вещественный

Ввод (a, b, c,’Введите 3 числа’)

Если a > b

То мах : = a

Иначе мах:= b

Конец_Если

Если с > мах

То мах: = с

Конец_Если

Вывод (мах)

Конец_Программы

  1. Составить программу, позволяющую получить словесное наименование оценок 110 по следующему алгоритму (на Интале):

Программа оценка

Описание х:Целый

а: Строковый

Конец_Описания

Ввод (х, 'x=')

Выбрать_По х

10: а:='превосходно'

9: а:='отлично'

8: а:='очень хорошо'

6 .. 7: а:='хорошо'

4 .. 5: а:='удовлетворительно'

3: а:='неудовлетворительно'

2: а:='плохо'

1: а:='очень плохо'

Иначе

а:='такой отметки нет'

Конец_Выбора

Вывод(а)

Конец_Программы

5. Напишите программу, которая по номеру дня недели - целому числу от 1 до 7 - выдает в качестве результата количество занятий в вашей группе в соответствующий день.

Задания II уровня

1. Опишите зависимости между переменными а и х; у и х, которые устанавливаются следующими сериями команд:

a) Если х>=0 б) if f>0 then y=1 else

То у:= х if f=0 then y:=0

Иначе у:= - х else y:=-1;

Конец_Если

  1. Пройдет ли прямоугольная открытка со сторонами а см, b см в конверт со сторонами x см, y см?

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

  3. Даны координаты (как целые от 1 до 8) двух полей шахматной доски. Определить, может ли конь за один ход перейти с одного из этих полей на другое.

  4. Найти корни квадратного уравнения Ах2+Вх+С=0.

САМОСТОЯТЕЛЬНАЯ РАБОТА:

  • Принадлежит ли точка с координатами (х,у) кольцу с радиусами R1 и R2?

  • В зависимости от стажа работы на предприятии введена надбавка в размере: для работающих от 5 до 10 лет–5%, для работающих от 10 до 15 лет–10%, для работающих от 15 до 20 лет–15%, для работающих свыше 20 лет–20%. Составьте программу, которая по заданному стажу работы определит размер надбавки в процентах.

КОНТРОЛЬНЫЕ ВОПРОСЫ И ЗАДАНИЯ:

  1. Сколько вариантов различных действий есть у команды ветвления в полной форме? в неполной? а у команды выбора (CASE)?

  2. Объясните ошибки в следующих записях: а) 1 and 0; б) x>0 or y=4.

  3. Запишите на Паскале выражение, истинное при выполнении указанного условия и ложное в противном случае: а) x принадлежит отрезку [0,1]; б) каждое из чисел x, y, z положительно; в) только одно из чисел x, y, z положительное; г) хотя бы одно из чисел x, y, z положительно.

  4. Нарисуйте на плоскости (x, y) область, в которой и только в которой истинно указанное выражение: а) abs(x)>=1; б) abs(y)>=1; в) abs(x)<=1; г)abs(y)<=1.

  5. Могут ли в полной развилке не выполниться операторы ни по одной из ветвей? Выполниться по обеим ветвям?

ЛАБОРАТОРНАЯ РАБОТА

ТЕМА: Программирование с использованием символьных переменных.

ЦЕЛЬ: Изучить правила объявления и использования строковых переменных на языке программирования Паскаль. Научить учащихся работать со строками как с набором символов.

ПО: Turbo Pascal или BP.

КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ:

Cимвольные константы– это какой-нибудь один символ, заключенный в апострофы: 'A', ‘1’, ‘!’ и т.д. (<=255 символов). Символьные переменные занимают в памяти 1 байт и описываются следующим образом, например: var с: char;. Тип сhar может принимать значения из множества символов ASCII, т.е. значением литерного типа является множество всех символов кодовой таблицы компьютера. Каждому символу ставится в соответствие целое число в диапазоне 0..255. Это число является кодом символа. Чтобы по коду символа (<=255) определить его значение, используют конструкцию: char(код), например:

var i: byte; c:char;

begin

i:=65; c:=char(i); writeln(‘cимвол-’,c); (на экране будет «символ-А»)

end.

Для преобразования данных типа CHAR (символ) в целое число предназначена функция ORD, обратное преобразование данных типа INTEGER в CHAR осуществляет функция CHR.

Var c:char;

Begin

Write(‘введите символ’);

readln(c);

writeln(c,’ = ’,ord(c));

end.

{Программа читает один символ «c», преобразует его к целому и выводит на экран}

К данным символьного типа можно применять операции отношения. Для операций сравнения переменные типа СHAR упорядочены в соответствии с алфавитом (таблицей символов ASCII).

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:

  1. Изучить необходимые сведения, указанные выше.

  1. Войти в режим редактирования и набрать текст программы (см.(*))

  2. Выполнить программу.

  3. Эту же программу выполнить по шагам с использованием Турбо - отладчика (при выполнении очередного шага нажимать клавиши <F7> или <F8>).

  4. В окно Watch занести контролируемые данные и проследить за изменением их значений при выполнении программы. (Добавлять переменные в окно Watch можно, нажав последовательно:<F10>, выбрав пункты<Debugg> и <Add watch> и далее указав нужные вам переменные. Окна переключать можно с помощью клавиши <F6>.)

  5. Проверить работоспособность программы на других исходных данных.

  6. Составить программы для других пунктов задания.

  7. Оформить отчет по лабораторной работе, защитить и сдать его преподавателю.

ЗАДАНИЯ I УРОВНЯ:

              1. Дана программа подсчета количества букв А в строковой переменной:

на Интале:

На Паскале:

Программа подсчет

Описание p,t:Строковый

i,k :Целый

Конец_Описания

t:=' А роза упала на лапу Азора'

k:=0

Повторять_Для i От 1 До Длина(t)

Подстрока(i,i,t,p)

Если p= 'a'

То k:=k+1

Конец_Если

Завершить

Вывод (к)

Конец_Программы

Var t :string;

i,k:integer; (*)

begin

k:=0;

t:=’ А роза упала на лапу Азора’;

for i:=1 to length (t) do

if t [i]=’a’ then k:=k+1;

writeln (k);

end.

(функция length(t) определяет длину строки t)

В тексте программы текст {*} замените на другой текст, например "молоко". Чему будет равно k в этом случае? 2а) Команду присваивания t:='А роза ... ' замените на оператор ввод(t) (на Интале) (readln(t)-на Pascal-е), чтобы можно было вводить любой текст и проверить программу на других текстах.

2б) Дана строка символов. Подсчитайте общее количество символов '+' в данной строке. Что надо изменить в программе?

2б) Дана строка символов. Подсчитайте общее количество символов '+', '-', '*' в данной строке (напишите 3 команды "если", либо укажите сложное условие:

если (p='+') или (p='*') или (p='*') if ((p='+') or (p='*') or (p='*'))

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

4. Напечатайте тест, образованный литерами с порядковыми номерами 65, 71 и 69.

5. Напечатайте все буквы латинского алфавита.

ЗАДАНИЯ II УРОВНЯ:

Дана строка текста. Найти:

  1. количество слов, начинающихся с буквы «б»;

  2. количество слов, у которых первая и последняя буквы одинаковые;

  3. количество букв «а» в последнем слове;

  4. количество слов, оканчивающихся буквой «й»;

  5. количество слов, которые содержат хотя бы одну букву «d»;

  6. количество слов, которые содержат ровно три буквы «е»;

  7. сколько раз встречается в тексте буквосочетание «то»

  8. длину самого короткого слова.

    1. В тексте, заканчивающемся точкой, все строчные латинские буквы поменяйте на прописные.

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

    3. Удалите из строки все находящиеся в ней пробелы.

САМОСТОЯТЕЛЬНАЯ РАБОТА

Вывести на экран последовательности символов:

А) A B B C C C D D D D E E E E E …Z Z Z .… Z;

Б) A

B B

C C C

. . . . . . .

Z Z Z Z . . . Z (26 букв)

В) A

А B

A B C

A B C D

. . . . . . . . .

A B C D . . . Z (26 букв)

КОНТРОЛЬНЫЕ ВОПРОСЫ:

  1. Каждому символу ставится в соответствие целое число из диапазона …?

  1. Для чего нужны апострофы (одиночные кавычки)?

  2. Какие операции допустимы над символьными данными?

  3. Верно ли утверждение, что ord('0’)=0?

  4. Каковы особенности кодировки цифр, латинских и русских букв?

ЛАБОРАТОРНАЯ РАБОТА

ТЕМА: Программирование с использованием строковых переменных.

ЦЕЛЬ: Изучить правила объявления и использования строковых переменных на языке программирования Паскаль. Научиться пользоваться строковыми процедурами и функциями при составлении программ.

ПО: Turbo Pascal.

КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ:

Переменные типа строка символов (строковые переменные) аналогичны массивам (наборам однотипных данных) типа char. Их отличием является то, что число символов (длина строковой переменной) может динамически меняться в интервале от нуля до заданного верхнего значения. Тип строковой переменной - string[размер<=255 символов]. В явном виде строка записывается в виде ограниченной апострофами последовательности символов. Один символ определяется как тип сhar. Тип сhar может принимать значения из множества символов ASCII.

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

Встроенные функции для работы со строками:

Copy (S,X,Y) Выделение из строки S подстроки длиной Y, начиная с позиции X.

Concat(S1,S2,...Sn) Конкатенация строк S1,S2,...,Sn (объединение строк–то же, что «+»).

Length(S) Вычисление текущей длины строки S.

Pos(S1,S2) Поиск подстроки S1 в строке S2. Возвращается номер позиции первого вхождения подстроки S1 в строку S2, иначе возвращается 0.

Встроенные процедуры:

Delete(S,X,Y) Удаление из строки S подстроки длиной Y, начиная c позиции X.

Insert(S1,S2,X) Вставка строки S1 в строку S2, начиная с позиции X.

Str(X,S) Преобразование целое (вещественное) X в строку S.

Val(S,X,Code) Преобразование строки S в численное значение X, причем переменная Code имеет тип integer (Сode сообщает номер ошибочного знака в строке, иначе Сode равен 0).

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:

  1. Изучить необходимые сведения, указанные выше.

  1. Пункт 1 задания можно сделать без составления программы

  2. Для задания 2 войти в режим редактирования и набрать текст программы.

  3. Выполнить программу (если по шагам, то при выполнении очередного шага нажимать клавиши <F7> или <F8>). В окно Watch занести контролируемые данные и проследить за изменением их значений при выполнении программы. (Добавлять переменные в окно Watch можно, нажав последовательно <F10>, выбрать пункты <Debugg> и <Add watch>(или, что же, нажать Ctrl+F7) и далее указать нужные Вам переменные. Окна переключать можно с помощью клавиши <F6>.)

  4. Проверить работоспособность программы на других исходных данных.

  5. Составить программы для других пунктов задания и выполнить их аналогично

  6. Оформить отчет по лабораторной работе, защитить и сдать его преподавателю.

ЗАДАНИЯ I УРОВНЯ:

1. Из слова ЖЕЛЕЗНОДОРОЖНИК можно сделать слово ДОЗОР.

Фрагмент программы: a:=’ЖЕЛЕЗНОДОРОЖНИК’;

b:=copy (a,8,2)+a[5]+copy(a,9,2);

Составьте из слова «ЖЕЛЕЗНОДОРОЖНИК» слова «КНИЖНИК», «ЖЕЗЛ», «КОЛЕНО», «КРОКОДИЛ», «ЖЕЛЕЗО»

2. Дана программа подсчета количества сочетаний «ая» в строковой переменной:

на Интале:

Программа подсчет

Описание

T,s: Строковый

I,k: Целый

Конец_Описания

T:=' Красная прекрасная ужасная’

k:=0

Повторять Для i от 1 до Длина(t)-1

Подстрока(i,i+1,t,s)

Если s= 'aя'

То k:=k+1

Конец_Если

Завершить

Вывод (к)

Конец_Программы

На Паскале:

Var {*}

t :string;

i,k:integer;

begin

k:=0;

t:=’Красная прекрасная ужасная’;

for i:=1 to length (t)-1 do

if copy(t,i,2)=’aя’

then k:=k+1;

writeln (k);

end.

В тексте программы текст {*} замените на другой текст, например " Красный прекрасный ужасный’". Чему будет равно k в этом случае?

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

3. Составьте программу для определения:

а) имеется ли в данном слове часть, равная заданному слову (например, в слове "аэродром" есть часть "род" и нет "рой"). Здесь понадобится уже проверка: if copy(...)

4. Составьте программу для замены в данном тексте всюду:

а) части слова на часть слова (ЭВМ должна запросить обе части: старую и новую);

в) старое слово на новое слово. Слова отделяются друг от друга пробелами. Например, если Т=’МУХА МУХА ЦОКОТУХА МУХА ПО ПОЛЮ ПОШЛА МУХА ДЕНЕЖКУ НАШЛА’,s=’МУХА’,c=’РАНО’, то должно получиться: ‘РАНО РАНО ЦОКОТУХА РАНО ПО ПОЛЮ ПОШЛА РАНО ДЕНЕЖКУ НАШЛА’. Можно использовать оператор Pos(S1,S2) в цикле, удалять ненужное слово и вставлять нужное.

  1. Дано слово. Получить слово, обратное данному;

а) является ли данное слово палиндромом? (палиндромом называется слово, читаемое одинаково и справа-налево и слева-направо, например “шалаш”, “казак”– палиндромы).

ЗАДАЧИ II УРОВНЯ

  1. В тексте все повторяющиеся рядом стоящие символы удалить. Например, из слова "ББААББООЧЧККАА" получить слово "БАБОЧКА".

  2. В тексте каждую букву “б” заменять на “ку” (например, из слова «абракадабра» получится «акуракадакура»).

  3. Составьте алгоритм (программу), вычеркивающий из данного текста все гласные буквы.

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

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

САМОСТОЯТЕЛЬНАЯ РАБОТА

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

  2. Даны два слова. Составьте программу, позволяющую определить, можно ли из букв, входящих в первое слово, составить второе слово. Буквы можно переставлять, но нельзя использовать букву большее число раз, чем она встречается в первом слове. Например, из слова ИНФОРМАТИКА можно составить слово РАКИТА и нельзя составить слово УТРО.

  3. «Тарабарская грамота». Зашифровать текст следующим образом: гласные буквы остаются на местах, а согласные буквы заменить согласно алфавиту: букву «б» заменить на последнюю с конца, т. е. на «щ», «в» на предпоследнюю с конца – «ш» и т.д. Пробелы будете заменять?

  4. «Код Цезаря». В латинском тексте каждый символ замените следующим по порядку (букву“а” замените на“b” и т.д., а букву “z” замените на “а”).

КОНТРОЛЬНЫЕ ВОПРОСЫ:

  1. Как описываются строковые переменные?

  1. Какая максимальная длина строки допустима в ТР?

  2. Какие операции допустимы над строковыми данными ?

  3. Как определить длину слова?

  4. Какие стандартные функции и процедуры для работы со строками Вы знаете?

ЛАБОРАТОРНАЯ РАБОТА

ТЕМА: Программирование с использованием массивов.

ЦЕЛЬ: Познакомить учащихся с массивами, научить вводить и выводить, обрабатывать данные, занесенные в массив, т.е. усвоить правила работы с переменными типа массив языка программирования Паскаль.

ПО:TURBO PASCAL.

ТЕОРИЯ: Под массивом понимается упорядоченная последовательность конечного числа данных одного типа, объединенных под общим именем. Имена массивов образуются так же, как и имена простых переменных. Одномерные массивы, т.е. наборы однотипных данных, можно описать следующим образом:

var имя массива : array [размер] of тип ;

Например:

На Интале

На Паскале

Комментарии

а:Массив[6] Целый

a:array [1..6] of integer;

в массиве a – 6 элементов целого типа

b:Массив[10] Символьный

b: array[1..10] of char;

в массиве b – 10 элементов символьного типа

А) Вводить данные в массив можно следующим образом, например: CONST f:array[1..10] of integer=(1,2,3,4,0,6,8,10,-5,6); {в массив из 10 элементов вводятся числа, указываемые в скобках}

Б) Вводить, выводить данные в массив и из массива, обрабатывать данные удобно с помощью циклов, например: for i:=1 to n do read(f[i]); {один из способов ввода данных в одномерный массив).};

В) for i:=1 to n do write(f[i],’ ‘); {вывод данных из одномерного массива).}

Итак, а[i]– значение элемента в массиве А, i–порядковый номер элемента (запомните это).

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:

  1. Изучить описание лабораторной работы

  2. Войти в режим редактирования и набрать текст программы (см. пункт 1 задания).

  3. Запустить программу на трансляцию и выполнение (ctrl-<F9>).

  4. Эту же программу обязательно выполнить по шагам с использованием Турбо - отладчика (при выполнении очередного шага нажимать клавиши <F7> или <F8>). В окно Watch занести контролируемые данные и проследить за изменением их значений при выполнении программы. (Добавлять переменные в окно Watch можно, нажав последовательно:<F10>, выбрав пункты<Debugg> и <Add watch> и далее указав нужные вам переменные. Окна переключать можно с помощью клавиши <F6>.)

  5. Проверить работоспособность программы на других исходных данных.

  6. Составить программы для других пунктов задания

  7. Оформить отчет по лабораторной работе, защитить и сдать его преподавателю.

ЗАДАНИЯ I УРОВНЯ:

1 Дана программа нахождения суммы 6 элементов массива:

На Интале

На Паскале

Комментарии

Программа summa

Описание

A:Массив[6] Целый

i, s:Целый

Конец_Описания

s:=0;

a[1]:=5

a[2]:=-1

a[3]:=7

a[4]:=13

a[5]:=-8

a[6]:=21

Повторять

_Для i От 1 До 6

s:=s+A[i]

Завершить

Вывод(s)

Конец_Программы

const a = array [1..6] of

integer = (5,-1,7,13,-8,21)

var i ,s: integer;

begin

s:=0;

for i:= 1 do 6 do

s:= s+a[i];

writeln ( s )

end.

На Интале элементы последовательности вводятся присваиванием (можно с помощью цикла), на Паскале – можно вводить, используя раздел описания const.

В цикле меняется i–номер элемента массива, одновременно находим s –сумму элементов последовательности.

Полученное значение выводим на экран.

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

б) изменить программу так, чтобы она находила сумму N элементов массива (N не должно превышать количества элементов, заявленных в разделе CONST). N вводить с помощью оператора readln(N).

2 Найти сумму положительных элементов массива, добавив структуру :

Если а [i ] >0

то S:= S+а [i ] if а[ i ] > 0 then S:= S+а [i ]

Конец_Если

3. В массиве из N элементов найти количество нулевых элементов массива.

4 В массиве из N элементов найти количество нулевых элементов массива, сумму отрицательных и произведение положительных элементов массива.

5 Юноши выпускного класса решили заказать костюмы для выпускного бала. Они должны принести в ателье таблицу с указанием роста каждого. Для ателье эта работа будет выгодной, если эти данные лежат в пределах от 160 до 180см. Вывести сообщение, выгодна ли эта работа для ателье.

ЗАДАЧИ II УРОВНЯ

  • Крокодил Гена решил выиграть в лотерею автомобиль. Для этого он накупил N лотерейных билетов. Чебурашка попросил поделиться с ним, т.к. тоже хотел выиграть что-нибудь, а деньги, как всегда, забыл в телефонной будке. Гена отобрал себе те билеты, номера на которых являлись степенью сегодняшнего числа. Напечатайте номера лотерейных билетов, доставшихся Чебурашке.

  • На Киевскую Русь напали многоголовые Змеи-Горынычи. В Киеве в этот момент был только Илья Муромец. Его “производительность” –3 головы в час. Достаточно ли одного Ильи, чтобы за сутки очистить землю от нечисти или надо посылать гонцов за другими богатырями?

САМОСТОЯТЕЛЬНАЯ РАБОТА:

  • Составьте программу на языке Паскаль для выполнения следующих расчетов

Фамилия И.О.

Начислено

Удержано

К выдаче

. . .

. . .

. . .

. . .

Итого

б). Выполните расчеты по введенной программе со следующими данными:

Фамилия И. О. | Начислено | Удержано |

Вялков М. П. 135000 15200

Котов Е. И. 178000 23200

Борова А. И. 141200 18700

Сатяева М. Н. 165500 18900

Так как величины, указываемые в задании, превышают предельное значение величин типа INTEGER (32768), то необходимо использовать тип REAL либо LONGINT.

КОНТРОЛЬНЫЕ ВОПРОСЫ:

  1. Как описывается массив?

  2. Какова размерность массива с[1..23] of real?

  3. Как вводить данные в массив?

  4. Как выводить данные из массива?

  5. Почему удобно пользоваться циклами при работе с массивами?

  6. Ване поручили найти величину среднего роста учеников его группы. Некто решил помочь Ване. Он составил такой алгоритм:

Var a: array [1..10]; sr:real , i:integer;

begin sr:=0;

for i:=1 to 10 do

sr:= sr+а[i]/10;

writeln(sr);

end.

Он помог Ване? Составьте и Вы свою программу.