Главная страница

Паскаль лекции. Лекции Паскаль. Программа на языке машинных команд (ее называют объектной). Краткое знакомство


Скачать 1.24 Mb.
НазваниеПрограмма на языке машинных команд (ее называют объектной). Краткое знакомство
АнкорПаскаль лекции
Дата14.01.2020
Размер1.24 Mb.
Формат файлаpdf
Имя файлаЛекции Паскаль.pdf
ТипПрограмма
#104006
страница2 из 7
1   2   3   4   5   6   7
3.
Проверить значения дискриминанта и, в зависимости от полученного ответа, выполнить то или иное действие. program kvyr; var a,b,c : integer; x1,x2,d : real begin writeln(‘
введите коэф-ты квадратного уравнения’); read(a,b,c); d:=b*b-4*a*c; if d>=0 then begin x1:=(-b+sqrt(d))/(2*a); x2:=(-b-sqrt(d))/(2*a); writeln(‘
корни x1=,x1,’ x2’,x2) end
PDF created with pdfFactory Pro trial version www.pdffactory.com

19 else if d=0 then writeln(‘x1=x2=’,-b/(2*a)) else writeln(‘
решений нет’); end.
Задача 4. Составьте программу для вычисления выражения а) max(x+y+z, xyz) + 3 б) min(x
2
+y
2
, y
2
+z
2
) - 4 program kvyr; var a,b,c : integer; x1,x2,d : real begin writeln(‘
введите коэф-ты квадратного уравнения’); read(a,b,c); d:=b*b-4*a*c; if d>=0 then begin x1:=(-b+sqrt(d))/(2*a); x2:=(-b-sqrt(d))/(2*a); writeln(‘
корни x1=,x1,’ x2’,x2) end else if d=0 then writeln(‘x1=x2=’,-b/(2*a)) else writeln(‘
решений нет’); end.
Задача 4. Составьте программу для вычисления выражения а) max(x+y+z, xyz) + 3 б) min(x
2
+y
2
, y
2
+z
2
) - 4
§6.
Оператор цикла с параметром
Циклический алгоритм
Алгоритмом называется понятное и точное предписание
(
указание) исполнителю совершить определенную последовательность действий для достижения поставленной цели для решения поставленной задачи.
Цикл - процесс многократного повторения каких-либо действий.
Начало a, b, c d=b
2
– 4ac да нет d>0 x
1
= (-b+
d)/(2*a) да нет d=0 x
2
= (-b-
d)/(2*a) x
1
=x
2
=-b/2a решений нет x
1
, x
2 x конец
PDF created with pdfFactory Pro trial version www.pdffactory.com

20
Действия, повторяющиеся в цикле, называются телом цикла.
Различают 3 вида циклов :
1)
Цикл с предусловием «Пока»
2)
Цикл с постусловием «До»
3)
Цикл с параметром «Для»
Цикл с параметром «Для»
Возьмем очень простой пример - таблицу умножения: число 2 умножаем на числа от 1 до 10 и печатаем ответ. Какие действия повторяются ? Повторяются действия умножения и вывод значения произведения на экран. При этом заметим, что второй сомножитель увеличивается при каждом действии на единицу, и операция умножения повторяется заданное количество раз. Как мы видим, в этом случае процесс вычислений носит циклический характер, причем число повторений цикла известно к началу его выполнения, управление циклом осуществляется с помощью переменной (счетчик цикла), которая в этом циклическом процессе принимает последовательное значение от заданного начального значения до заданного конечного значения.
Значение таблицы умножения на 2 можно записать так :
2 х i = а, где i изменяется от 1 до 10, а - от 2 до 20.
Оператор цикла с параметром применяют тогда, когда заранее известно число повторений одной и той же последовательности операторов. Начальные и конечные значения параметра цикла могут быть представлены константами, переменными или арифметическими выражениями.
FOR K:=M1 TO M2 DO оператор1
FOR K:=M1 TO M2 DO
BEGIN оператор1; оператор n;
END;
FOR K:=M1 DOWNTO M2 DO
BEGIN
PDF created with pdfFactory Pro trial version www.pdffactory.com

21 операторы циклической части
END;
ГДЕ К - параметр цикла, М1 и М2 - начальное и конечное значение параметра цикла. DOWNTO изменяет параметр с шагом
-1.
Внимание !
1)
Счетчик изменяется на единицу при каждом следующем исполнении оператора цикла.
2)
Не забывайте, что счетчику присваивается начальное значение, т.е.
K=
начальное значение.
3)
Если начальное значение совпадает с конечным значением, то операторы цикла (еще говорят «тело цикла») выполняются один раз.
4)
Если начальное значение счетчика больше конечного значения, то тело цикла не выполняется ни разу.
5)
При выходе из цикла значение счетчика совпадает с конечным значением, т.е. К=M2
Пример 1: Вывести на экран квадраты натуральных чисел от 10 до
20.
PROGRAM N1;
VAR i: integer; {
счетчик цикла} a: integer;
BEGIN
FOR i:=10 TO 20 DO
Блок-схема цикла «FOR» k=M1, M2
Операторы тела цикла
PDF created with pdfFactory Pro trial version www.pdffactory.com

22
BEGIN a:=i*i; writeln(‘
квадрат числа’,i,’=’,a);
END
END.
Или
FOR i:=10 TO 20 DO writeln(‘
квадрат числа’,i,’=’,i*i);
Пример 2. Вывести на экран натуральные числа от 40 до 10.
PROGRAM N2;
VAR i: integer; {
счетчик цикла}
BEGIN
FOR i:=40 DOWNTO 10 DO write(i,’ ’)
END.
Начало i=10, 20 a=i*i

Квадрат числа’,i,’=’.a конец
PDF created with pdfFactory Pro trial version www.pdffactory.com

23
§7.
Базовые циклические алгоритмы
1.
Алгоритм вычисления суммы чисел.
Вычислить сумму 12 целых чисел, введенных с клавиатуры.
PROGRAM summa;
VAR a: integer; {
введенное число} i: integer; {
счетчик цикла}
S: integer; {
сумма}
BEGIN
S:=0;
FOR i:=1 TO 12 DO
BEGIN writeln(’
задайте значение очередного слагаемого ’); readln(a);
S:=S+a
END; writeln(‘
Сумма =’,S);
END.
2.
Подсчет количества чисел удовлетворяющих заданному условию.
Подсчитать количество отрицательных чисел из 10, введенных с клавиатуры.
PROGRAM kol;
VAR a: integer; {
входная переменная} i: integer; {
счетчик цикла}
K : integer; {
счетчик отрицательных чисел}
BEGIN
K:=0;
FOR i:=1 TO 10 DO
BEGIN write(’
задайте значение переменной a: ’); readln(a);
IF a<0 THEN K:=K+a
END;
IF K=0 THEN writeln(‘
Отрицательных чисел нет»)
PDF created with pdfFactory Pro trial version www.pdffactory.com

24
ELSE writeln(‘
Количество отрицательных чисел’,K:4);
END.
3.
Вычислить сумму чисел, кратных 3, из десяти чисел введенных с клавиатуры.
PROGRAM summa;
VAR a: integer; {
введенное число} i: integer; {
счетчик цикла}
S: integer; {
сумма}
K: integer; {
счетчик чисел кратных 3}
BEGIN
S:=0; K:=0;
FOR i:=1 TO 10 DO
BEGIN write(’
задайте значение очередного слагаемого ’) readln(a);
IF a mod 3=0 THEN begin
K:=K+1;
S:=S+a; end
END;
IF K=0 THEN writeln(‘
чисел кратных 3 нет’)
ELSE writeln(‘
сумма чисел кратных 3 =’, S:6)
END.
4.
Алгоритм вычисления n!. n!=1*2*3*...*n. 0!=1
PROGRAM N;
VAR F: integer; i: integer;
BEGIN
F:=1;
FOR i:=1 TO 15 DO
F:=F*i; writeln(’15! =’,F)
END.
PDF created with pdfFactory Pro trial version www.pdffactory.com

25 5.
Алгоритм вычисления а n
PROGRAM step;
VAR a: integer; {
основание} n:integer; {
показатель степени} i: integer; {
счетчик цикла}
W: integer; {
результат}
BEGIN write(‘
задайте основание а’); readln(a); write(‘
введите показатель n’); readln(n);
W:=1;
FOR i:=1 TO n DO
W:=W*a; writeln(a,’
в степени ‘,n,’ равно ’,W:6)
END.
Вычислить : 1! + 2! + 3! + ... + n!, при n=5 s:=0; F:=1;
For i:=1 to 5 do begin f:=f*i; s:=s+f; end;
§8.
Цикл с предусловием WHILE
Цикл с предусловием WHILE используется тогда, когда число повторений оператора цикла заранее не известно, а задается некоторое условие продолжение цикла.
Форма записи:
WHILE <
лог выр-ние / условие> DO
BEGIN операторы циклической части программы
END
PDF created with pdfFactory Pro trial version www.pdffactory.com

26
WHILE ( пока ) DO ( выполнять )
Сначала выполняется значения условия . Пока оно истинно выполняются операторы циклической части . Когда только оно становится ложным, происходит выход из цикла. Если условие ложно то цикл не выполняется ни разу. Возможен случай , когда в циклической части стоит оператор перехода (EXIT, GOTO) передающий управление за пределы цикла. В такой ситуации цикл может завершиться до его естественного окончания.
Данная конструкция может работать, как конструкция цикла со счетчиком, но при этом необходимо изменять переменную, являющуюся счетчиком, с помощью оператора присваивания. В конструкции WHILE вы можете выбирать любой необходимый вам шаг.
Пример : a:=1; n:=1;
WHILE 2-a<=3-n+1 DO
BEGIN a:=a+2; n:=n+1
END;
PDF created with pdfFactory Pro trial version www.pdffactory.com

27
Задача 1
Найти количество чисел, сумма которых превысит 100.
PROGRAM N; var k:integer; s:integer; begin s:=0; k:=0; while s<=100 do begin k:=k+1; s:=s+k end; writeln(‘
количество слагаемых=’,k); end.
Задача 2
Вычислить сумму четных чисел на отрезке от 10 до 30.
PROGRAM N; var k:integer; {
очередное слагаемое} s:integer; {
сумма}
Блок-схема цикла «Пока» нет
Условие да
Тело цикла
PDF created with pdfFactory Pro trial version www.pdffactory.com

28
begin s:=0; k:=10; while k<=30 do begin s:=s+k; k:=k+2 end; writeln(‘
сумма четных чисел от 10 до 30=’,s); end.
Задача 3
Напечатать в виде таблицы значения функции y=4x
2
- 2x + 3, для значений x, изменяющегося от -4 до 2 с шагом 0.5
PROGRAM N; var x:integer; y:real; begin x:=-4; while x<=2 do begin y=4*x*x-2*x+3; x:=x+0.5 end; writeln(‘
при x=’,x,’ y=’,y:8:3); end.
PDF created with pdfFactory Pro trial version www.pdffactory.com

29
§9.
Оператор цикла с постусловием Repeat
Этот оператор отличается от цикла с предусловием WHILE тем, что проверка условия производится после очередного выполнения тела цикла. Это обеспечивает выполнение цикла хотя бы один раз.
Форма записи
REPEAT
Повторить операторы циклической части программы
UNTIL <
логическое выражение> До тех пор
Операторы циклической части выполняются повторно до тех пор пока значение логического выражения ложно.
Условием прекращения циклических вычислений является истинное значение логического выражения
Блок-схема цикла «До»
Тело цикла нет
Условие да
PDF created with pdfFactory Pro trial version www.pdffactory.com

30
Служебное слово REPEAT открывает тело цикла затем выполняются последовательно операторы тела цикла и проверяется условие выхода из него.
Запомните !
1.
Тело цикла выполняется хотя бы один раз в любом случае.
2.
В ходе работы цикла мы должны прийти к истинности условия.
Задача 1.
Вычислить сумму квадратов натуральных чисел до тех пор, пока квадрат очередного числа не превысит 81.
Program n; var k:integer; {
слагаемое} s:integer; {
сумма} begin k:=1; s:=0;
REPEAT s:=s+k*k; k=k+1
Until k>81; writeln(‘
сумма равна=’,s) end.
Задача 2
Вычислите значение функции Y=X
2
, при х=8; 6; 4 ;2
Х=8;
REPEAT
Y:=X*X; writeln(x:3, y:5); X:=X-2
UNTIL X=0
Задача 3.
С клавиатуры вводятся последовательно целые числа, и вычисляется их сумма до первого встречного отрицательного числа (не включая его самого).
Program ex3;
Var a: integer; {
вводимое число} s: integer; {
сумма}
Begin s:=0; a:=0; {
мы вынуждены выполнять этот искусственный шаг}
REPEAT s:=s+a; readln(a)
PDF created with pdfFactory Pro trial version www.pdffactory.com

31
UNTIL a<0;
Writeln(s);
End.
Задача 4.
Найти наибольший общий делитель (НОД) двух чисел. НОД - это наибольшее целое число, которое делит нацело оба числа.
Решение : Даны числа а и b, то для чисел а и b выполняется равенство
НОД(а, b)=НОД(b, r), где r - остаток от деления а на b . r= a mod b=a- (a div b)*b
Например, пусть а=48, b=18.
A b
Результаты
48 18
-
48 mod 18 = 12 18
НОД(48,18)=НОД(12,18)
12 18 mod 12 = 6
НОД(12,18)=НОД(12,6)
12 mod 6 = 0 6
НОД(12,6)=НОД(0,6)
0 6
НОД(0,6)=6
Program NOD; var a,b:longint; begin writeln(‘
введите два числа’); readln(a,b);
REPEAT if a>b then a:=a mod b else b:=b mod a
UNTIL (a=0) or (b=0); writeln(‘
НОД=’, a+b); readln; end.
Выбор конструкции цикла зависит от конкретного алгоритма. Для каждого задания необходимо продумать, какая конструкция является наиболее оптимальной.
PDF created with pdfFactory Pro trial version www.pdffactory.com

32
§10.
Эксперимент с программой.
Лабораторная работа
Задача1 : Дано натуральное число n (n<=9999). Определить, является ли оно палиндромом («перевертышем»), с учетом четырех цифр. Например, палиндромами являются числа : 2222, 6116, 0440.
Итак, у нас четырехзначное число, поэтому переменная оператора
For изменяется от 1 до 4. В переменной m хранится «остаток» числа, сначала он равен введенному числу. В переменной с именем r формируем значение числа - «перевертыша». Основными операциями являются : r:=10*r + m Mod 10 m:=m Div 10.
Результат трассировки приведен в таблице. i m r
-
3994 0
1 399 0*10+3994 mod 10= 0+4=4 2
39 4*10+399 mod 10=40+9=49 3
3 49*10+39 mod 10=490+9=499 4
0 499*10+3 mod 10=4990+3=4993
Program ex1;
Var n,m,r,i : Integer;
Begin writeln(‘
Введите целое число, меньшее 10000’); readln(n); m:=n; r:=0;
For i:=1 to 4 do begin r:=r*10+m mod 10; m:=m Div 10; end; if r=n Then Writeln(‘
Да’);
Else Writeln(‘
Нет’); readln; end.
1)
Измените программу так, чтобы можно было обрабатывать целые числа из диапазона Longint.
PDF created with pdfFactory Pro trial version www.pdffactory.com

33 2)
Замените цикл for, в программе, на циклы While и Repeat ...
Until
Задача 2 : Дано натуральное число n . Требуется подсчитать количество цифр данного числа.
Решение: Подсчет цифр начнем с последней цифры числа. Число делим на 10, убирая последнюю цифру и т.д.
Пусть m - это число, л- счетчик цифр.
Program ex2; var m,n : Longint; k : Integer; begin writeln(‘
введите целое число’); readln(n); m:=n; k:=0;
While m<>0 Do begin Inc(k); m:=m Div 10 end; writeln (‘
В числе’,n,’ - ‘,k,’ цифр ‘); end.
Модифицируя программу ех2, решите следующие задачи :
 найдите сумму цифр числа;
 найдите первую цифру числа;
поменяйте порядок цифр числа на обратный;
 найдите количество четных цифр числа;
 найдите наибольшую цифру числа;
 найдите сумму цифр числа, больших 5;
 ответьте на вопрос, сколько раз данная цифра встречается в числе.
Задача 3 : Натуральное число р называется простым, если оно делится только на 1 и на себя. По соглашению 1 не считают простым числом. Начало последовательности простых чисел имеет вид :
2,3,5,7,11,13, 17, 19, 23, ....
PDF created with pdfFactory Pro trial version www.pdffactory.com

34
В программе ех3 определяется, является ли данное число простым. Мы ищем делители числа n в интервале от 2 до n div 2, хотя можно было бы ограничиться интервалом от 2 до целой части n program ex3;
Var i, n :Longint;
Begin
Writeln(‘
Введите натуральное число’);
Readln(n); i:=1;
Repeat inc(i)
Until (i>n div 2) or (n mod i = 0); if i> n div 2 Then Writeln(‘
число ’,n,’простое’);
Еlse Writeln(‘Число ‘,i,’- первый делитель числа’, n, ‘ , больший 1’); end.
Эту задачу можно решить и с использованием оператора While.
Сделайте это. Затем измените программу так, чтобы в ней осуществлялся вывод всех делителей числа n
Подсказка. Логическое выражение в операторе Repeat....Until упростится, а в нем останется только условие i>n div 2, а в теле цикла появится оператор if n mod i = 0 Then Writeln(....,i)
§11.
Оператор варианта выбора
Сase <порядковая переменная> of
<
константа 1>: <оператор 1>;
<
константа 2>: <оператор 2>;
<
константа n>: <оператор n>;
[Else <
оператор >; ] end;
Если порядковая переменная равна одной из перечисленных констант, то выполняется соответствующий оператор. Затем
PDF created with pdfFactory Pro trial version www.pdffactory.com

35 управление передается за пределы оператора выбора. Если значение переменной не совпадает ни с одной константой, то выполняется оператор, стоящий после Else, если он есть, либо управление передается на оператор, следующий за End.
Задача 1: Составьте программу, в которой определяется, какой буквой - гласной или согласной - является введенный символ английского алфавита.
Решение :
Разделим все символы на три группы :
 гласные буквы английского алфавита;
 согласные буквы английского алфавита;
 символы, не являющиеся буквами английского алфавита.
Program ех4; var ch : char; begin
Writeln(‘
Введите символ’);
Readln(ch);
Case ch of
‘a’,’e’,’i’,’o’,’u’ : writeln(‘
Это гласная’);
‘a’...’z’ : Writeln(‘
это согласная’); else writeln(‘
это не английский алфавит’); end; end.
Задача 2. Мастям игральных карт условно присвоены следующие порядковые номера: «пики»-1, «трефы»-2, «бубны»-3, «червы»-4. По заданному номеру масти m (1m4) определить название соответствующей масти.
Program mast; var m:integer; begin write(‘
введите номер масти’); readln(m); case m of
1 : writeln(‘
пики’);
2 : writeln(‘
трефы’);
3 : writeln(‘
бубны’);
4 : writeln(‘
червы’)
PDF created with pdfFactory Pro trial version www.pdffactory.com

36
else writeln(‘
вы ввели неправильный номер’); end; end.
§12.
Типы определенные пользователем
Раздел описания типов
В языке Паскаль все данные, используемые программой, должны принадлежать к какому-либо заранее известному типу данных.
Тип данных определяет:
 формат представления данных в памяти ЭВМ;
 множество допустимых значений;
 множество допустимых операций.
Все простые типы можно разделить на стандартные и пользовательские. Стандартные типы данных рассматривались в задании1.
Пользовательские типы объявляются в разделе описания типов, который открывается словом Type.
Type week=(sunday, monday, tuesday, wednesday, thursday, friday, satufday); work_week=monday..friday; day=1..31;
Обратите внимание на то, что при объявлении пользовательских типов между их именем и конструкцией, определяющей тип, ставится знак равенства.
1   2   3   4   5   6   7


написать администратору сайта