Размещено: Ирина Леонидовна Горбатовская - пн, 01/11/2010 - 07:58
Муниципальное общеобразовательное учреждение «Гимназия №1»
Практическое руководство по языкуПаскаль
Составитель: Горбатовская И.Л.
Сосновоборск – 2006
Содержание
Стр.
Введение
4
§ 1 Алфавит языка Паскаль. Организация данных. Структура программы. Оператор присваивания.
7
§ 2 Работа в системе Турбо Паскаль.
10
§ 3Операции над числовыми переменными. Логические операции.
12
§ 4 Ввод-вывод в Паскале. Процедуры модуляCRT.
14
§ 5 Условный оператор.
17
§ 6 Оператор выбора.
21
§ 7 Оператор безусловного перехода. Метки.
22
§ 8 Организация циклов.
23
§ 9 Массивы.
29
п. 9.1. Одномерные массивы.
29
п. 9.2. Двумерные массивы (матрицы).
34
§ 10 Строковые переменные.
41
§ 11 Подпрограммы.
44
Введение.
Основные понятия темы «Алгоритмы».
Алгоритм– это последовательность действий, которые должен выполнить исполнитель для достижения конкретной цели.
Слово «алгоритм» происходит отalgorithmi– латинской формы написания имени великого математикаIXвека аль-Хорезми, который сформулировал правила выполнения четырёх арифметических действий. Первоначально под алгоритмами понимали только правила выполнения арифметических действий. В дальнейшем это понятие стали использовать для обозначения любой последовательности действий, приводящих к решению поставленной задачи.
Алгоритм содержит несколько шагов.
Шаг– отдельное законченное действие.
Исполнитель– это объект, умеющий выполнять определённый набор действий. Исполнителем может быть человек, животное, робот, компьютер.
Система команд исполнителя (СКИ)– это все команды, которые исполнитель умеет выполнять.
Среда исполнителя:обстановка, в которой функционирует исполнитель.
Выполняя алгоритм, исполнитель может не вникать в смысл того, что он делает, и тем не менее получать нужный результат. В таком случае говорят, что исполнитель действует формально, т.е. отвлекается от содержания поставленной задачи и только строго следует некоторым правилам, инструкции.
Построение алгоритма для решения задачи из какой-либо области требует от человека глубоких знаний в этой области. На поиски алгоритма решения некоторых задач учёные затрачивают годы. Но решение задачи по уже созданному готовому алгоритму не требует каких-либо рассуждений и сводится только к строгому выполнению команд алгоритма.
В этом случае исполнение алгоритма можно поручить не человеку, а машине. Действительно, простейшие операции, на которые при создании алгоритма расчленяется процесс решения задачи, способна реализовать и машина. Это положение лежит в основе работы автоматических устройств, автоматизация деятельности человека.
Свойства алгоритма:
·Дискретность(прерывность, раздельность) – разбиение алгоритма на шаги;
·Понятность– каждый шаг алгоритма должен быть понятен исполнителю;
·Точность– указание последовательности шагов;
·Массовость– использование алгоритма для решения однотипных задач.
Способы описания алгоритма:
·Словесный(письменно или устно);
·Графический(стрелками, рисунками, блок-схемами);
·Программный.
В 60-70-х годах ХХ века активно развивалась методика, которая получила название «структурное программирование». Первый принцип структурного программирования заключается в том, что при построении алгоритма используются три базовые алгоритмические структуры: следования (линейный), ветвление, цикл.
Алгоритм называется линейным, если он содержитNшагов, и все шаги выполняются последовательно друг за другом от начала до конца.
Алгоритм называется разветвляющимся, если порядок выполнения шагов изменяется в зависимости от некоторых условий.
Алгоритм называется циклическим, если определённая последовательность шагов повторяется несколько раз в зависимости от заданной величины (параметра цикла).
Тело цикла– это шаги алгоритма, которые выполняются несколько раз.
Параметр цикла– величина, от которой зависит число повторений в цикле.
Вторым фундаментальным принципом структурного подходаявляется метод последовательной детализации. Последовательная детализация – это построение алгоритма «сверху-вниз». Сначала строится основной алгоритм и в нём записываются обращения к вспомогательным алгоритмам первого уровня, которые могут содержать обращения к вспомогательным алгоритмам второго уровня, и т.д.
·Запись алгоритма на выбранном языке программирования.
5) Тестирование и отладка программы.
6) Анализ результатов решения задачи.
7) Сопровождение программы:
·Составление пояснительной записки к программе.
Вопросы для самоконтроля.
1.Какую последовательность предписаний можно назвать алгоритмом?
2.Что называется системой команд исполнителя? Поясните на примере.
3.Какие свойства алгоритмов позволяют человеку автоматизировать их выполнение?
4.В чём состоят основные принципы структурного программирования?
§1Алфавит языка Паскаль. Организация данных. Структура программы. Оператор присваивания.
Одним из наиболее популярных сегодня языков программирования является язык Паскаль, стандарт которого был принят в 1973 году. Этот язык был разработан швейцарским профессором Никлаусом Виртом и был назван в честь французского учёного, изобретателя механический вычислительной машины – Блеза Паскаля.
Как каждый язык, Паскаль имеет свой алфавит. В него входят: латинские буквы, цифры от 0 до 9, специальные знаки (+, -, /, *, =, <, >, <= (меньше либо равно), >=(больше либо равно), <>(не равно), [, ], ;, : и т.д), а так же служебные слова (из английского языкаbegin,end,for,whileи др.).
Программа, написанная на языке Паскаль, предназначена для обработки данных. В зависимости от способа хранения и обработки в ЭВМ данные можно разбить на две группы: константы и переменные.
Константы– это те данные, значения которых не изменяются в процессе работы программы.
Переменные– это те данные, значения которых могут изменяться в процессе работы программы.
Все данные программы должны иметь индивидуальную идентификацию (имя). Приведём наиболее важные ограничения, имеющие место при выборе имён.
1)В качестве имени нельзя использовать служебные слова.
2)Имя состоит из латинских букв, цифр и знаков подчёркивания.
3)Имя должно начинаться с буквы.
4)Имя может быть любой длины, но значимыми являются только первые 8 символов.
5)Символ подчёркивания не воспринимается ЭВМ. Например, именаTime_OFиTIMEOF– идентичны.
Каждое имя соответствует некоторой ячейке памяти, куда записывается значение переменной величины. Ячейка – понятие условное, это последовательность разного количества байтов памяти, которое определяется типом данных.
Тип переменной определяетне только величину ячейки, но и множество значений этой переменной, а также набор операций, которые к ней могут быть применены.
Типы величин.
простые
сложные
целые
Byte (0..255)
Word (0..65535)
Shorting (-128..127)
Integer(-32748..32748)
Lonint (-2147483647..2147483647)
Массивы(array)
Перечисляемый
Ограниченный
Строковый(string)
Множества(set)
Записи(record)
Файлы(file)
вещественные
Real±(от 2.9*10-39 до 1.7*1038 ,»до11 знака )
double±(от 5*10-324 до 1.7*10308 ,»до15 знака )
символьные
Char(значением может быть только 1 символ)
логические
Boolean(принимает одно из двух значений: trueилиfalse)
Программа на Паскале состоит из двух частей: описания используемых данных и программного блока.
Общий вид программы:
Могут отсутствовать
Program(имя программы);
Имена стандартных модулей;
Label(список меток);
Const(список констант);
Type(описание сложных типов данных);
Var(описание типов переменных);
{функции и процедуры}
Begin(начало программы)
Содержит операторы, описывающие алгоритм решения задачи.
(тело программы)
End. (конец программы)
Правила записи программы на языке Паскаль.
·Имя программы не должно содержать более 8 символов и соответствовать правилам записи имён переменных.
·Программа начинается со словаprogram и заканчивается словомendс точкой.
·Операторы, разделы и описания разделов заканчиваются точкой с запятой.
·В разделе описания типов переменных имена переменных одного типа перечисляются через запятую, затем после двоеточия указывается их тип. Описание каждого типа заканчивается точкой с запятой.
Программный блок содержит операторы, описывающие алгоритм решения задачи. Оператор – указание, которое определяет характер и последовательность выполнения действий по обработке данных. Основное преобразование данных, выполняемое компьютером, - присваивание переменной нового значения.
Общий вид оператора присваивания:
Имя переменной:= арифметическое выражение.
Знак «:=» читается «присвоить». При выполнении оператора присваивания рассматривается арифметическое выражение, из ячеек оперативной памяти, соответствующих стоящим там именам, вносятся в процессор значения и выполняются указанные действия над данными. Полученный результат записывается в ячейку памяти, имя которой указано слева. Если значение переменной не определено, то ему присваивается значение 0.
Например,
х:=3.14; (переменной х присваивается значение 3.14)
а:=b+c; (из ячеекbиcсчитываются заранее помёщённые уда данные, вычисляется сумма, результат записывается в ячейку а)
i:=i+1; (значение переменной увеличивается на единицу)
Для типов переменной слева и арифметического выражения справа от знака присваивания существуют ограничения:
1)если переменная слева вещественного типа, то арифметическое выражение может быть как целого, так и вещественного типа;
2)если переменная слева целого типа, то арифметическое выражение только целочисленное.
Задания.
1.Определите, почему не работают программы с приведёнными ниже заголовками:
a)programma Juk; b) program Begin; programШкола.
2. Определите, какие из приведённых ниже имён и почему нельзя использовать в качестве имён переменных:
a) seleznew_Petr_11b; b) F7_1f2; c) Dog-Cat; d) Petr Ivanov 10d; e) Alfa;
f) WR12.23 g) 10b_Petrov; h) Alfa/Beta.
3. Выполните операторы присваивания и определите значения всех переменных.
а) Var k, x, a, y, b: real;
x:= 3.75;
k:=2*x+0.3;
a:=3*x+0.05;
y:=k+1.7;
b:=2*a+x;
в) Var k, t, q, y,l: real;
k:=105.6;
t:=4.6;
q:=-7.3+t;
y:=q+2*t-l*k;
l:=2*q;
4. Запишите в виде операторов присваивания следующие действия:
а) переменнойtприсвоить среднее арифметическое значение переменныхu,v,w;
b) значение переменнойaуменьшить на 5.1;
c) в качестве нового значения переменнойzпринять её текущее значение возведённое в куб;
d) переменной с присвоить сумму квадратов переменныхaиb.
5. Заданы значения переменных а=12;b=5. Каковы будут значения этих переменных после выполнения следующих фрагментов программы:
a) a:=b; b:=a; c:=a+b;
b) f:=a; a:=b; b:=f; c:=a+b;
§ 2 Работа в системе Турбо Паскаль.
Интегрированная среда Турбо Паскаль включает в себя средства подготовки исходной программы, библиотеки, компилятор, компановщик, отладчик.
Средства подготовки исходной программы - это текстовый редактор для набора и редактирования текста программы.
Библиотеки– специальные программы, содержащие стандартные модули (готовые программы), которые можно вставить в программу, вызывая по имени (графический модуль, модульCRT).
Компилятор(compiler) – программа, для перевода исходного текста в машинные коды.
Компановщик(liker) – программа, предназначенная для добавления к программе кодов из библиотечных модулей и соединения программы в единое целое.
Отладчик(debugger) – программное средство, позволяющее проверить программу и устранить выявленные ошибки.
Все компоненты интегрированной среды тесно взаимосвязаны и не могут работать отдельно друг от друга.
Загрузка системы осуществляется запуском файлаturbo.exe. После загрузки системы на экране появляется рабочий стол системы. В верхней части экрана расположено главное меню, в нижней – назначение горячих клавиш.
File Edit Search Run Compile Debug Tools Options Window Help
F1 Help F2 Save F3 Open Alt+F9 Compile F9 Make Alt+F10 Local menu
ПунктFile– содержит в себе опускающееся меню работы с файлами. ПунктCompile– содержит в себе опускающееся меню компиляции файлов.
Compile Alt+F9
Make F9
Build
Target... Real
Primary file...
Clear primary file
Information...
Создать новый файл
New
Open... F3
Save F2
Save as...
Save all
Change dir...
Print
Printer setup...
DOS shell
Exit Alt+X
Открыть файл
Сохранить файл
Компилировать файл
Выход из программы
ПунктRun– содержит в себе опускающееся меню запуска программ на исполнение.
Выполнить программу
Run Ctrl+F9
Step over F8
Trace into F7
Go to cursor F4
Program reset Ctrl+F2
Parameters...
Для просмотра результатов работы используйте клавишиAlt+F5.
§3Операции над числовыми переменными. Логические операции.
Для работы с числами используют шесть операций:
1.«+» сложение
2.«-» вычитание
3.«*» умножение
4.«/» деление
5.modостаток от деления
6.divцелая часть от деления
Находить остаток от деления и делить нацело можно только целые числа.Например, 5mod2 = 1, 5div2 = 2.
Если один из операндов имеет вещественный тип, то результат операции будет вещественным. Выражения в Паскале записываются в строку. Выполнения операций производится согласно приоритету: выражения в скобках, умножение, деление,mod,div, сложение, вычитание.
Стандартные математические функции.
Функции
Тип аргумента
Тип значения функции
Действие функции
Abs(x)
Integer, real
Как у х
Модуль х
Exp(x)
Real
Real
ех
Cos(x)
Real
Real
Cos x, x- в радианах
Sin (x)
Real
Real
Sinx,x- в радианах
Arctan(x)
Real
Real
Arctg x
Ln(x)
Real
Real
Натуральный логарифм х
Sqr(x)
Integer, real
Как у х
х2
Sqrt(x)
Real
Real
Öх, х³0
Random(x)
Integer
Real
Если х не указано, то случайное число от 0 до 1. Если х – указан, то число от 0 до х.
Pi
Real
Числоp. Точность зависит от процессора.
Int(x)
Real
Real
Целая часть х
Trak(x)
Real
Real
Дробная часть х
Trund(x)
Real
Integer
Целая часть х
Round(x)
Real
Integer
Значение х, округлённое до следующего целого числа
Odd(x)
Integer
boolean
Значение функцииtrue, если х – нечётное, иfalse– если х – чётное.
Для записи условий используют логические выражения, которые записываются при помощи логических операций.
Приоритет
Операция
Значение
0
Not
Отрицание
1
And
Логическое умножение (конъюнкция И)
2
Or
Логическое сложение (дизъюнкция ИЛИ)
3
=
Равно
<>
Не равно
<
Меньше
<=
Не больше
>
Больше
>=
Не меньше
Таблица истинности логических операций
a
b
not (a)
a and b
a or b
true
true
false
true
true
false
true
true
false
true
true
false
false
false
true
false
false
true
false
false
Задания.
1.Определите результаты операций:
a) x:=3 mod 5; b) x:=7 div 3 +7 mod 3; c) x:= 27 div 3 div 3; d) x:= 27 mod 5 + 3.
2. Определите значение логической переменнойu(w:=true;v:=true;h:=false):
a) u:= v and h or w;
b) u:= v and h or w = h;
c) u:= v and h or (w = h);
d) u:=v and (h or w) = h;
e) u:= not h or w;
f) u:= not (h or w);
g) u:= not h and w;
h) u:= not (h and w);
i) u:= not h and not w;
q) u:= not h or not w.
3. Определите результат вычислений:
a) y:= sqr(sin(0.5))+sqr(cos(0.5));
b) y:= sqrt(sqr(3)+sqr(4));
c) y:= int(3.7)+round(3.7);
d) y:=abs(cos(Pi)-sin(Pi/2)).
4. Вставьте в выражения скобки, если они необходимы, и удалите лишние:
a) (sqr(x)*2)/5+sin Pi;
b) ((x+2)*x/(x+5);
c) ((x*2)+x)/(x*5);
d) (sin(x))+(sqr(sin(x)));
e) (abs(2*(x/5)))+1.
5. Запишите по правилам языка Паскаль следующие выражения:
a); b) tgx; c) 3x2+2x2+1; d) x5; e) (1-x2+5sinx)2.
6. Напишите наиболее короткие вычисления:y=x8;y=x10;y=x15;y=x19.
7. Каким формулам соответствуют соответствующие арифметические выражения:
a) (a+b)/(x+y); b) 2.3*z*sqrt(x+y); c) (sqr(a)+sqr(b))/a+b)*3*a/sqr(x).
8. Вычислите значения выражений:
a) (5+7*2)*7;
b) 3-8+21 div 3;
c) (2+3) mod 7 -2;
d) 5-2/10;
e) (5+2)/10;
f) 7/7mod2.
9. Запишите операторы присваивания, определяющие значения переменной Х по следующим правилам:
a) Х=a+;
b)X=;
10. Найдите ошибки в каждом из следующих операторов присваивания:
a) X=I+4;
b) X:=2,76*A;
c) X:=A/-D;
d) P:=2.5 MOD 2;
e) 3*X:=L;
f) 1:=7 mod 2.
§4 Ввод-вывод в Паскале. Процедуры модуляCRT. Для сообщения данных компьютеру служат операторы ввода и вывода. Оператор ввода помещает вводимое значение переменной в отведённую для неё ячейку. Операторы ввода:
Read(список имён);
Readln(список имён);
Операторread(читать)останавливает работу программы и ждёт пока пользователь наберёт на клавиатуре значение переменной и нажмёт <Enter>. Если список ввода содержит несколько имён, то для каждого надо ввести своё значение. Значения вводятся через пробел, или через запятую, или пи нажатии клавиши <Enter>. После работы этого оператора курсор располагается за последним числом, но не переводится на новую строку. Для перевода курсора на новую строку используется операторreadln.
Для вывода результатов работы программы на экран дисплея служат операторы вывода:
Write(список вывода);
Writeln(список вывода);
Операторwrite(писать) выводит данные на экран дисплея. Список вывода – перечисленные через запятую имена переменных, арифметические выражения. Также в список вывода, для пояснения, входят заключённый в апострофы тексты. Перевод курсора на новую строку осуществляется оператором пустого ввода
writeln;
Если надо перевести курсор после печати, то применяетсяwriteln.
Для вывода вещественных переменных указывают параметры выводимого формата. Первое число указывает количество символов в числе, второе – количество знаков после запятой.
Например,writeln(‘пи=’,PI:2:1);
На экран будет выведено сообщение: пи=3.1
В составе Турбо Паскаля есть специальный модуль с именемCRT, в котором располагаются процедуры и функции для управлением выдачей текста на экран, изменением цвета, анализа нажатия клавиш.
В текстовом режиме экран дисплея можно рассматривать как множество позиций. В каждой позиции может быть изображён один символ. Большинство дисплеев имеют по 80 позиций в строке (столбцы) и 25 строк на экране. Строки нумеруются сверху вниз, начиная с 1, столбцы – слева направо, тоже начиная с 1.
Весь экран целиком и любая его прямоугольная область могут представлять собой текстовое окно. Это значит, что для такой прямоугольной области можно задать её собственный цвет (он называется цветом фона) и цвет символов, изображаемых в окне.
Для работы с окнами используются следующие процедуры и функции:
Процедуры и функции модуляCRT.
Процедуры:
1.
Window (X1,Y1,X2,Y2)
Определяет положение текстового окна на экране.
2.
Clrscr
(clear screen) очистка экрана.
3.
Gotoxy(m,n)
Установка курсора в позицию m строки n.
4.
Textbackground (c)
Установка цвета фона (0 £ c £ 15).
5.
Textcolor ( c )
Установка цвета шрифта (0 £ c £ 15).
6.
Delay (n)
Приостановка выполнения программы на n миллисекунд.
7.
Sound (n)
Запуск звукогенератора с частотой тока n Гц.
8.
Nosound
Отключение звукового сигнала.
Функции:
1.
Keypressed
Функция может принимать 2 значения: true или false. Значение true. Если на клавиатуре ещё не нажата какая-либо клавиша, и false – в противном случае.
2.
Readkey
Ввод символа с клавиатуры без отображения его на экране.
(1,1)
Окно совпадает с экраном
(Х1, У1)
Текстовое окно
(Х2, У2)
(80,25)
Например,рассмотрим оформление программы вычисляющей сумму двух обыкновенных дробей .
- подключение модуляCRT
- определение цвета фона (бирюзовый)
- определение цвета текста (чёрный)
- очистка экрана
- курсор устанавливается в позицию (5,5), где ожидается ввод значения числителя первой дроби
- ожидание нажатия любой клавиши для выхода из программы
programsum_drob;
uses crt;
var a,b,c,d,e,f:integer;
begin
textbackground (3);
textcolor (0);
clrscr;
gotoxy (5,5); read(a);
gotoxy (5,6); write ('--');
gotoxy (5,7); read(b);
gotoxy (8,6); write ('+');
gotoxy (9,5); read(c);
gotoxy (9,6); write ('--');
gotoxy (9,7); read(d);
f:=b*d;
e:=a*d+b*c;
gotoxy (11,6); write ('=');
gotoxy (12,5); write(e);
gotoxy (12,6); write ('--');
gotoxy (12,7); write(f);
Readkey;
End.
Задания.
1) Напишите программу вычисления среднего арифметического двух чисел.
2) Напишите программу вычисления расстояния между двумя точками плоскости.
3) Напишите программу вычисления площади треугольника по формуле Герона.
4) Напишите программу вычисления площади и гипотенузы прямоугольного треугольника, если известны его катеты.
5) Напишите программу определения времени встречи двух автомобилей, если известно расстояние между двумя пунктами, откуда они вышли навстречу друг другу одновременно, а также их скорости.
6) Найдите сумму цифр заданного трёхзначного числа.
7) Зал кинотеатра вмещаетnрядов кресел поmмест в ряду. Стоимость билетов с 1 по [n/3] рядxрублей, с [n/3]+1 по [2n/3] ряд –yрублей, с [2n/3] +1 поnрядzрублей. Составьте программу вычисления общей стоимости билетов, если зал заполнен полностью. [] – целая часть.
§5 Условный оператор.
В практике хорошо известны задачи, дальнейший ход решения которых зависит от выполнения какого-либо условия. Команды, с помощью которых записываются алгоритмы подобного типа (разветвляющиеся), называются командами ветвления. Команде ветвления в Паскале соответствует условный оператор.
В неполной форме действие выполняется тогда и только тогда, когда выполняется записанное условие. В случае невыполнения условия происходит переход к следующему оператору.
В полной форме в случае выполнения условия выполняется одно действие, а в случае невыполнения – другое.
Каждая структура имеет один вход и один выход. Для записи оператора ветвления используют английские слова:IF– если,THEN– то,ELSE– иначе.
Еслипосле словTHENиELSEнадо выполнить не один оператор, а несколько, то их записывают между служебными словамиBEGINиEND.
Перед словомELSEточка с запятой не ставится.
Каждую паруBEGIN–ENDрекомендуется записывать в одном столбце: так легче проверить соответствие.
Например,
Ifa<b then y:=x;
If a+b<c thenbegin
z:=x; x:=y; y:=z;
end
elsebegin
z:=x; x:=sqr(y); y:=sqr(x);
end;
В качестве выполняемого в условном операторе действия может быть другой условный оператор.
Например,
Ifa<0 then write (‘отрицательное’)
elseif a=0 then write (‘ноль’)
elsewrite(‘положительное’);
Задания.
1.Определите результат приm=2,n=-4.
a) if m>n thenif n>0
then write(m)
else write (n)
else write (m+n);
b) if (m<n) or (n<0) then write(m)
else write (n);
c) if (m<n) thenif (n>0) or (m>0) then write (m) else write (n);
d) ifnot ((m>0) and (n<0)) then write (m) else write (n);
Напишите программы на Паскале для решения следующих задач.
2. Даны три числа а,b, с. Выясните, верно лиa<b<c. Ответ получите в текстовой форме: верно или неверно.
3. Даны положительные числаa,b,c,x. Выясните, пройдёт ли кирпич с рёбрами а,b,cв квадратное отверстие со сторонойx.
4. Выясните принадлежат ли числаaиbпромежутку (-1;1).
5. Даны числаxиy. Вычислите числоz, равное х+у, если х≤у, и 1-х+у в противном случае.
6. Присвойтеzзначение большего из чисел х и у в том случае, еслиx<0, и меньшего если х≥0.
7. Присвойте величине а значение наибольшего из трёх заданных чисел.
8. Даны два числа. Выведите первое из них, если оно больше второго, и оба числа, если это не так.
9. Проверьте, есть ли среди трёх заданных чисел равные.
10. Даны два действительных числа. Меньшее из них замените полусуммой этих чисел, а большее – их произведением.
11. Вычислите наименьшее из трёх заданных чисел.
12. Найдите решение уравнения ах+b=0, если оно существует.
13. Если данное число х меньше нуля, тоzприсвойте значение большего из двух чисел х и у, иначеzприсвойте значение полусуммы этих чисел.
14. Даны три числа. Найдите разность большего и меньшего из них.
15. Возведите данное число х в куб, если оно чётное и в квадрат в противном случае.
16. Даны три стороны треугольникаa,b,c. Определите, является ли данный треугольник прямоугольным.
17. Найдите решение уравнения ах2+bх+с=0, если оно существует.
18. Определите, является ли билет с шестизначным номером счастливым.
19. Вычислите модуль вещественного числа.
20. Даны две точки в плоской прямоугольной системе координат. Определите, которая из точек находится ближе к началу координат.
21. Определите, в какой координатной четверти лежит точка с координатами(х, у).
22. Написать программу, классифицирующую треугольники (остроугольные, прямоугольные, тупоугольные), если даны углы. Предусмотреть случай, когда треугольника с такими углами не существует.
23. Написать программу, классифицирующую треугольники (равносторонние, равнобедренные, разносторонние), если даны углы. Предусмотреть случай, когда треугольника с такими углами не существует.
24. Ввести х и у и вычислитьS.
, если х≠0 и у≠0
S= , если х≠0 и у=0
, если х=0 и у≠0
0, если х=у=0
25. Дано четырёхзначное число. Определить, является ли оно полиндромом (например, 4444, 1221, 3003).
26. Определите результат операции при следующих значениях х=2, 7, 12, 17.
a) if x<10 then x:=10 else if x<15 else x:=20;
b) if x<10 then if x<5 then x:=5 else x:=10;
c) if x<10 then if x<5 then x:=5 else x:=15 else x:=10;
27. Определите результат приm=2,n=-4:
a) if m>n then if n>0 then write(m) else write(n) else write (m+n);
b) if (m<n) or (n<0) then write(m) else write(n);
c) if (m>n) then if (n>0) or (m>0) then write(m) else write(n);
d) if not((m>0) and (n<0)) then write(m) else write(n).
28. Напишите фрагмент программы в виде условного оператора, в котором значение переменнойzвычисляется по формулеz=ln(x), еслиx>0, и по формулеz=x2, еслиx<0.
29. Вводятся три числа. Найдите среди них такое, которое меньше наибольшего из них, но больше наименьшего.
30. Напишите программу, в результате выполнения которой первое введённое число уменьшается в три раза, если оно больше, чем третье, а третье становится разностью третьего и второго, если оно больше второго.
31. Вычислить значения функции, заданной следующим образом:
ax2+b,x<0
y=
ax-b,x≥0
32. Определите результат приm=4,n=-3:
a) if m>n then if n>0 then write(sqr(m)) else write(sqr(n)) else write(m+n);
b) if (m<n) or (n<0) then write(sqrt(m)) else write(sqr(n));
c) if m>n then if (n>0) or not(m>0) then write(m) else write(n);
d) if not((m>0) and (n<0)) then write(m) else write(n);
e) if not(m>0) and (n<0) then write(m) else write(n).
§6 Оператор выбора.
Условный оператор позволяет осуществить ветвление программы только по двум направлениям, одно из которых соответствует выполнению проверяемого условия, а другое – невыполнению этого же условия. Если для переменной необходимо осуществить ряд действий, зависящих от других условий, то надо записывать либо несколько таких операторов подряд, либо вложенные условия. Для такой ситуации удобно использовать оператор выбора.
Ключ
CASE
Эти команды выполняются
если ключ равен знач1
Эти команды выполняются
если ключ равен значi
Эти команды выполняются
если ключ равен значn
Эти команды выполняются
если ключ не равен ни одному из предложенных значений (может отсутствовать)
ELSE
Знач1 … Значi … Значn …
CASEключOF
Знач1: оператор1;
…………..
ЗначI: операторI;
…………..
ЗначN: операторN;
ELSEоператорN+1;
END;
В качестве ключа может быть имя переменной любого порядкового типа, кроме вещественного и строкового, или выражение (арифметическое с целым значением или логическое). Тип параметра знач должен совпадать с типом ключа, при этом параметр знач – константа. Можно задавать список или диапазон констант. Если для определённых значений нужно выполнить несколько операторов, то они также как и в операторе ветвления записываются между служебными словамиBEGINиEND.
Например, рассмотрим фрагмент программы, определяющей последнюю цифру квадрата числа х.
CASEx mod 10OF
0: write (‘0’);
1, 9: write (‘1’);
2, 8: write (‘4’);
3, 7: write (‘9’);
4, 6: write (‘6’);
5: write (‘5’);
END;
Задания.
1. Написать программу, которая по введённому однозначному числу печатает его название (1 – один, 2 – два и т.п.). Если число неоднозначное, то программа должна выдать сообщение об ошибке.
2. Написать программу, которая по введённому номеру печатает название дня недели. Если дня недели с таким номером не существует, то программа должна выдать сообщение об ошибке.
3. Написать программу, позволяющую получить словесное наименование школьных оценок.
4. Написать программу решения уравнения х*х=а для произвольного числа а (1≤a≤81).
5. Написать программу, нахождения числа дней в месяце, если даны: номер месяцаn– целое число от 1 до 12; целое число а, равное 1 для високосного года и равное 0 в противном случае.
6. Написать программу, которая по введённому номеру координатной четверти печатает информацию о знаках координат точек в этой четверти.
7. Написать программу, которая по введённому номеру класса печатает, сколько лет может быть ученикам этой параллели.
§7 Оператор безусловного перехода. Метки.
Для изменения хода программы без каких-либо условий или досрочного прекращения выполнения какой-либо части программы или программы в целом существует специальный оператор безусловного перехода. Общий вид:
goto n;
n– целое число, не более чем из четырёх цифр, называемое меткой.
Метка появляется в программе три раза:
1)в описательной части в разделеLabel;
2)в оператореgoto;
3)перед оператором, на который осуществляется безусловный переход, в этом случае метка от оператора отделяется двоеточием.
Оператор безусловного перехода рекомендуется применять лишь в тех случаях, когда без него не обойтись.
Например, пусть требуется вычислить наибольший общий делитель двух натуральных чисел А и В. Воспользуемся алгоритмом Евклида: будем уменьшать каждый раз большее из чисел на величину меньшего до тех пор, пока оба числа не станут равны.
Program NOD_go;
Label 1,2;
Var a,b: integer;
Begin
Write(‘введите два натуральных числа’);
Readln (a,b);
1: if a=b then goto 2;
if a>b then a:=a-b else b:=b-a;
goto 1;
2: write (‘НОД=’, a);
Readln;
End.
Задания.
1. Пользователь с клавиатуры вводит числа. Последним вводится 0. Подсчитайте сумму всех введённых отрицательных чисел.
2. Пользователь с клавиатуры вводит числа. Последним вводится 0. Подсчитайте произведение всех введённых положительных чисел.
3. Пользователь с клавиатуры вводит числа. Последним вводится 0. Найдите максимальное число.
§8 Организация циклов.
В языке Паскаль реализованы команды повторения в виде операторов цикла. В отличие от некоторых других языков программирования (например, Бейсик) в Паскале реализованы все три типа операторов.
BEGIN
Условие
ТЕЛО
ЦИКЛА
WHILE
выполняется
не выполняется
END
ЦИКЛ С ПРЕДУСЛОВИЕМ.
WHILEусловиеDO
BEGIN
Тело цикла
END;
Если в цикле нужно выполнить
лишь один оператор, то
служебные словаBEGIN
иENDне пишутся.
Цикл может не выполнится ни разу, если условие изначально не выполняется. Цикл выполняется до тех пор, пока выполняется условие.
Рассмотрим уже известный нам алгоритм Евклида:
Program NOD_while;
Var a,b: integer;
Begin
Write(‘введите два натуральных числа’);
Readln (a,b);
While a<>b do
If a>b then a:=a-b
else b:=b-a;
write (‘НОД=’, a);
readln;
end.
ЦИКЛ С ПОСТУСЛОВИЕМ.
UNTIL
Условие
ТЕЛО
ЦИКЛА
REPEAT
выполняется
не выполняется
REPEAT
Тело цикла
UNTILусловие;
Цикл выполнится хотя бы один раз, так как проверка условия происходит после выполнения операторов тела цикла. Цикл выполняется до тех пор, пока условие не выполняется.
Рассмотрим алгоритм Евклида:
ProgramNOD_repeat;
Var a,b: integer;
Begin
Write(‘введите два натуральных числа’);
Readln (a,b);
Repeat
If a>b then a:=a-b
else b:=b-a;
until a=b;
write (‘НОД=’, a);
readln;
end.
ЦИКЛ СО СЧЁТЧИКОМ (С ПАРАМЕТРОМ).
I:=N1, N2
ТЕЛО
ЦИКЛА
Выполняется до тех пор, покаI≤N2
FOR I:=N1 TO N2 DO
BEGIN
Тело цикла
END;
Читается как «дляIначиная с
N1 доN2 выполнить оператор».
ПеременнаяIназывается переменной цикла (или параметром), её значение меняется от меньшего значения до большего. ЕслиN1>N2, то цикл не выполнится ни разу.
Для организации цикла в котором параметр изменяется от большего значения к меньшему используют следующую форму:
FOR I:=N1 DOWNTO N2 DO
BEGIN
Тело цикла
END;
Если в цикле нужно выполнить лишь один оператор, то служебные словаBEGINиENDможно пропустить.
Рассмотрим задачу вычисленияan.
Programzadacha;
Var a, i, p: integer;
Begin
Write(‘введите два натуральныхaиn’);
Readln (a, n);
p:=1;
For i:=1 to n do p:=p*a;
write(‘aв степениnравно ’,p);
readln;
end.
Внутри цикла может находиться другой цикл, но необходимо, чтобы циклы имели разные переменные и внутренний цикл полностью находился в теле внешнего цикла.
Задания.
1. Какие из приведённых ниже программ содержат ошибку, приводящую к «зацикливанию»:
a) i:=0; for m:=10 to 0 do i:=i+1; writeln (i);
b) i:=0 repeat i:=i+1 until i:=0; writeln (i);
c) i:=0; while (i=0) or (i<10) do i:=i+1; writeln (i);
d) i:=0; repeat i:=i+1 until i<0; writeln (i);
e) i:=0; while (i=0) or (i>0) do i:=i+1; writeln (i);
2. Каковы будут значения переменных и сколько раз выполнится цикл:
For x:=1 to 15 do
If x mod 2 = 1 then s:=s+1;
3. Сколько раз будут выполнены операторы внутри цикла в следующем фрагменте:
x:=2; y:=10;
while y-x>1 dobegin
x:=x+1;
y:=y-1;
end;
sum:=x+y;
4. Что будет выведено на экран после выполнения следующих операторов:
p:=1; i:=1;
repeat
p:=p*2;
i:=i-1;
untili<=1;
5. Определите результат выполнения программы. Сколько раз выполняется внешний цикл? Сколько раз выполняется внутренний цикл?
Programzadacha2;
Usescrt;
Varm;n:integer;
Begin clrscr;
M:=0;
n:=0;
While m<3 do begin
N:=n+1; m:=m+1;
While n<2 do n:=n+1; end;
Writeln (n);
Readkey;
End.
6. Определите результат выполнения программы. Сколько раз выполняется внешний цикл? Сколько раз выполняется внутренний цикл?
Programzadacha3;
Usescrt;
Varn:integer;
Begin clrscr;
n:=0;
Repeat N:=n+1;
Repeat n:=n+1 until n>2;
Until n>5;
Writeln (n); Readkey;
End.
7. Найти все целые двузначные числа, удовлетворяющие условию: остаток от деления числа на 3 равен 2.
8. Найти все целые двузначные числа, разность цифр которых равна 3 (по модулю).
b)nслагаемых видаx+i, где х – данное число, аiменяется от 1 доn;
c) ста слагаемых, имеющих вид дроби ;
d)nслагаемых вида (i+1)2,i=1, 2, …,n;
e) квадратовnпервых натуральных чисел.
10. Для различных, вводимых с клавиатуры чисел найдите сумму положительных нечётных.
11. Дано положительное число А. Найдите среди чисел 1, 1+ , 1++, … первое, большее А.
12. Вводя числа с клавиатуры без ограничения их количества (конец ввода – число ноль), найдите сумму положительных и произведение отрицательных чисел.
13. Среди всех двухзначных чисел найти те, сумма цифр которых равнаn(1<n<18).
14. Даны натуральные числа х и у. Получить все кратные им числа, меньшие х*у.
15. Среди всех четырёхзначных чисел, выбрать те, у которых все цифры различны.
16. Почему, приведённые ниже циклы, будут бесконечны?
a) s:=2; b) s:=1; n:=20; i:=1; c) repeat
repeat s:=5/s; repeat s:=s*I; until false;
until s<0.01; until i>n;
17. Запишите программу вычисления квадратного корня, используя операторREPEAT.
18. Заполните таблицу:
ОператорWHILE
ОператорREPEAT
Последовательность выполнения тела цикла и проверки условия
Сначала проверяется условие, в затем выполняется тело цикла
Условие повторения
Тело цикла выполняется, если условие истинно
Условия выхода
Выход из цикла осуществляется, если условие ложно
Минимальное число повторений
Тело цикла может не выполниться ни разу, если условие цикла сразу принимает значениеFALSE
19. Определите, будет ли выполняться программа и каков будет результат.
Var s: real; i:integer;
Begin
S:=0; i:=1;
For i:=2 downto do s:=s+1/I;
Writeln(s);
End;
20. Написать программу нахождения наибольшего общего делителя 4 положительных чисел, вводимых с клавиатуры.
§9 Массивы.
При решении практических задач часто используется совокупность однотипных величин, которые для удобства обработки объединяют в упорядоченные группы с общим именем. Каждому элементу группы присваивается отдельный порядковый номер. Такая совокупность называется массивом.
Массив— это пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Элементы массива располагаются в последовательных ячейках памяти, обозначаются именем массива и индексом. Каждое из значений, составляющих массив, называется его компонентой (или элементом массива).
Индекс в обозначении компонент массивов может быть константой, переменной или выражением порядкового типа.
Количество индексов элементов массива определяет размерность массива. По этом признаку массивы делятся на: одномерные (линейные), двумерные, трёхмерные и т.д.
Задания.
1. Определите, какие массивы потребуются для решения задач:
а) объединения результатов эксперимента;
б) составления списков сотрудников;
в) хранения данных о том, какое количество картофеля следует закупить в каждом хозяйстве;
г) хранения результатов соревнований по многоборью 10 спортсменов в пяти видах спорта;
2. Может ли массив содержать разнородные данные?
п. 9.1. Одномерные массивы.
Пример:числовая последовательность четных натуральных чисел 2, 4, 6, ..., N представляет собой линейный массив, элементы которого можно обозначить А[1]=2, А[2]=4, А[3]=6, ..., А[К]=2*(К+1), где К — номер элемента, а 2, 4, 6, ..., N — значения. Индекс (порядковый номер элемента) записывается в квадратных скобках после имени массива.
Например, A[7] — седьмой элемент массива А; D[6] — шестой элемент массива D.
Для размещения массива в памяти ЭВМ отводится поле памяти, размер которого определяется типом, длиной и количеством компонент массива. В языке Pascal эта информация задается в разделе описаний.
Массив описываетсятак:
имя массива :array[нач.знач.индекса .. кон.знач.индекса] оf базовый тип;
Например,
Var B : array [1..5] of real, R : array [1..34] of char;
— описывается массив В, состоящий из 5 элементов и символьный массив R, состоящий из 34 элементов. Для массива В будет выделено 5*6=30 байт памяти, для массива R — 1*34=34 байта памяти.
Базовый тип элементов массива может быть любым простым типом.
Заполнить массивможно следующим образом:
1) с помощью оператора присваивания. Этот способ заполнения элементов массива особенно удобен, когда между элементами существует какая-либо зависимость, например, арифметическая или геометрическая прогрессии, или элементы связаны между собой реккурентным соотношением.
Задача 1.Заполнить одномерный массив элементами, отвечающими следующему соотношению:
a1=1; a2=1; ai=ai-2+ai-1(i = 3, 4, ..., n).
Read(N); {Ввод количества элементов}A[1]:= 1;A[2]:= 1;FOR I := 3 TO N DO A[I] := A[I - 1] + A[I - 2];
2) Другой вариант присваивания значений элементам массива — заполнение значениями, полученными с помощью датчика случайных чисел.
Задача 2.Заполнить одномерный массив с помощью датчика случайных чисел таким образом, чтобы все его элементы были различны.
Program Prim;VarA : array [1..100] of integer; I, N : integer;BeginWrite('введите количество элементов массива');ReadLn(N);randomize;For I := 1 to N do beginА[i] := -32768 + random(65535);Write(a[i]:7); end;End.
3) ввод значений элементов массива с клавиатуры используется обычно тогда, когда между элементами не наблюдается никакой зависимости.
Задание:Напишите программу ввода в память компьютера последовательности чисел: 1, 2, -5, 6, -111, 0.
ОСНОВНЫЕ ОПЕРАЦИИ НАД ЭЛЕМЕНТАМИ МАССИВОВ
Над элементами массивов чаще всего выполняются такие действия, как:
а) поиск значений;
б) сортировка элементов в порядке возрастания или убывания;
в) подсчет элементов в массиве, удовлетворяющих заданному условию.
Сумму элементов массива можно подсчитать по формуле S=S+A[I] первоначально задав S=0.
Количество элементов массива можно подсчитать по формуле К=К+1, первоначально задав К=0.
Произведение элементов массива можно подсчитать по формуле P = P * A[I], первоначально задав P = 1.
1. Упорядочивание массива по возрастанию.Дан линейный массив. Упорядочить его элементы в порядке возрастания.
Упорядочивание массивов по какому-либо признаку называются также сортировками. Существуют различные методы сортировок. Рассмотрим один из них – «метод пузырька2. Пусть имеется последовательность чиселa1,a2, …,an, которую необходимо упорядочить по возрастанию. Зафиксируем первый элемент и будем последовательно сравнивать его со стоящими справа. Если какой-то из элементов справа окажется меньше первого, то мы поменяем местами это элемент с первым и продолжим сравнение уже нового элемента, стоящего на первом месте, с оставшимися справа числами. Если снова выявится элемент, меньший зафиксированного, то повторим перестановку. В результате первого просмотра последовательности на первом месте окажется наименьший из всех элементов, т.е. он. Как более «лёгкий», как бы всплывает наверх (отсюда и название метода – «метод пузырька»). Теперь зафиксируем второй элемент и повторим просмотр, выполняя при необходимости при необходимости перестановки элементов, и т.д. Программа сортировки методом пузырька имеет вид:
Program puzyr;
Var a: array [1..10] of real;
I, j, n: integer; c: real;
Begin
Write(‘введите количество элементов массива:’);readln(n);
For i:=1 to n do begin
Write(‘a[‘,I,’]=’); readln(a[i]); end;
For i:=1 to n-1 do
For j:=i+1 to n do if a[i]>a[j] then begin
c:=a[i];
a[i]:=a[j];
a[j]:=c
end;
writeln(‘упорядоченныймассив:’);
For i:=1 to n do write(‘a[‘,I,’]=’, a[i]);
End.
2. Подсчёт элементов массива, удовлетворяющих заданному условию.Дан линейный массив целых чисел. Подсчитать, сколько в нем различных чисел.
Program Razlichnye_Elementy;Var I, N, K, Kol : Integer; A : Array [1..50] Of Integer;Begin Write('Введите количество элементов массива: '); ReadLn(N);FOR I := 1 TO N DO Begin Write('A[', I, ']='); ReadLn (A[I]);End; Kol := 1; {переменная, в которой будет храниться количество различных чисел}FOR I := 2 TO N DObeginZ:=0; {переменная, показывающая, встречалось ли данное значение раньше}FOR J:=1 TO I-1 DO IF A[I]=A[J] THEN Z:=1;IF Z:=0 THEN Kol := Kol +1;End;WriteLn('Количество различных чисел: ', Kol)END.
Задания.
1. Вычислите сумму элементов одномерного массива В[10].
2. Найдите максимальный элементов целочисленного массива С[20].
3. В заданной последовательности целых чисел определите количество и сумму элементов, кратных 10.
4. Даноnчисел. Найдите сумму чисел, больших заданного числа а.
5. В заданном массиве замените нулём наибольший элемент.
6. Вычислите среднее арифметическое наибольшего и наименьшего изnчисел.
7. Найдите сумму квадратов неотрицательных элементов и количество положительных чисел в заданном целочисленном массиве.
8. Дан одномерный массив действительных чисел. Подсчитать, сколько в нём отрицательных, положительных и нулевых элементов.
9. Даны действительные числаa1,a2, …,an. Поменять местами наибольший и наименьший элементы.
10. Пригодность детали оценивается по размеру В, который должен соответствовать интервалу (А-δ, А+ δ). Определить, имеются ли в партии изNдеталей бракованные. Если да, то подсчитать их количество, иначе выдать отрицательный ответ.
11. У вас есть доллары. Вы хотите обменять их на рубли. Есть информация о стоимости купли- продажи в банках города. В городеNбанков. Составьте программу, определяющую, какой банк выбрать, чтобы выгодно обменять доллары на рубли.
12. Дан одномерный массивA[N]. Найти
max(a2,a4,…,a2k)+min(a1,a3,…,a2k+1).
13. У прилавка магазина выстроилась очередь изnпокупателей. Время обслуживанияi-го покупателя равнаti(i=1,…,n). Определить времяCiпребыванияi-го покупателя в очереди.
14. Задан массив с количеством элементовN. Сформируйте два массива: в первый включите элементы исходного массива с чётными номерами, а во второй – с нечётными.
15. Японская радиокомпания провела опросNрадиослушателей по вопросу: «Какое животное Вы связываете с Японией?» Составить программу полученияkнаиболее часто встречающихся ответов и их долей (в процентах).
Сортировка массивов.
16. Сортировка слиянием. Заданы два упорядоченных одномерных массива с различным количеством элементов. Образовать из них новый так, чтобы он тоже был упорядоченным.
17. Сортировка выбором. Дана последовательность чисел. Требуется упорядочить их по убыванию. Для этого в массиве, начиная с первого, выбирается наибольший элемент и ставится на первое место, а первый – на место наибольшего. Затем, начиная со второго, эта процедура повторяется.
18. Сортировка вставками. Дана последовательность чисел. Требуется упорядочить её по возрастанию. Делается это следующим образом. Пусть а1,a2,…,ai– упорядоченная последовательность, т.е.a1≤a2≤…≤ai. Берётся следующее числоai+1и вставляется в последовательность так, чтобы новая последовательность была также возрастающей. Процесс производится до тех пор, пока все элементы отi+1 доnне будут перебраны.
п. 9.2. Двумерные массивы (матрицы).
При решении практических задач часто приходится иметь дело с различными таблицами данных, математическим эквивалентом которых служат матрицы. Такой способ организации данных, при котором каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен, называется двумерным массивом или таблицей.
Например, данные о планетах Солнечной системы представлены следующей таблицей:
Планета
Расст. до Солнца
Относ. обьем
Относ. масса
Меркурий
57.9
0.06
0.05
Венера
108.2
0.92
0.81
Земля
149.6
1.00
1.00
Марс
227.9
0.15
0.11
Юпитер
978.3
1345.00
318.40
Сатурн
1429.3
767.00
95.20
Их можно занести в память компьютера, используя понятие двумерного массива. Положение элемента в массиве определяется двумя индексами. Они показывают номер строки и номер столбца. Индексы разделяются запятой. Например: A[7, 6], D[56, 47].
При описании массива задается требуемый объем памяти под двумерный массив, указываются имя массива и в квадратных скобках диапазоны изменения индексов. Например,
VarM:array[1..10, 1..20]ofreal;
ОСНОВНЫЕ ОПЕРАЦИИ НАД ЭЛЕМЕНТАМИ МАТРИЦ
1. Заполняется двумерный массиваналогично одномерному: с клавиатуры, с помощью оператора присваивания. Например, в результате выполнения программы:
ProgramVvod2;VarI,J:Integer;A : Array [1..20, 1..20] Of Integer;Begin FOR I := 1 TO 3 DO FOR J := 1 TO 2 DO A[I, J] := 456 + IEnd.
Задача 1.Заполнить матрицу порядка n по следующему образцу:
1
2
3
...
n-2
n-1
n
2
1
2
...
n-3
n-2
n-1
3
2
1
...
n-4
n-3
n-2
...
...
...
...
...
...
...
n-1
n-2
n-3
...
2
1
2
n
n-1
n-2
...
3
2
1
Program Massiv12; Var I, J, K, N : Integer; A : Array [1..10, 1..10] Of Integer;Begin Write('Введите порядок матрицы: '); ReadLn(N);For I := 1 To N Do For J := I To N Do Begin A[I, J] := J - I + 1; A[J, I] := A[I, J]; End; For I := 1 To N Do Begin Writeln; For J := 1 To N Do Write(A[I, J]:4); EndEnd.
2. Работа с элементами главной диагонали квадратной таблицы.
Если число строк таблицы равно числу столбцов, то такая таблица называется квадратной. Главная диагональ квадратной таблицы проходит из левого верхнего угла в правый нижний.
Задача 2.Дана целочисленная квадратная матрица. Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали.
Program Obmen;Var N, I, J, Max,Ind, Vsp : Integer;A : Array [1..15, 1..15] Of Integer;Begin WRITE('Введите количество элементов в массиве: '); READLN(N);FOR I := 1 TO N DO FOR J := 1 TO N DO Begin WRITE('A[', I, ',', J, '] '); READLN(A[I, J]) End;FOR I := 1 TO N DOBegin Max := A[I, 1]; Ind := 1; FOR J := 2 TO N DO IF A[I, J] > Max THEN Begin Max := A[I, J]; Ind := J End; Vsp := A[I, I]; A[I, I] := A[I, Ind]; A[I, Ind] := Vsp End; FOR I := 1 TO N DO Begin WriteLn; FOR J := 1 TO N Do Write(A[I, J] : 3); End;WriteLnEnd.
3. Нахождение наибольших элементов каждой строки таблицы.
Каждую строку таблицы можно рассматривать, как одномерный массив и использовать идею нахождения максимального элемента одномерного массива. Найденные значения помещаются в одномерный массив.
Programmaximum;
Var b: array [1..10, 1..10] of integer;
i,j,n: integer;
a: array [1..10] of integer;
begin
write(‘Введите количество столбцов квадратной матрицы:’);readln(n);
writeln(‘Введите значения элементов таблицы по строкам:’);
for i:=1 to n do
for j:=1 to n do begin
write(‘a[‘,i,’,’,j,’]=’); readln (a[i,j]);
end;
{построение массива наибольших значений элементов строк таблицы}
for i:=1 to n do begin
a[i]:=b[i,1];
for j:=2 to n do
if a[i]<b[i,j] then a[i]:=b[i,j];
end;
writeln(‘Наибольшие числа строк таблицы:’);
for i:=1 to n do
for j:=1 to n do writeln(‘a[‘,i,’]=’; a[i]);
end.
4. Перестановка строк таблицы.
В прямоугольной таблице В изnстрок иmстолбцов требуется поменять местами две строки. Для этого достаточно организовать цикл по переменной столбца и используя промежуточную переменную, менять местами каждую пару элементов, стоящих в одном столбце. При заданных номерах строк К иLрешение выглядит так:
Program perestanovka;
Var b: array [1..10, 1..10] of integer;
i,j,n,m,k,l: integer; c:real;
begin
write(‘Введите количество столбцов матрицы:’);readln(n);
write(‘Введите количество строк матрицы:’);readln(m);
writeln(‘Введите значения элементов таблицы по строкам:’);
for i:=1 to n do
for j:=1 to n do begin
write(‘b[‘,i,’,’,j,’]=’); readln (b[i,j]); end;
write(‘Введите номера меняемых местами строк:’);readln(k,l);
{перестановкастрок}
for i:=1 to m do begin
c:=b[k,j];
b[k,j]:=b[l,j];
b[l,j]:=c
end;
writeln;
writeln(‘Таблица с переставленными строками:’);
for i:=1 to n do begin
for j:=1 to n do write (‘b[‘,i,’,’,j,’]=’; b[i,j]);
writeln;
end;
end.
Задания.
1. Можно ли выполнять обход двумерного массива, организовав внешний цикл по столбцам, а внутренний — по строкам?
2. Сформулируйте условие задачи, решение которой приведено в данной программе:
Program N_4;Var A : Array[1..50,0..49] Of Real; I, J, N : Integer; C : Real;Begin Write('Количество элементов массива N=?'); ReadLn(N);For I := 1 To N DoFor J := 0 To N-1 DoBegin Write('A[',I,',',J,']= '); Readln(A[I,J]) End;For I := 1 To N DoFor J := 0 To N-1 DoBegin C := A[I,J]; A[I,J] := A[N-I+1,J];A[N-I+1,J] := CEnd;For I := 1 To N DoBegin For J := 0 To N-1 Do Write(A[I,J]:5:2,' '); End;End.3. Вычислите сумму элементов главной диагонали квадратной таблицы.4. Найдите суммы элементов столбцов таблицы.5. Найдите наибольший элемент квадратной таблицы.6. В прямоугольной таблице замените все отрицательные элементы их квадратами.В квадратной таблице найдите наибольший элемент диагонали.Поменяйте местами первую и последнюю строки прямоугольной таблицы.7. Сформировать таблицу умножения в матричной форме и вывести её на экран.8. Построить квадратную матрицу порядка 2n: n n 1 1 … 1 2 2 … 21 1 … 1 2 2 … 2. . … . . . … . n. . … . . . … . . . … . . . … .1 1 … 1 2 2 … 23 3 … 3 4 4 … 43 3 … 3 4 4 … 4. . … . . . … . n. . … . . . … . . . … . . . … .3 3 … 3 4 4 … 49. Получить матрицу:
1
2
3
4
5
6
7
8
9
10
0
1
2
3
4
5
6
7
8
9
0
0
1
2
3
4
5
6
7
8
0
0
0
1
2
3
4
5
6
7
0
0
0
0
1
2
3
4
5
6
0
0
0
0
0
1
2
3
4
5
0
0
0
0
0
0
1
2
3
4
0
0
0
0
0
0
0
1
2
3
0
0
0
0
0
0
0
0
1
2
0
0
0
0
0
0
0
0
0
1
10. Составить программу, которая заполняет квадратную матрицу порядкаnнатуральными числами 1,2,3,…,n2, записывая их в неё «по спирали».Например, дляn=5 получаем следующую матрицу:
1
2
3
4
5
16
17
18
19
6
15
24
25
20
7
14
23
22
21
8
13
12
11
10
9
11. Вычислить сумму положительных элементов матрицы А[n,n].12. Определить, является ли заданная целая квадратная матрица симметричной относительно главной диагонали.13. Упорядочить по возрастанию элементы каждой строки матрицы размеромnxm.14. Задана квадратная матрица. Получить транспонированную матрицу, т.е. матрицу, где столбцы и строки меняются местами.15. Найти наибольший и наименьший элементы прямоугольной матрицы и поменять местами.16. В соревнованиях по многоборью (5 видов спорта) участвуют 10 спортсменов. Результаты соревнований записываются в таблицу. За каждый вид спорта спортсмен получает количество баллов, соответствующее занятому месту. Получить одномерный массив – результирующий и номер спортсмена-победителя.17. В матрице А, состоящей изnстрок иmстолбцов, поменять местами 1-ю и 2-ю строки, 3-ю и 4-ю и т.д.18. Найти сумму элементов из заштрихованной области матрицы А, размера 9х9.а) б)19. Дана квадратная матрица размераnxn. Найти номер столбца, все элементы которого нули.20. Дана квадратная матрица размераnxn. Найдите произведение максимальных элементов столбцов матрицы.21. Составить программу вычислений значений функцииy=(x+3)2 для 10 произвольных значений х.22. Написать алгоритм удвоения каждого элемента таблицы.23. Составьте программу подсчёта числа элементов прямоугольной матрицы меньших заданного числа а.24. Написать программу нахождения произведения всех ненулевых элементов прямоугольной матрицы.25. Определить номера строк матрицыR[M,N], хотя бы один элемент которых равен с, и элементы этих строк умножить наd.
§10 Строковые переменные.
В памяти компьютера могут храниться числа и символы. Любой символ занимает один байт памяти. Для данного, соответствующего одиночному символу, используется типchar. Значение символьного данного – любой символ клавиатуры компьютера, ограниченный апострофами. Например: ‘A’, ‘?’, ‘4’ – значения символьных величин. Символы могут объединяться в массивы. При обработки символьных массивов используются такие же алгоритмы, как и для числовых.
Примерыописаний:
Vara:array[1..50] of char; x,y:char;
Символьные переменные могут сравниваться с другими переменными, символьными константами, участвовать в операциях ввода, вывода, присваивания. Сравнивать символьные переменные можно посредством операций отношения: >, <, <=, >=, = , <>. Все символы упорядочены и каждому символу ставится в соответствие порядковый номер. Из двух символов большим считается тот, чей порядковый номер больше. Узнать порядковый номер символа можно с помощью функцииORD. ЗначениемORD(X) является порядковый номер значения символьной переменной Х.
Пример:I:=ORD(‘f’).
ФункцияCHRопределяет символ по его коду. Данную функцию можно заменить знаком #.
ПримерC:=#13.
Несколько подряд записанных символов образует строку.
Строка – это ограниченная апострофами упорядоченная последовательность любых символов.
Длина строки, обрабатываемой в Паскале, не должна превышать 255 символов (апострофы не считаются). Это связано с тем, что в конце строки, в дополнительном байте, хранится её длина – количество символов, а наибольшее целое число, которое может быть записано в байте, - 255. Если требуется обработать текст, длина которого большее 255 знаков, то используют массив строк.
Примеры описаний:
Varx:string[20];
y: string; f: array [1..10] of string [5];
Число в квадратных скобках указывает максимальную длину строки, если она не указана, то подразумевается, что она равна максимальной величине – 255.
Элементы строки идентифицируются именем строки с индексом, заключённым в квадратные скобки. Например:N[9],SLOVO[5],S[K+1]. Первый символ строки имеет номер 1. Индекс может быть положительной константой, переменной, выражением целого типа. Значение индекса не должно выходить за границы описания.
Типstring и стандартный типcharсовместимы. Строки и символы могут употребляться в одних и тех же выражениях.
Операции над строками.
Операция сцепления (конкатенации) (+)применяется для соединения нескольких строк в одну. Сцеплять можно как строковые константы, так и переменные. Длина результирующей строки не должно превышать 255.
Операции отношения: >, <, <=, >=, = , <>применяются для сравнения двух строк. Сравнение строк производится слева направо до первого несовпадающего символа, сравнение которых и производится. Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше.
ФункцияCopy(S,Poz,N) выделяет из строкиSподстроку длиной Nсимволов, начиная с позицииPoz. ЗдесьPozиN– целочисленные выражения.
Пример.
ЗначениеS
Выражение
Результат
‘Мама мыла раму’
Copy(S,6,4)
‘мыла’
‘Маша ела кашу’
Copy(S,1,8)
‘Маша ела’
ФункцияLength(S)определяет текущую длину строкиS. Результат – значение целого типа.
Пример.
ЗначениеS
Выражение
Результат
‘Мама мыла раму’
Length(S)
14
‘(А+В)*С’
Length (S)
7
ФункцияPos(S1,S2)обнаруживает первое появление в строкеS2подстрокиS1. Результат – целое число, равное номеру позиции, где находится первый символ подстрокиS1. Если вS2подстрокиS1не обнаружено, то результат равен 0.
Пример.
ЗначениеS2
Выражение
Результат
‘abcdef’
Pos(‘cd’,S2)
3
‘abаcdcdef’
Pos(‘cd’,S2)
4
ПроцедураDelete(S,Poz,N)– удалениеNсимволов из строкиS, начиная с позицииPoz.
Пример.
Исходное значениеS
Выражение
Конечное значениеS
‘abcdefg’
Delete (S,3,2)
‘abefg’
‘abcdefg’
Delete (S,2,6)
‘a’
ПроцедураInsert(S1,S2,Poz)– вставка строкиS1в строкуS2, начиная с позицииPoz.
Пример.
Исходное значениеS2
Выражение
Конечное значениеS2
‘ЭВМ РС’
Insert (‘IBM-‘,S2,5)
‘ЭВМIBM-PC’
‘Рис.2’
Insert (‘N’,S2,6)
‘Рис.N2’
Задания.
1. Дана строка, заканчивающаяся точкой. Подсчитать, сколько в ней слов.
2. Дана строка, содержащая английский текст. Найти количество слов, начинающихся с буквыb.
3. Дана строка. Подсчитать в ней количество вхождений буквr,k,t.
4. Дана строка, содержащая текст. Найти длину самого короткого слова и самого длинного слова.
5. Дана строка. Определить, сколько раз входит в неё группа буквabc.
6. В строке заменить все двоеточия (:) точкой с запятой (;).
7. Дана строка. Подсчитать сколько различных символов встречается в ней. Вывести их на экран.
8. Дана строка. Найти в ней те слова, которые начинаются и оканчиваются одной и той же буквой.
9. В строке удалить символ двоеточие и подсчитать количество удалённых символов.
10. Удалить часть символьной строки, заключённой в скобки (вместе со скобками).
11. Определить, сколько раз в строке встречается заданное слово.
12. Строка содержит одно слово. Проверить, будет ли оно читаться одинаково справа налево и слева направо (т.е. является ли оно полиндромом).
13. В записке слова зашифрованы – каждое из них записано наоборот. Расшифровать сообщение.
14. Проверить, одинаковое ли число открывающихся и закрывающихся скобок в данной строке.
15. Упорядочить массив английских слов по алфавиту.
§11 Подпрограммы.
Подпрограмма– программа, реализующая вспомогательный алгоритм. Основная программа – программа, реализующая основной алгоритм решения задачи и содержащая в себе обращения к подпрограммам. В Паскале существуют два типа подпрограмм: подпрограммы-процедуры и подпрограммы-функции. Используемые в программе нестандартные подпрограммы должны быть описаны в разделе описания подпрограмм.
Переменные, описанные в разделе описаний основной программы, и используемые в основной программе и в подпрограммах называются глобальными. Переменные, используемые только в подпрограмме, и описанные в разделе описаний переменных подпрограммы называются локальными.
Подпрограмма-функцияимеет следующий формат описания:
Тип функции может быть только простым типом (исключением является типstring). Блок содержит локальные для функции описания и раздел операторов. Обращение к функции является операндом в выражении.
Подпрограмма-процедураимеет следующий формат описания:
Procedure<имя процедуры>(<параметры>);
{описание локальных переменных}
begin
<блок операторов>;
end;
В качестве результата процедура может возвращать в вызывающую программу множество простых или структурированных величин или не возвращать никаких значений.Среди параметров процедуры указываются как аргументы, так и результаты. Параметры-результаты должны быть обязательно параметрами-переменными (описанными после служебного словаvar). Обращение к процедуре – отдельный оператор.
Обмен данными между вызывающей программой и подпрограммой может происходить не только через параметры, но и через глобальные переменные.
Пример. Вычислить разность двух простых дробей:
(a,b,c,d– натуральные числа). Результат получить в виде простой несократимой дробиe/f.
Решение.
Следует вычислить числитель и знаменатель по правилам вычитания дробей, и сократить их на наибольший общий делитель (НОД). Вычисление НОД двух чисел оформим в виде подпрограммы, используя алгоритм Евклида.
Рассмотрим два варианта решения этой задачи: с подпрограммой-функцией и подпрограммой-процедурой.
Решение1.
Program Sub1;
Var a,b,c,d,e,f: integer;
Function NOD (m,n:integer):integer;
Begin While m<>n do
If m>n then m:=m-n
else n:=n-m;
NOD:=m
End;
Beginwrite(‘Введите числители и знаменатели дробей:’);
Readln (a, b, c, d);
e:=a*d-b*c; f:=b*d;
if e=0 then writeln (e)
else begin
e:=e div NOD (abs(e),f);
f:=f div NOD (abs(e),f);
writeln (e,’/’,f); end;
end.
Решение2.
Program Sub2;
Var a,b,c,d,e,f,g: integer;
Procedure NOD (m,n:integer; var k:integer);
Begin While m<>n do
If m>n then m:=m-n
else n:=n-m;
k:=m
End;
Beginwrite(‘Введите числители и знаменатели дробей:’);
Readln (a, b, c, d);
e:=a*d-b*c; f:=b*d;
if e=0 then writeln (e)
else begin
NOD(abs(e),f,g);
e:=e div g; f:=f div g;
writeln (e,’/’,f);
end;
end.
Задания.
Во всех задачах используйте подпрограммы.
1. Треугольник задан координатами своих вершин. Составить программу вычисления его площади.
2. Составить программу нахождения наибольшего общего делителя и наименьшего общего кратного двух натуральных чисел.
НОК (А, В)=
3. Составить программу нахождения наибольшего общего делителя четырёх натуральных чисел.
4. Написать программу нахождения сумму большего и меньшего из 3 чисел.
5. Вычислить площадь правильного шестиугольника со стороной а, используя подпрограмму вычисления площади треугольника.
6. Проверить, являются ли данные три числа взаимно простыми.
7. Написать программу вычисления суммы факториалов всех нечётных чисел от 1 до 9.
8. Даны две простых дроби. Составить программу:
а) деления дроби на дробь.
б) умножения дроби на дробь.
9.Дано натуральное числоN. Составить программу формирования массива, элементами которого являются цифры числаN.
10. Составить программу, определяющую, в каком из данных двух чисел больше цифр.
11. Заменить данное натуральное число на число, которое получается из исходного записью его цифр в обратном порядке.
12. Найти все натуральныеn-значные числа, цифры в которых образуют строго возрастающую последовательность.
пословицы
Семеро одного монитора не ждут.
Каждому программисту компьютер выдаёт то, что он заслуживает.
Не спрашивай старого программиста, спрашивай бывалого.
На: Практическое руководство по языку Паскаль
Спасибо за разработку! Очень нужная информация.