- •Задания II уровня
- •Задания I уровня
- •Задания II уровня
- •Задания I уровня
- •Задания II уровня
- •Задания I уровня
- •Задания II уровня
- •Задания I уровня
- •Задания II уровня
- •Лабораторная работа
- •Лабораторная работа
- •Задания
- •Лабораторная работа
- •Описание процедур начинается со строки:
- •Задания I уровень
- •Задания II уровень:
- •Задания
- •Лабораторная работа
- •Задания
- •II уровень
- •Задания I уровень
- •Задания II уровень
- •Петров л.Л 9 9 9 Барановичи
- •Лабораторная работа
- •Задания I уровень
- •II уровень
- •Самостоятельная работа
- •Литература
Задания I уровня
Составьте программы для решения следующих задач. По выбору преподавателя текст одной из программ введите в память компьютера, произведите отладку введенной программы и выполните ее.
Дана программа нахождения большего из двух чисел:
на алг.языке |
На Паскале |
Программма БИД Описание а,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
Конец_Если
Если с > мах
То мах: = с
Конец_Если
Вывод (мах)
Конец_Программы
Составить программу, позволяющую получить словесное наименование оценок 110 по следующему алгоритму (на Интале):
Программа оценка Описание х:Целый а: Строковый Конец_Описания Ввод (х, '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;
Конец_Если
Пройдет ли прямоугольная открытка со сторонами а см, b см в конверт со сторонами x см, y см?
Меньшее из двух чисел заменить их полусуммой, большее - их удвоенным произведением.
Даны координаты (как целые от 1 до 8) двух полей шахматной доски. Определить, может ли конь за один ход перейти с одного из этих полей на другое.
Найти корни квадратного уравнения Ах2+Вх+С=0.
САМОСТОЯТЕЛЬНАЯ РАБОТА:
Принадлежит ли точка с координатами (х,у) кольцу с радиусами R1 и R2?
В зависимости от стажа работы на предприятии введена надбавка в размере: для работающих от 5 до 10 лет–5%, для работающих от 10 до 15 лет–10%, для работающих от 15 до 20 лет–15%, для работающих свыше 20 лет–20%. Составьте программу, которая по заданному стажу работы определит размер надбавки в процентах.
КОНТРОЛЬНЫЕ ВОПРОСЫ И ЗАДАНИЯ:
Сколько вариантов различных действий есть у команды ветвления в полной форме? в неполной? а у команды выбора (CASE)?
Объясните ошибки в следующих записях: а) 1 and 0; б) x>0 or y=4.
Запишите на Паскале выражение, истинное при выполнении указанного условия и ложное в противном случае: а) x принадлежит отрезку [0,1]; б) каждое из чисел x, y, z положительно; в) только одно из чисел x, y, z положительное; г) хотя бы одно из чисел x, y, z положительно.
Нарисуйте на плоскости (x, y) область, в которой и только в которой истинно указанное выражение: а) abs(x)>=1; б) abs(y)>=1; в) abs(x)<=1; г)abs(y)<=1.
Могут ли в полной развилке не выполниться операторы ни по одной из ветвей? Выполниться по обеим ветвям?
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА: Программирование с использованием символьных переменных.
ЦЕЛЬ: Изучить правила объявления и использования строковых переменных на языке программирования Паскаль. Научить учащихся работать со строками как с набором символов.
ПО: 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).
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
Изучить необходимые сведения, указанные выше.
Войти в режим редактирования и набрать текст программы (см.(*))
Выполнить программу.
Эту же программу выполнить по шагам с использованием Турбо - отладчика (при выполнении очередного шага нажимать клавиши <F7> или <F8>).
В окно Watch занести контролируемые данные и проследить за изменением их значений при выполнении программы. (Добавлять переменные в окно Watch можно, нажав последовательно:<F10>, выбрав пункты<Debugg> и <Add watch> и далее указав нужные вам переменные. Окна переключать можно с помощью клавиши <F6>.)
Проверить работоспособность программы на других исходных данных.
Составить программы для других пунктов задания.
Оформить отчет по лабораторной работе, защитить и сдать его преподавателю.
ЗАДАНИЯ I УРОВНЯ:
Дана программа подсчета количества букв А в строковой переменной:
на Интале: |
На Паскале: |
Программа подсчет Описание 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 УРОВНЯ:
Дана строка текста. Найти:
количество слов, начинающихся с буквы «б»;
количество слов, у которых первая и последняя буквы одинаковые;
количество букв «а» в последнем слове;
количество слов, оканчивающихся буквой «й»;
количество слов, которые содержат хотя бы одну букву «d»;
количество слов, которые содержат ровно три буквы «е»;
сколько раз встречается в тексте буквосочетание «то»
длину самого короткого слова.
В тексте, заканчивающемся точкой, все строчные латинские буквы поменяйте на прописные.
В латинском тексте, заканчивающемся точкой и состоящем из строчных латинских букв, упорядочьте эти буквы по алфавиту.
Удалите из строки все находящиеся в ней пробелы.
САМОСТОЯТЕЛЬНАЯ РАБОТА
Вывести на экран последовательности символов:
А) 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 букв)
КОНТРОЛЬНЫЕ ВОПРОСЫ:
Каждому символу ставится в соответствие целое число из диапазона …?
Для чего нужны апострофы (одиночные кавычки)?
Какие операции допустимы над символьными данными?
Верно ли утверждение, что ord('0’)=0?
Каковы особенности кодировки цифр, латинских и русских букв?
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА: Программирование с использованием строковых переменных.
ЦЕЛЬ: Изучить правила объявления и использования строковых переменных на языке программирования Паскаль. Научиться пользоваться строковыми процедурами и функциями при составлении программ.
ПО: 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 задания можно сделать без составления программы
Для задания 2 войти в режим редактирования и набрать текст программы.
Выполнить программу (если по шагам, то при выполнении очередного шага нажимать клавиши <F7> или <F8>). В окно Watch занести контролируемые данные и проследить за изменением их значений при выполнении программы. (Добавлять переменные в окно Watch можно, нажав последовательно <F10>, выбрать пункты <Debugg> и <Add watch>(или, что же, нажать Ctrl+F7) и далее указать нужные Вам переменные. Окна переключать можно с помощью клавиши <F6>.)
Проверить работоспособность программы на других исходных данных.
Составить программы для других пунктов задания и выполнить их аналогично
Оформить отчет по лабораторной работе, защитить и сдать его преподавателю.
ЗАДАНИЯ 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) в цикле, удалять ненужное слово и вставлять нужное.
Дано слово. Получить слово, обратное данному;
а) является ли данное слово палиндромом? (палиндромом называется слово, читаемое одинаково и справа-налево и слева-направо, например “шалаш”, “казак”– палиндромы).
ЗАДАЧИ II УРОВНЯ
В тексте все повторяющиеся рядом стоящие символы удалить. Например, из слова "ББААББООЧЧККАА" получить слово "БАБОЧКА".
В тексте каждую букву “б” заменять на “ку” (например, из слова «абракадабра» получится «акуракадакура»).
Составьте алгоритм (программу), вычеркивающий из данного текста все гласные буквы.
Составьте алгоритм (программу), удваивающий каждую букву в тексте (например, при такой замене из слова «баба» должно получиться «ббааббаа»).
Составьте алгоритм (программу), вычеркивающий из данного слова все буквы «о» (например, из слова «молоко» получится «млк»).
САМОСТОЯТЕЛЬНАЯ РАБОТА
В тексте слова разделяются пробелами, запятыми, точками. Подсчитать количество слов в предложении (пробелов между словами может быть и несколько).
Даны два слова. Составьте программу, позволяющую определить, можно ли из букв, входящих в первое слово, составить второе слово. Буквы можно переставлять, но нельзя использовать букву большее число раз, чем она встречается в первом слове. Например, из слова ИНФОРМАТИКА можно составить слово РАКИТА и нельзя составить слово УТРО.
«Тарабарская грамота». Зашифровать текст следующим образом: гласные буквы остаются на местах, а согласные буквы заменить согласно алфавиту: букву «б» заменить на последнюю с конца, т. е. на «щ», «в» на предпоследнюю с конца – «ш» и т.д. Пробелы будете заменять?
«Код Цезаря». В латинском тексте каждый символ замените следующим по порядку (букву“а” замените на“b” и т.д., а букву “z” замените на “а”).
КОНТРОЛЬНЫЕ ВОПРОСЫ:
Как описываются строковые переменные?
Какая максимальная длина строки допустима в ТР?
Какие операции допустимы над строковыми данными ?
Как определить длину слова?
Какие стандартные функции и процедуры для работы со строками Вы знаете?
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА: Программирование с использованием массивов.
ЦЕЛЬ: Познакомить учащихся с массивами, научить вводить и выводить, обрабатывать данные, занесенные в массив, т.е. усвоить правила работы с переменными типа массив языка программирования Паскаль.
ПО: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 задания).
Запустить программу на трансляцию и выполнение (ctrl-<F9>).
Эту же программу обязательно выполнить по шагам с использованием Турбо - отладчика (при выполнении очередного шага нажимать клавиши <F7> или <F8>). В окно Watch занести контролируемые данные и проследить за изменением их значений при выполнении программы. (Добавлять переменные в окно Watch можно, нажав последовательно:<F10>, выбрав пункты<Debugg> и <Add watch> и далее указав нужные вам переменные. Окна переключать можно с помощью клавиши <F6>.)
Проверить работоспособность программы на других исходных данных.
Составить программы для других пунктов задания
Оформить отчет по лабораторной работе, защитить и сдать его преподавателю.
ЗАДАНИЯ 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..23] of real?
Как вводить данные в массив?
Как выводить данные из массива?
Почему удобно пользоваться циклами при работе с массивами?
Ване поручили найти величину среднего роста учеников его группы. Некто решил помочь Ване. Он составил такой алгоритм:
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.
Он помог Ване? Составьте и Вы свою программу.
