Top Banner
Основы программирования в Pascal
159

Основы программирования в Pascal

Jan 24, 2016

Download

Documents

olwen

Основы программирования в Pascal. Основы программирования в Pascal. Структура программы Линейные алгоритмы Ветвления Циклы Одномерные массивы Двумерные массивы Символьные и строковые переменные. Пример линейного алгоритма и программы в Паскале. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Основы программирования в  Pascal

Основы программирования в

Pascal

Page 2: Основы программирования в  Pascal

Основы программирования в Pascal

• Структура программы• Линейные алгоритмы• Ветвления• Циклы• Одномерные массивы• Двумерные массивы• Символьные и строковые переменные

Page 3: Основы программирования в  Pascal

Пример линейного алгоритма и программы в Паскале

Задача 1. Составить алгоритм сложения двух чисел А и В, вводимых с клавиатуры. Результат сложения записать в виде переменной С. По данному алгоритму написать программу в Паскале

алг сложение

цел А, В, С

нач

ввод А

ввод В

С := А + В

вывод С

кон

Ввод А, В

С:=A+B

начало

конец

Вывод C

Program summa;Var

a,b,sum : integer;

Beginreadln(a);readln(b);sum := a + b;writeln(sum)

end.

Программа в ПаскалеБлок-схемаАлгоритмический язык

Page 4: Основы программирования в  Pascal

Структура программы в Паскале (минимальные требования)

Program имя программы;

Var

имя переменной : тип;

Begin

операторы

end.

- Имя программы

- Раздел описания переменных

- Раздел операторов

Page 5: Основы программирования в  Pascal

Раздел описания переменных

Var <список переменных (через запятую)> : <тип переменных>;

Типы переменных:

integer – целый тип (в интервале [-32.768, 32.767] – 2 байта

Longint – длинный целый [-2.147.483.648, 2.147.483.647] – 4 байта

real – вещественный тип - 6 байт

и др.

)107,1109,2( 3839

Page 6: Основы программирования в  Pascal

Ввод исходных данных с клавиатуры

read(<список переменных>);

readln(<список переменных>);

read(a,b); read(a);read(b);

Page 7: Основы программирования в  Pascal

Вывод данных на экран монитора

write(<список переменных>);

writeln(<список переменных>);

write(a,b); writeln(a);writeln(b);write(a,’ ‘,b);

Для целого типа:

Для вещественного типа:

writeln(a:5:2);writeln(b:7:3);

write(a:7:2,b:9:3);

write(a:5,b:5);

(При b=1,234 на экран выведется: 1234e-3)writeln(b);

Page 8: Основы программирования в  Pascal

Вывод данных на экран монитора

writeln(‘a=‘,a);writeln(‘b=‘,b);

Для целого типа:

Для вещественного типа:

writeln(‘a=‘,a:5:2);writeln(‘b=‘,b:7:3); При b=1,234 на экран выведется: b= 1,234

Page 9: Основы программирования в  Pascal

Арифметические выражения в Паскале

Сложение +

Вычитание -

Умножение *

Деление /

Целочисленное деление div

Остаток от деления mod

например: 11 div 5 = 22 div 3 = 017 div -5 = -3-17 div 5 = -3-17 div -5 = 3

например: 10 mod 5 = 010 mod 3 = 1 3 mod 5 = 317 mod -5 = 2-17 mod 5 = -2-17 mod -5 = -2

Page 10: Основы программирования в  Pascal

Приоритет операций

1. Минус, not

2. *, /, div, mod, and

3. +, -, or

4. =, <>, <, >, <=, >=

Page 11: Основы программирования в  Pascal

Стандартные функции в Паскале

Page 12: Основы программирования в  Pascal

Этапы программирования

1. Постановка задачи

2. Математическая формализация

3. Построение алгоритма

• Алгоритмический язык

• Язык блок-схем

4. Составление программы на языке программирования (Паскаль)

5. Отладка и тестирование программы

Page 13: Основы программирования в  Pascal

Линейные алгоритмы

22 ba

Задача 2. Написать программу нахождения периметра прямоугольного треугольника по известным катетам a и b (a и b – целые числа, вводимые с клавиатуры).

алг периметр

цел a, b

вещ c, p

нач

ввод a

ввод b

c :=

p := a + b +c

вывод p

кон

нач Периметр

Ввод aВвод b

c := p := a + b +c

22 ba

Вывод p

кон

Page 14: Основы программирования в  Pascal

Линейные алгоритмыЗадача 2. Написать программу нахождения периметра прямоугольного треугольника по известным катетам a и b (a и b – целые числа, вводимые с клавиатуры).

Program perimetr;Var

a,b : integer; c,p : real;Begin

write(‘a=‘); readln(a);write(‘b=‘); readln(b);c := sqrt(sqr(a)+sqr(b));p := a + b + c;writeln(‘p=‘,p:5:1);readln

end.

Page 15: Основы программирования в  Pascal

Линейные алгоритмыЗадача 2. Написать программу нахождения периметра прямоугольного треугольника по известным катетам a и b (a и b – целые числа, вводимые с клавиатуры).

Program perimetr;Var

a,b : integer; p : real;Begin

write(‘a=‘); readln(a);write(‘b=‘); readln(b);p := a + b + sqrt(sqr(a)+sqr(b));writeln(‘p=‘,p:5:1);readln

end.

Page 16: Основы программирования в  Pascal

Линейные вычислительные алгоритмы

Задача 2 Даны переменные X и Y Требуется произвести между ними обмен значениями (№9 стр. 190)

алг обмен

вещ X, Y, Z

нач

ввод X

ввод Y

Z := X

X := Y

Y := Z

вывод X, Y

кон

Таблица трассировки:

X Y Z

Page 17: Основы программирования в  Pascal

Решение задач

ba

ba

2

Записать математические выражения в Паскале и вычислить их значения при a=2, b=3:

ba

baa

||

Задача. Вычислить длину окружности и площадь круга одного и того же заданного радиуса R.

Page 18: Основы программирования в  Pascal

Домашнее задание

Задачник 1 § 4.4.1 стр. 218-222; № 1, 13, 28

Page 19: Основы программирования в  Pascal
Page 20: Основы программирования в  Pascal

Домашнее задание Задачник 1 № 28 стр. 225

Program treygol;VAR x1, x2, x3, y1, y2, y3 :integer; a, b, c:real;Begin

Write (‘Введите: A(x1, y1), B(x2, y2), C(x3, y3)');Readln (x1, y1, x2, y2, x3, y3);a:= sqrt(((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));b:= sqrt(((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2)));c:= sqrt(((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1)));Writeln ('P=',a+b+c :5 :1);Writeln ('S=',sqrt((a+b+c)/2*((a+b+c)/2-a)*((a+b+c)/2- b)*((a+b+c)/2-c)):5 :1);Readln

END.

Линейные алгоритмы

Page 21: Основы программирования в  Pascal

Решение задач

Задача 1. Дано трёхзначное число. Найти сумму его цифр.

Page 22: Основы программирования в  Pascal

Решение задач

Задача 2. Дано трёхзначное число. Записать это число в обратном порядке.

Задача 3. Дано трёхзначное число. Создать всевозможные числа, образованные перестановкой цифр исходного числа.

Задача 4. С начала суток прошло n секунд. Определить, сколько часов, минут и секунд прошло с начала суток.

Page 23: Основы программирования в  Pascal
Page 24: Основы программирования в  Pascal

Разбор задач домашнего задания

Задача 2. Дано трёхзначное число. Записать это число в обратном порядке.

Var g :integer;Begin

Readln (g);g:= ((g mod 10) * (100)) + ((g mod 100 div 10) * 10) + (g div 100);Writeln (g);

End.

Page 25: Основы программирования в  Pascal

Разбор задач домашнего задания

Задача 4. С начала суток прошло n секунд. Определить, сколько часов, минут и секунд прошло с начала суток.

Uses crt;Var C, h, m :integer;Begin clrscr; write('Введите секунды: '); Readln(C); h:= C div 3600; m:= C mod 3600 div 60; C:= C mod 3600 mod 60; Writeln (h,' час. ',m,' мин. ',C, ' сек.');End.

Page 26: Основы программирования в  Pascal
Page 27: Основы программирования в  Pascal

Ветвление

Если <условие>

то <серия команд 1>

иначе <серия команд 2>

кон

If <условие>

then begin<операторы 1>end

else begin<операторы 2>end;

Page 28: Основы программирования в  Pascal

Программирование ветвленийЗадача 1. Найти наибольшее значение среди двух величин, вводимых с клавиатуры.

Program Bid1;Var

a,b,max : real;Begin

write(‘a=‘); readln(a);write(‘b=‘); readln(b); If a > b

then max := aelse max := b;

writeln(‘max=‘,max:7:2);readln

end.

начало

ввод а,в,с

a>b

max := a max := b

вывод max

конец

Да Нет

Page 29: Основы программирования в  Pascal

Программирование ветвленийЗадача 2. Упорядочить значения двух переменных по возрастанию.

Program Sort2;Var

X,Y,C : integer;Begin

readln(X,Y); If X > Y

then beginC := X;X := Y;Y := C

end;writeln(X,Y);readln

end.

начало

ввод X, Y

X>Y

C := XX := YY := C

вывод X, Y

конец

Да

Page 30: Основы программирования в  Pascal

Программирование ветвленийЗадача 3. Найти наибольшее значение среди трех величин, вводимых с клавиатуры.

Вариант 1 Вариант 2

начало

ввод а,в,с

a>b

max := a max := b

c>max

max := c

вывод max

конец

начало

ввод а,в,с

a>b

вывод max

конец

a>с

max := a max := c

b>c

max := b max := c

Да

Да

Да

Да Да

Page 31: Основы программирования в  Pascal

Программирование ветвлений

Program BIT1;Var

a,b,c,max : real;Begin

readln(a,b,c); If a > b

then max := aelse max := b;

If c > maxthen max := c;

writeln(‘max=‘,max:7:2);readln

end.

Задача 3. Найти наибольшее значение среди трех величин, вводимых с клавиатуры.

Вариант 1

Program BIT2;Var

a,b,c,max : real;Begin

readln(a,b,c); If a > b

then If a > cthen max := aelse max := c

else If b > cthen max := belse max := c

writeln(‘max=‘,max:7:2);readln

end.

Вариант 2

Page 32: Основы программирования в  Pascal

Логические выражения в Паскале

Program BIT3;Var

a,b,c,max : real;Begin

readln(a,b,c); If (a >= b) and (a >= c)

then max := a; If (b >= a) and (b >= c)

then max := b; If (c >= a) and (c >= b)

then max := c;writeln(‘max=‘,max:7:2);readln

end.

Задача 3. Найти наибольшее значение среди трех величин, вводимых с клавиатуры.

Вариант 3

Page 33: Основы программирования в  Pascal

Домашнее задание

Задачник 1 § 4.4.2

Задача 1. Дано трёхзначное число. Определить, является ли оно палиндромом.

Задача 2. Даны две точки А(X1,Y1) и B(X2,Y2). Определить, какая из точек лежит ближе к началу координат.

Задача 3. Упорядочить значения трех целых чисел, вводимых с клавиатуры, по возрастанию (a<b<c).

Задача 4. Решить уравнение вида: ax+b=0

Задача 5. Решить уравнение вида: ax²+bx+c=0

Page 34: Основы программирования в  Pascal
Page 35: Основы программирования в  Pascal

Решение задач

Program sort;Var

a,b,c,x : integer;Begin

readln(a,b,c); writeln(a:4,b:4,c:4); If a > b

then begin x := a; a := b; b := x end; If b > c

then begin x := b; b := c; c := x end; If a > b

then begin x := a; a := b; b := x end; writeln(a:4,b:4,c:4);readln

end.

Задача 4. Упорядочить значения трех целых чисел, вводимых с клавиатуры, по возрастанию (a<b<c).

Page 36: Основы программирования в  Pascal

Решение задач

Program z5;Var

a,b,x : real;Begin

readln(a,b); write(‘x=’); readln(x); If (x >= a) and (x <= b)

then writeln(‘yes’)else writeln(‘no’);

readlnend.

Задача 5. Определить, принадлежит ли точка Х отрезку [a;b].

Анализ решения задачи:

Х должна удовлетворять неравенству: (X>=a) и (X<=b)

Page 37: Основы программирования в  Pascal

Решение задач

Program z6;Var

a,y : real;Begin

write(‘a=’); readln(a); If (a = 0) or (a = 9)

then writeln(‘выражение не имеет действительного значения’)else begin y:=5/(a(a-9)); writeln(‘y=’,y:5:2) end;

readlnend.

Задача 6. Написать программу вычисления значения выражения: y=5/(a(a-9))

Анализ решения задачи:

Если знаменатель равен 0, то выражение не имеет действительного значения.

Page 38: Основы программирования в  Pascal

Решение задач

Program z7;Var

a,b,x : real;Begin

write(‘a=’); readln(a); write(‘b=’); readln(b);

If (a = 0)then writeln(‘уравнение смысла не имеет’)else begin x=-b/a; writeln(‘x=’,x:7:2) end;

readlnend.

Задача 7. Решить уравнение вида: ax+b=0

Анализ решения задачи:

a, b – вводятся с клавиатуры, х – корень уравнения, выводится на монитор.

Математическая формализация:

Если а=0, то вывод «уравнение смысла не имеет», иначе x=-b/a

Page 39: Основы программирования в  Pascal

Худой или полныйСчитается нормой если масса человека (в кг) равна его росту (в см) минус 100.Будем считать человека стройным, если отклонение его массы от этого критерия не превышает 5%, иначе полным или худым соответственно отклонению от нормы.Составить программу. Входные данные: масса и рост – действительные числа.Выходные данные: Текст – thin (худой), или optimum (нормальный), или fat (полный)

ЛягушкаЛягушка прыгает вдоль числовой оси от точки 0 до точки М, поворачивает и прыгает обратно до точки 0, поворачивает и т.д. Длина прыжков 1. Какова её координата K после N-го прыжка?Входная информация: M, N. Выходная информация: K

Page 40: Основы программирования в  Pascal

Оператор выбора

Page 41: Основы программирования в  Pascal

Решение задачи

Page 42: Основы программирования в  Pascal

Решение задачи

Page 43: Основы программирования в  Pascal

Порядковый номер дня в году

Вводятся число, месяц, год. Найти номер этого дня с начала года. При решении задачи учитывать разное количество дней в месяце, в том числе в високосные годы.

Самостоятельная работа

Page 44: Основы программирования в  Pascal
Page 45: Основы программирования в  Pascal

Циклические алгоритмыЦикл – многократное повторение последовательности действий по некоторому условию.

a) Цикл с предусловием (цикл типа пока)

Пока <условие> повторять

нц

<тело цикла>

кц

условие

да

нет

Тело цикла

While <условие> do

begin

<тело цикла>

end;

Page 46: Основы программирования в  Pascal

Циклические алгоритмы

b) Цикл c параметром (цикл типа для)

Для <параметр цикла> повторять

нц

<тело цикла>

кцда

нет

Тело цикла

For i:=1 to n do

begin

<тело цикла>

end;

Параметр цикла

Page 47: Основы программирования в  Pascal

Циклические алгоритмы

c) Цикл с постусловием

Повторять

<тело цикла>

Выполнено условие?

кц условие

да

нет

Тело цикла

Repeat

<тело цикла>

Until <условие>;

Page 48: Основы программирования в  Pascal

Решение задач (цикл типа пока)

Задача 1. Вычислить сумму натурального ряда чисел от 1 до N.

i<=N

да

нет

S:=S+ii:=i+1

Ввод N

i:=1S:=0

Program summa_1;

Var i,N,S:integer;

begin

Write(‘N=‘);

Readln(N);

i:=1; S:=0;

While i<=N do

begin

S:=S+i;

i:=i+1

end;

Writeln(‘Summa=‘,S)

end.конец

начало

Вывод S

Page 49: Основы программирования в  Pascal

Решение задач (цикл типа пока)Задача 1. Вычислить сумму натурального ряда чисел от 1 до N.

Program summa_1;

Var i,N,S:integer;

begin

Write(‘N=‘);

Readln(N);

i:=1; S:=0;

While i<=N do

begin

S:=S+I;

i:=i+1

end;

Writeln(‘Summa=‘,S)

end.

N i S

4 1 0

2 1

3 3

4 6

5 10

10

Page 50: Основы программирования в  Pascal

Решение задач (цикл типа для)

Задача 1. Вычислить сумму натурального ряда чисел от 1 до N.

да

нет

S:=S+i

Ввод N

S:=0

Program summa_2;

Var i,N,S:integer;

begin

Write(‘N=‘);

Readln(N);

S:=0;

for i:=1 to N do

S:=S+i;

Writeln(‘Summa=‘,S)

end.

конец

начало

Вывод S

i:=1;N

Page 51: Основы программирования в  Pascal

Решение задачЗадача 2. Дано N карточек, на которых написаны разные буквы. Сколько различных N-буквенных слов можно составить из этих карточек?

1. Анализ задачи

N – число целого типа, вводится с клавиатуры

F – искомое число целочисленного типа, которое выводится на экран монитора

2. Математическая формализация

Page 52: Основы программирования в  Pascal

Решение задачЗадача 2. Дано N карточек, на которых написаны разные буквы. Сколько различных N-буквенных слов можно составить из этих карточек?

3. Построение алгоритма:

да

F:=F*i

Ввод N

F:=1

конец

начало

Вывод F

i:=1;N

Page 53: Основы программирования в  Pascal

Решение задачЗадача 2. Дано N карточек, на которых написаны разные буквы. Сколько различных N-буквенных слов можно составить из этих карточек?

4. Составление программы:

Program Words;

Var i,N,F:integer;

begin

Write(‘N=‘); Readln(N);

F:=1;

for i:=1 to N do

F:=F*i;

Writeln(F)

end.

Page 54: Основы программирования в  Pascal

1. Анализ задачи

M, N – число целого типа, вводится с клавиатуры

NOD – искомое число целочисленного типа, которое выводится на экран монитора

2. Математическая формализация

Алгоритм Евклида

Задача 3. Составить программу определения наибольшего общего делителя (НОД) двух натуральных чисел.

Если M>N, то НОД(M, N) = НОД(M-N, N)

НОД(N, N) = N

M

N

32

24

8

24

8

16

8

8

Page 55: Основы программирования в  Pascal

Алгоритм Евклида

Задача 2. Составить программу определения наибольшего общего делителя (НОД) двух натуральных чисел.

Page 56: Основы программирования в  Pascal

Алгоритм Евклида

Задача 2. Составить программу определения наибольшего общего делителя (НОД) двух натуральных чисел.

Page 57: Основы программирования в  Pascal

Домашнее задание

Задачник 1 § 4.4.3

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

Задача 2. Написать программу вычисления среднего арифметического n слагаемых вида: x + i где x – данное число а i меняется от 1 до n

Задача 3. Написать программу вычисления произведения n слагаемых видаn - k где n – данное число а k меняется от 0 до n - 1

Задача 4. Одноклеточная амеба каждые 3 часа делится на 2 клеткиОпределить сколько амеб будет через N часов при условии что N – кратна 3

Page 58: Основы программирования в  Pascal
Page 59: Основы программирования в  Pascal

Повторение пройденного материала

«Плоскость»

Даны действительные числа x, y (x*y<>0.). Необходимо определить расположение точки с координатами (x, y) на координатной плоскости и вывести на печать номер четверти координатной плоскости, в которой находится эта точка.

В решении задачи необходимо предусмотреть фильтр, отсекающий нулевые значения: (x<>0) and (y<>0).

Логические условия для определения расположения точки на координатной плоскости:

if (x>0) and (y>0) then p:=1;if (x<0) and (y>0) then p:=2;if (x<0) and (y<0) then p:=3;if (x>0) and (y<0) then p:=4;

Page 60: Основы программирования в  Pascal

Разбор олимпиадных задач

«Простые» числа

Дан набор различных натуральных чисел. Будем называть число «простым для заданного набора», если число не делится ни на одно из чисел набора, кроме самого себя.

Вводится целое число N (1<=N<=100)– количество чисел в наборе и N различных целых чисел от 1 до 1000000, разделенных пробелами.

Вывести «простые для заданного набора» числа, разделяя числа одним пробелом. Числа выводятся в том порядке, в котором они вводились с клавиатуры.

Page 61: Основы программирования в  Pascal

«Простые» числа (решение)

var N,i,j:integer; A:array [1..100] of longint;

flg:boolean;begin

read(N); for i:=1 to N do read(A[i]);

for i:=1 to N do begin flg:=true; for j:=1 to N do if (i<>j) and (A[i] mod A[j]=0)

then flg:=false; if flg

then write(A[i]); end;end.

Page 62: Основы программирования в  Pascal

Разбор олимпиадных задач

«Иван - царевич»

Было у царя три сына. Двоих царь удачно женил на боярской да купеческой дочерях, а с младшим Иваном всё никак не ладилось. То в болоте стрела увязнет, а то и вовсе у лягушки окажется. Пока царевич эту стрелу отыщет, время-то бежит. Царь-то пока сын стрелы ищет, успел и науки всякие изучить и решил применить научный подход к поиску невесты сыну. Сказал он ему теперь пускать за один-то раз не одну стрелу, а сразу несколько. При этом царь задавал сыну следующие условия: Первую-то стрелу можно пускать куда глаза глядят, а вот последующие стрелы должны отклоняться от первоначального направления строго на заданный царем угол отклонения стрелы (0<α<180). При этом для экономии стрел царь категорически запретил Ивану-царевичу пускать стрелы повторно в одном и том же направлении.

Написать программу, которая по заданному царем углу отклонения стрелы определит максимальное количество стрел, которые может пустить Иван-царевич за один раз, соблюдая требования царя.

Page 63: Основы программирования в  Pascal

«Иван - царевич» (решение)

var i,k,ugol,b: integer; strela: array[0..359] of integer;begin readln (ugol); strela[0]:= 1; b:=ugol;

while strela[ugol] = 0 dobegin

strela[ugol]:= 1; ugol:= (ugol+ b) mod 360;

end;k:= 0;for i:=0 to 359 do

begin if strela[i]=1 then k:=k+1; end; writeln(k);end.

Page 64: Основы программирования в  Pascal

Решение задач

В интервале [2,n] найти натуральное число с максимальной суммой делителей.

Page 65: Основы программирования в  Pascal

Домашнее задание

Задачник 1 § 4.4.3

Задача 1. Определить, является ли число, введенное с клавиатуры простым.

Задача 2. Найти все простые числа в интервале от M до N.

Задача 3. Подсчитать количество нечетных цифр в записи натурального числа N.

Page 66: Основы программирования в  Pascal
Page 67: Основы программирования в  Pascal

program prost; var i,n,s:integer;begin read(n); s:=0; for i:=1 to n do if n mod i=0 then s:=s+i; if s=(n+1) then writeln('n-простое число') else writeln('n не является простым числом');end.

Задача 1. Определить, является ли число, введенное с клавиатуры простым.

Решение задач

Page 68: Основы программирования в  Pascal

Задача 1. Определить, является ли число, введенное с клавиатуры простым.

Решение задач

program prostch;var a, i, s: integer;begin write ('введите число и программа определит является ли оно простым: '); readln (a); s:= 0; for i:= 1 to a div 2 do if a mod i=0 then s:=s+i; if s=1 then writeln ('является') else writeln ('не является');end.

Page 69: Основы программирования в  Pascal

Решение задачЗадача 2. Найти все простые числа в интервале от M до N.

program interval;var M, N, s,i,k: integer;begin write ('введите начальную и конечную координату интервала (через пробел) и программа найдет все числа на этом интервале: '); readln (M,N); For i:=M to N do begin s:=0; for k:= 1 to i div 2 do if i mod k =0 then s:=s+k; if s=1 then write (i,', '); end;end.

Page 70: Основы программирования в  Pascal

Решение задач

Задача 3. Подсчитать количество нечетных цифр в записи натурального числа N.

program nechet;var a,s:integer;begin writeln('введите число и программа определит сколько в нем

нечетных цифр'); readln(a); while a>0 do begin if (a mod 10) mod 2 > 0 then s:=s+1; a:=a div 10; end; write ('количество нечетных цифр: ',s);end.

Page 71: Основы программирования в  Pascal

Решение задач

Задача 1. Вычислить сумму первых n элементов знакочередующегося степенного ряда:

!)1(...

!3!2!11S

32

n

xxxx nn

Page 72: Основы программирования в  Pascal

Решение задач

Задача 2. Определить, существует ли натуральное четырехзначное число, равное четвертой степени суммы своих цифр.

Задача 3. Вывести все числа Фибоначчи, не превосходящие заданного числа N. (числа Фибоначчи: 1, 1, 2, 3, 5, 8, 13, 21, 34 . . .)

Задача 4. «Быстрое возведение в степень»При возведении числа в степень только с помощью операции

умножения, ее можно использовать минимальное количество раз. Например, чтобы вычислить число a в десятой степени, можно найти a*a*a*a*a*a*a*a*a*a (9 умножений) или найти b=a*a*a (a3), c=b*b*b (a9), d=c*a (a10) (5 умножений).

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

Page 73: Основы программирования в  Pascal
Page 74: Основы программирования в  Pascal

Решение задачЗадача 1. Определить, существует ли натуральное четырехзначное число, равное четвертой степени суммы своих цифр.

program chlo;var s,a1,a2,a3,a4,i: integer;begin

s:=0; write ('четырехзначное число, равное 4 степени суммы своих цифр - '); for i:=1000 to 9999 do begin a1:= i div 1000; a2:= i mod 1000 div 100; a3:= i mod 100 div 10; a4:= i mod 10; if (sqr(a1+a2+a3+a4)*sqr(a1+a2+a3+a4))=i then begin s:=s+1; writeln (i) end; end; if s=0 then write ('не существует');end.

Page 75: Основы программирования в  Pascal

Решение задачЗадача 2. Вывести все числа Фибоначчи, не превосходящие заданного числа N. (числа Фибоначчи: 1, 1, 2, 3, 5, 8, 13, 21, 34 . . .)

program fibonachi;var F0,F1,n,x: integer;begin

readln(n); F0:=1; write(F0, ' ');

F1:=1; while F1 <= n do begin x := F0; F0 := F1; write(F0, ' '); F1 := x + F0; end;end.

Page 76: Основы программирования в  Pascal

Решение задач

Задача 3. «Быстрое возведение в степень»При возведении числа в степень только с помощью операции

умножения, ее можно использовать минимальное количество раз. Например, чтобы вычислить число a в десятой степени, можно найти a*a*a*a*a*a*a*a*a*a (9 умножений) или найти b=a*a*a (a3), c=b*b*b (a9), d=c*a (a10) (5 умножений).

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

Page 77: Основы программирования в  Pascal

Решение задач

program umnozh;var n,k,s:integer;begin Write('n='); readln(n); k := n; s := 0; While k >= 1 do begin If k mod 2 = 1 then k := k - 1 else k := k div 2; s := s + 1 end; Writeln(s)end.

Page 78: Основы программирования в  Pascal

Домашнее задание

ЭОР http://whiteschool.ru/ http://school-collection.edu.ru/

Информатика и ИКТ - Цифровые (электронные) образовательные ресурсы

ЦОР к курсу И.Г.Семакина «Информатика и ИКТ», 9 класс

Глава 6 § 39, 40 Практические работы № 23, 24, 25

http://school-collection.edu.ru/

Page 79: Основы программирования в  Pascal

Практическое задание №231 уровень сложности

1.Разработать схему алгоритма, который запрашивает N произвольных целых чисел и ищет их сумму. Число N вводится с клавиатуры.

2.Разработать схему алгоритма для вычисления суммы ряда:

NS

1...

4

1

3

1

2

11

Число N вводится с клавиатуры.3.Одноклеточная амёба каждые три часа делится на 2 клетки. Разработать

схему алгоритма для определения, сколько амёб будет через N час.4.Дано натуральное число N и действительное число x. Разработать

схему алгоритма для вычисления суммы ряда:sin x + sin 2x+sin 3x+…sin N*X

Протестировать алгоритм для x=1.5 и N=3. Проверить правильность ответа на калькуляторе.

5.Разработать схему алгоритма для вычисления N-ой степени числа a (aN). Протестировать алгоритм для а) a=3 и N=4, б) a=2 и N=5.

Page 80: Основы программирования в  Pascal

1. Начав тренировки, спортсмен в первый день пробежал 10 км. Каждый день он увеличивал дневную норму на 10% нормы предыдущего дня. Какой суммарный путь пробежит спортсмен за N дней? Разработать схему алгоритма для решения этой задачи. Протестировать алгоритм для N=3 и N=7.

2. Ежемесячная стипендия студента составляет A рублей в месяц, а расходы на проживание превышают стипендию и составляют B рублей в месяц. Рост цен ежемесячно увеличивает расходы на 3%. Разработать схему алгоритма для расчёта необходимой суммы денег, которую надо единовременно попросить у родителей, чтобы можно было прожить учебный год (10 месяцев), используя только эти деньги и стипендию. Протестировать алгоритм для следующих исходных данных:

а) A=1000, B=1100б) A=900, B=1000в) A=600, B=12003. Разработать схему алгоритма для нахождения всех делителей

натурального числа N. Протестировать алгоритм для N=10, N=75, N=99, N=13.

Практическое задание №232 уровень сложности

Page 81: Основы программирования в  Pascal

Практическое задание №233 уровень сложности

1. Дано натуральное число N. Разработать схему алгоритма для вычисления суммы ряда: S=1!+2!+3!+…+N! (N>1)

2. Покупатель должен заплатить в кассу S рублей. У него имеются монеты в 1, 2 и 5 рублей, а также купюры достоинством в 10, 50, 100 и 500 рублей (достаточное количество). Сколько монет и купюр разного достоинства отдаст покупатель, если он начинает платить с самых крупных? Операции целочисленного деления (div и mod) использовать нельзя. Разработать схему алгоритма для решения этой задачи.

3. Даны натуральное a и действительное x. Разработать схему алгоритма для вычисления суммы ряда:

sin x+sin x²+sin x³+…+sin xª

Page 82: Основы программирования в  Pascal
Page 83: Основы программирования в  Pascal

Массивы

1. Одномерные массивы

2. Двумерные массивы

Page 84: Основы программирования в  Pascal

Одномерные массивыОдномерный массив – пронумерованная конечная последовательность однотипных величин a[i]

(a[1], a[2], … , a[i], … , a[n])

Алг ввод массива

Вещ таб a[1:10]

Цел i

Нач

для i от 1 до 10 повторять

нц

вывод (“a[“,i,”]=“)

ввод (a[i])

кц

кон

да

нетi:=1, 10

Ввод a[i]

Program massiv;

Const n=10;

Var a:array[1..n] of real;

i:integer;

Begin

For i:=1 to n do

begin

write(‘a[‘,i,’]=‘);

readln(a[i])

end

End.

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

Page 85: Основы программирования в  Pascal

Вычисление суммы элементов одномерного массива

Program sum;

Uses crt;

Const n=7;

Var a:array[1..n] of real; i:integer; s: real;

Begin

clrscr;

For i:=1 to n do

begin

write(‘a[‘,i,’]=‘);

readln(a[i])

end;

s:=0;For i:=1 to n do

s:=s+a[i]; writeln;write(‘sum=‘,s);readln

end.

Page 86: Основы программирования в  Pascal

Вычисление суммы элементов одномерного массива (вариант 2)

Program sum;

Uses crt;

Const n=7;

Var a:array[1..n] of real; i:integer; s: real;

Begin

clrscr; s:=0;

For i:=1 to n do

begin

write(‘a[‘,i,’]=‘); readln(a[i]);

s:=s+a[i];

end;writeln; write(‘sum=‘,s); readln

end.

Page 87: Основы программирования в  Pascal

Нахождение наибольшего элемента одномерного массива

(массив сформирован случайным образом из чисел в диапазоне от 0 до 9)

Program maximum;

Uses crt;

Const n=10;

Var a:array[1..n] of integer; max, i : integer;

Begin

clrscr; randomize; For i:=1 to n do begin a[i] := random(10); write(a[i]:3) end;writeln;

max:=a[1]; For i:=2 to n do

if max < a[i]then max := a[i];

write(‘max=‘,max);readln

end.

Page 88: Основы программирования в  Pascal

Нахождение порядкового номера наибольшего элемента одномерного массива

Program maximum;

Uses crt;

Const n=10;

Var a:array[1..n] of integer; max, kmax, i : integer;

Begin

clrscr; randomize; For i:=1 to n do begin a[i] := random(10); write(a[i]:3) end;writeln;

max:=a[1]; For i:=2 to n do

if max < a[i]then kmax := i;

write(‘kmax=‘,kmax);readln

end.

(массив сформирован случайным образом из чисел в диапазоне от 0 до 9)

Page 89: Основы программирования в  Pascal

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

Задача 2. Массив сформирован случайным образом из целых чисел в диапазоне от 0 до 10. Определить, входит ли число X в массив и какое количество раз.

Задача 3. Массив сформирован случайным образом из целых чисел в диапазоне от -10 до 10. Определить, входит ли число X в массив и какое количество раз.

Page 90: Основы программирования в  Pascal

Поиск элемента в массиве

Program poisk;

Uses crt;

Const n=10;

Var a:array[1..n] of real; x:real; m,i:integer;

Begin

clrscr;

For i:=1 to n do

begin

write(‘a[‘,i,’]=‘);

readln(a[i])

end;

write(‘X=‘); readln(x);m:=0;

For i:=1 to n doif x = a[i]

then m := i;if m = 0

then writeln(‘No‘)else writeln(m)

readln end.

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

Page 91: Основы программирования в  Pascal

Поиск элемента в массиве

Program poisk;

Uses crt;

Const n=10;

Var a:array[1..n] of integer; x,m,i:integer;

Begin

clrscr; randomize;

For i:=1 to n do

begin

a[i] := random(21)-10;

write(a[i]:3)

end;

writeln;

write(‘X=‘); readln(x);m:=0;

For i:=1 to n doif x = a[i]

then m := m+1;if m = 0

then writeln(‘No‘)else writeln(‘m=‘,m);

readln end.

Задача 2. Массив сформирован случайным образом из целых чисел в диапазоне от -10 до 10. Определить, входит ли число X в массив и какое количество раз.

Page 92: Основы программирования в  Pascal
Page 93: Основы программирования в  Pascal

Сортировка массива

A[1] A[2] A[3] A[i] A[n-1] A[n]

1 цикл A[1] сравнивается с A[2], A[3] … A[i], … A[n]

2 цикл A[2] сравнивается с A[3], A[4] … A[i], … A[n]

……………………………………………………………………………

i цикл A[i] сравнивается с A[i+1], A[i+2] … A[n]

j J+1

For i:=1 to n-1 doFor j:=i+1 to n do

if A[i] > A[j] then begin C := A[i];

A[i] := A[j]; A[j] := C end;

… …

Page 94: Основы программирования в  Pascal

Сортировка массива

Program sort;

Uses crt;

Const n=10

Var a:array[1..n] of integer; c,i:integer;

Begin

clrscr; randomize;

For i:=1 to n do

begin

a[i] := random(10);

write(a[i]:3)

end;

writeln;

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;

For i:=1 to n dowrite(a[i]:3);

readlnend.

Задача 3. Массив сформирован случайным образом из целых чисел в диапазоне от 0 до 10. Отсортировать его элементы в порядке возрастания значений.

Page 95: Основы программирования в  Pascal

Задания для практической работы

Задача 2. Для каждого месяца определить и вывести на экран отклонение его средней температуры от среднегодовой величины.

Задача 3. Написать программу получения из заданного целочисленного массива размером 10 элементов, сформированном случайным образом из элементов в диапазоне от -10 до +10, другого массива, который будет содержать модули значений элементов первого массива (не используя специальной функции, вычисляющей модуль числа) и отсортировать его в порядке убывания.

Задача 1. Вычислить среднегодовую температуру по известным среднемесячным значениям.

Page 96: Основы программирования в  Pascal

Задание для практической работыЗадача 4. Дан целочисленный массив из 30 элементов.

Элементы массива могут принимать целые значения от 0 до 100 – баллы учащихся выпускного класса за итоговый тест по информатике. Для получения положительной оценки за тест требовалось набрать не менее 20 баллов. Напишите программу, которая позволяет найти и вывести минимальный балл среди учащихся, получивших за тест положительную оценку. Известно, что в классе хотя бы один учащийся получил за тест положительную оценку.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Page 97: Основы программирования в  Pascal

Решение задачи 1

T [1], T [2], … , T [i], … , T [12]– среднемесячные значения температур, которые вводятся с клавиатуры (массив

переменных величин вещественного типа, вводимый с клавиатуры посредством цикла)

Tsred – среднегодовое значение температуры (переменная величина вещественного типа)

Чтобы сэкономить ячейки памяти компьютера, в ячейке Tsred первоначально будем хранить значение суммы ежемесячных температур.

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

Построим алгоритм решения данной задачи в виде блок-схемы:

Задача 4. Вычислить среднегодовую температуру по известным среднемесячным значениям.

Page 98: Основы программирования в  Pascal

Решение задачи

Program temperature;

Var T: array[1..12] of real;

i: integer; Tsred: real;

Begin

For i:=1 to 12 do

begin

write(‘T[‘,i,’]=‘); readln(T[i])

end;

Tsred:=0;

For i:=1 to 12 do

Tsred:=Tsred+T[i];

Tsred:=Tsred/12;

writeln(‘Tsred = ‘,Tsred:6:2)

End.

начало

i:=1; 12

Ввод T[i]

Tsred:=Tsred+T[i];

Tsred:=0

i:=1; 12

Tsred:=Tsred/12

конец

Вывод Tsred

Page 99: Основы программирования в  Pascal
Page 100: Основы программирования в  Pascal

Задание для практической работыЗадача 5. Дан целочисленный массив из 10 элементов. Элементы

массива могут принимать значения от 0 до 1000. Напишите программу, которая позволяет подсчитать и вывести среднее арифметическое элементов массива, имеющих нечетное значение. Гарантируется, что в исходном массиве хотя бы один элемент имеет нечетное значение.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

constN=10;

vara: array [1..N] of integer;i, x, y: integer;s: real;

Page 101: Основы программирования в  Pascal

Задание для практической работыЗадача 6. Дан целочисленный массив из 10 элементов. Элементы

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

минимальное значение среди элементов массива, которые имеют чётное значение и не делятся на три. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого чётно и не кратно трем. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

constN=10;

vara: array [1..N] of integer;i, j, min: integer;

Page 102: Основы программирования в  Pascal

Задание для практической работыЗадача 7. Дан целочисленный массив из 10 элементов. Элементы

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

произведение элементов массива, которые имеют нечётное значение и делятся на 3. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого нечётно и кратно 3.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

constN=10;

vara: array [1..N] of integer;i, j, p: integer;

Page 103: Основы программирования в  Pascal

Задания для практической работыЗадача 8. В заданном одномерном массиве поменять местами

соседние элементы, стоящие на чётных местах, с элементами стоящими на нечетных.

Задача 9. Определить, является ли одномерный массив монотонно убывающим или монотонно возрастающим.

Задача 10. Число является простым для данного диапазона, если оно не делится ни на одно из чисел этого диапазона. Найти все простые для данного диапазона [a, b] числа, входящие в массив. Массив формируется случайным образом.

Page 104: Основы программирования в  Pascal

Решения задачЗадача 8. В заданном одномерном массиве поменять

местами соседние элементы, стоящие на чётных местах, с элементами стоящими на нечетных.

uses crt;const n=10;var a:array[1..n] of integer; i,c:integer;begin clrscr; begin for i:=1 to n do read(a[i]); end;

writeln;

for i:=1 to n do begin if i mod 2=0 then begin c:=a[i]; a[i]:=a[i-1]; a[i-1]:=c end; end; for I:=1 to n do write(a[i]:3);end.

Page 105: Основы программирования в  Pascal

Решения задачЗадача 8. В заданном одномерном массиве поменять

местами соседние элементы, стоящие на чётных местах, с элементами стоящими на нечетных.

uses crt;const n=10;var a:array[1..n] of integer; i,c:integer;begin clrscr; begin for i:=1 to n do read(a[i]); end;

writeln;

for i:=1 to n div 2 do begin write(a[i*2]:2); write(a[i*2-1]:2) end;end.

Page 106: Основы программирования в  Pascal

Решения задачЗадача 9. Определить, является ли одномерный массив

монотонно убывающим или монотонно возрастающим.

c:=0; k:=0;for i:=1 to n-1 do begin if a[i]>a[i+1] then c:=c+1; if a[i]<a[i+1] then k:=k+1; end;if k=n-1 then write('массив монотонно возрастающий');

if c=n-1 then write('массив монотонно убывающий');

if (k<>n-1) or (c<>n-1) then write('массив не является монотонно убывающим или возрастающим');

end.

Page 107: Основы программирования в  Pascal

Решения задачЗадача 9. Определить, является ли одномерный массив

монотонно убывающим или монотонно возрастающим.

f:=0; for i:=2 to n do if a[i]>a[i-1] then f:=f+1; if f=0 then write ('массив монотонно убывающий'); if f=n-1 then write ('массив монотонно возрастающий');end.

Page 108: Основы программирования в  Pascal

Решения задачЗадача 10. Число является простым для данного диапазона, если

оно не делится ни на одно из чисел этого диапазона. Найти все простые для данного диапазона [a, b] числа, входящие в массив. Массив формируется случайным образом. (a>0; b>0; a<b)

var m:array[1..n] of integer; i,f,a,b:integer; g,l:boolean;begin randomize; g:=false; writeln('задайте диапазон'); readln(a,b); for i:= 1 to n do begin m[i]:=random(b-a+1)+a; write(m[i]:3) end; writeln;

for i :=1 to n do begin l:=true; for f:=1 to n do if (f<>i) and (m[f]<>0) then if m[i] mod m[f]=0 then l:=false; if l then begin write(m[i]:3); g:=true end;end;if g=false then write('таких чисел нет');end.

Page 109: Основы программирования в  Pascal
Page 110: Основы программирования в  Pascal

Двумерные массивы (таблицы)Таблица B, состоящая из n строк и m столбцов, называется двумерным массивом размерностью [n,m]:

b[1,1] b[1,2] … b[1,j] … b[1,m]

b[2,1] b[2,2] … b[2,j] … b[2,m]

… … … … … …

b[i,1] b[i,2] … b[i,j] … b[i,m]

… … … … … …

b[n,1] b[n,2] … b[n,j] … b[n,m]

Page 111: Основы программирования в  Pascal

Program mas2;

Uses crt;

Const n=3; m=4;

Var b:array[1..n,1..m] of integer; i,j:integer;

Begin

clrscr; randomize;

For i:=1 to n do

begin

For j:=1 to m do begin

b[i,j] := random(10);

write(b[i,j]:3) end;

writeln

end;

end.

Формирование элементов двумерного массива, размером 3Х4 из целых чисел в диапазоне от 0 до 9:

Двумерные массивы (таблицы)

нач

i:=1,n

j:=1,m

вывод b[i,j]

b[i,j] := random(10);

Page 112: Основы программирования в  Pascal

Двумерные массивы (таблицы)Задача 1. Найти наибольшие элементы каждой строки таблицы.

b[1,1] b[1,2] … b[1,j]

b[2,1] b[2,2] … b[2,j]

… … … …

b[i,1] b[i,2] … b[i,j]

Пусть дана таблица: Массив результатов:

a[1]

a[2]

a[i]

Page 113: Основы программирования в  Pascal

Program max2;

Uses crt;

Const n=3; m=4;

Var b:array[1..n,1..m] of integer; a:array[1..n] of integer; i,j:integer;

Begin

clrscr; randomize;

For i:=1 to n do

begin

For j:=1 to m do begin

b[i,j] := random(10);

write(b[i,j]:3) end;

writeln

end;

For i:=1 to n do

begin

a[i]:=b[i,1];

For j:=2 to m do

if a[i]<b[i,j]

then a[i]:=b[i,j]

end;

For i:=1 to n do

writeln(a[i,j])

end.

Задача 1. Найти наибольшие элементы каждой строки таблицы.

Page 114: Основы программирования в  Pascal

Двумерные массивы (таблицы)Задача 2. Найти сумму элементов столбцов таблицы.

b[1,1] b[1,2] … b[1,j]

b[2,1] b[2,2] … b[2,j]

… … … …

b[i,1] b[i,2] … b[i,j]

Пусть дана таблица:

Массив результатов: s[1] s[2] … s[j]

Page 115: Основы программирования в  Pascal

Program max2;

Uses crt;

Const n=3; m=4;

Var b:array[1..n,1..m] of real; s:array[1..m] of real; i,j:integer;

Begin

clrscr;

For i:=1 to n do

begin

For j:=1 to m do

read(b[i,j]);

writeln

end;

For j:=1 to m do

begin

s[j]:=0;

For i:=1 to n do

s[j]:=s[j]+b[i,j]

end;

For j:=1 to m do

write(s[j]:6:2)

end.

Задача 2. Найти сумму элементов столбцов таблицы (массив вещественных чисел вводится с клавиатуры)

Page 116: Основы программирования в  Pascal

Задача 3. Найти минимальные значения столбцов таблицы.

Задача 4. Найти средние арифметические значения элементов строк двумерного массива.

Задача 5. Вычислить сумму элементов главной диагонали квадратной матрицы.

Задача 6. Определить, является ли данная квадратная матрица магическим квадратом (элементы квадратной матрицы, целые числа, вводятся с клавиатуры)

Задания для практической работы

Page 117: Основы программирования в  Pascal
Page 118: Основы программирования в  Pascal

Решения задачЗадача 3. Найти минимальные значения столбцов

таблицы.

for j:=1 to m do begin a[j]:=b[1,j]; for i:=2 to n do if a[j] > b[i,j] then a[j]:=b[i,j]; writeln ('мин. ',j,' столбца: ',a[j]:3) end;

Page 119: Основы программирования в  Pascal

Решения задачЗадача 4. Найти средние арифметические значения

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

for i:=1 to n do begin a[i]:=0; for j:=1 to m do a[i]:=a[i]+b[i,j]; a[i]:=a[i]/m; writeln ('ср.ариф. ',i,' строки: ',a[i]:3:2) end;

Page 120: Основы программирования в  Pascal

Решения задачЗадача 5. Вычислить сумму элементов главной

диагонали квадратной матрицы.

S:=0; for i:=1 to n do S:=S+b[i,i]; writeln ('сумма элементов главной диагонали = ',S);

Page 121: Основы программирования в  Pascal

Решения задачЗадача 6. Определить, является ли данная квадратная

матрица магическим квадратом (элементы квадратной матрицы, целые числа, вводятся с клавиатуры)

f:=true; for i:=1 to n do begin a[i]:=0; for j:=1 to m do a[i]:=a[i]+b[i,j]; end; for i:=2 to n do if a[i-1]<>a[i] then f:=false; for j:=1 to m do begin a[j]:=0; for i:=1 to n do a[j]:=a[j]+b[i,j]; end;

for j:=2 to m do if a[j-1] <> a[j] then f:=false;

d1:=0;d2:=0;

for i:=1 to n do begin d1:=d1+b[i,i]; d2:=d2+b[n+1-i,i]end;if d1<>d2 then f:=false;

if f then writeln('массив ЯВЛЯЕТСЯ магич.кв.') else writeln('массив НЕ ЯВЛЯЕТСЯ магич.кв.');

Page 122: Основы программирования в  Pascal
Page 123: Основы программирования в  Pascal

Двумерные массивы (таблицы)Задача 3. Переставить местами две строки в таблице.

b[1,1] b[1,2] b[1,3] b[1,4]

b[2,1] b[2,2] b[2,3] b[2,4]

b[3,1] b[3,2] b[3,3] b[3,4]

b[4,1] b[4,2] b[4,3] b[4,4]

Пусть дана таблица:

K –

L –

Page 124: Основы программирования в  Pascal

Перестановка строк двумерного массива

Program Obmen2;

Uses crt;

Const n=4; m=4;

Var b:array[1..n,1..m] of real;

c:real; i,j,k,L:integer;

Begin

clrscr; randomize;

For i:=1 to n do

begin

For j:=1 to m do begin

b[i,j] := random(10);

write(b[i,j]:3) end;

writeln

end;

write(‘k=‘); readln(k);

write(‘L=‘); readln(L);

For j:=1 to m do

begin

c:=b[k,j];

b[k,j]:=b[L,j];

b[L,j]:=c;

end; For i:=1 to n do begin

For j:=1 to m dowrite(b[i,j]:3);

writeln end;end.

Page 125: Основы программирования в  Pascal

Задача 7. В таблице найти строку с наибольшей и наименьшей суммой элементов. Вывести на экран найденные строки.

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

Задача 9. Дана таблица, состоящая из натуральных чисел. Определить количество «особых» элементов массива, считая его элемент особым, если он больше суммы остальных элементов его столбца.

Задания для практической работы

Page 126: Основы программирования в  Pascal
Page 127: Основы программирования в  Pascal

Задача 7. В таблице найти строку с наибольшей и наименьшей суммой элементов. Вывести на экран найденные строки.

Разбор задач

const n=6;m=4;var b:array [1..n,1..m] of

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

i,j,min,max,mini,maxi:integer;begin randomize; for i:=1 to n do begin a[i]:=0; for j:=1 to m do begin b[i,j]:=random(101); write(b[i,j]:3); a[i]:=a[i] + b[i,j]; end; writeln end;

min:=a[i];max:=0; mini:=1;maxi:=1; for i:= 1 to n do begin if a[i]>max then begin maxi:=i;max:=a[i] end; if a[i]<min then begin mini:=i;min:=a[i] end; end; write('наиб. сумма элементов в ',maxi,' строке: '); for j:=1 to m do write(b[maxi,j]:3); writeln; write('наим. сумма элементов в ',mini,' строке: '); for j:=1 to m do write(b[mini,j]:3); writeln;end.

Page 128: Основы программирования в  Pascal

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

положительных и отрицательных чисел.

Разбор задач

for i:=1 to n do begin a[i]:=0; for j:=1 to m do begin b[i,j]:=random(201)-100; write(b[i,j]:4); if (b[i,j] >=0) and (b[i,j] mod 2 = 0)

Then a[i]:=a[i] + b[i,j]; end; writeln end; for i:=1 to n do writeln(a[i]);end.

Page 129: Основы программирования в  Pascal

Задача 9. Дана таблица, состоящая из натуральных чисел. Определить количество «особых» элементов массива, считая его элемент особым, если он больше суммы остальных элементов его столбца.

Разбор задач

var b:array [1..n,1..m] of integer;

a:array [1..m] of integer; s:array [1..m] of integer; i,j,b:integer;begin clrscr;randomize; for i:=1 to n do begin for j:=1 to m do begin

b[i,j]:=random(101); write(b[i,j]:3); end; writeln end;

for j:=1 to m do begin a[j]:=0; for i:=1 to n do a[j]:=a[j]+b[i,j]; end; b:=0; for i:=1 to n do for j:=1 to m do if b[i,j] > (a[j]-b[i,j])

then begin inc(b); s[b]:=b[i,j] end; writeln('кол-во особых элементов: ',b); if b>0 then begin write('особые эл-ты: '); for j:=1 to o do write(s[j]:3 end;end.

Page 130: Основы программирования в  Pascal
Page 131: Основы программирования в  Pascal

Задача Перевод чисел из десятичной системы в систему счисления с основанием N (2<=N<=9).

Разбор задач районного конкурса ПиИТ (27.02.2013)

program perevod;uses crt;var a:array [1..100] of

integer; i,j,v,N,X:integer;begin clrscr; ReadLn(X); ReadLn(N);

i:=0; v:=X; While v>0 do begin inc(i); a[i]:=v mod N; v:=v div N end; for j:=i downto 1 do write (a[j]);end.

Page 132: Основы программирования в  Pascal

Задача №1 «Система счисления с максимальной суммой цифр»

Дано натуральное число N. Найти систему счисления с основанием k=2..16 с наибольшей суммой цифр (суммы цифр рассматривается в десятеричной арифметике) в представлении числа N.

Если систем счисления с таким максимальным свойством несколько, то вывести все значения оснований с таким максимальным свойством.

Разбор задач районного конкурса ПиИТ

Page 133: Основы программирования в  Pascal

Задача №1 «Система счисления с максимальной суммой цифр»

program olimp1;uses crt;var i:array [2..16] of integer; o:array [1..16] of integer; n,k,v,s,j:integer;begin clrscr; readln(n); for k:=2 to 16 do begin i[k]:=0;v:=n; while v>0 do begin i[k]:=i[k] + v mod k; v:=v div k end; end;

s:=0;j:=0; for k:=2 to 16 do if i[k]>s

then s:=i[k]; for k:=2 to 16 do if i[k] = s then begin inc(j); o[j]:=k end; write('основания '); for k:=1 to j do write(o[k]:3); writeln(' сумма ',s);end.

Page 134: Основы программирования в  Pascal

Задача №2 «Фибоначчиева система счисления» Теорема Цекендорфа утверждает, что любое натуральное число n

можно представить единственным образом в виде суммы чисел Фибоначчи:

где k1 >= k2+2, k2 >= k3+2, ... , kr >= 2

Отсюда следует, что любое число можно однозначно записать в фибоначчиевой системе счисления, например:

  

Перевод числа в фибоначчиеву систему счисления осуществляется простым "жадным" алгоритмом: просто перебираем числа Фибоначчи от больших к меньшим и, если некоторое   , то   входит в запись числа  , и мы отнимаем   от   и продолжаем поиск.

Надо написать программу для перевода натурального числа N в фибоначчиеву систему счисления.

Разбор задач районного конкурса ПиИТ

Page 135: Основы программирования в  Pascal

Разбор задач районного конкурса ПиИТ

ЧислоЗаписьв ФСС

0 0……0

F2=1 1

F3=2 10

F4=3 100

4 101

F5=5 1000

6 1001

7 1010

F6=8 10000

Page 136: Основы программирования в  Pascal

Задача №1 «Фибоначчиева система счисления»

program bif;uses crt;var a,b,c,j,n,i:longint; f:array [1..100] of longint; ind:array [1..100] of integer; begin clrscr; write ('chislo'); readln(n);

f[1]:=1; f[2]:=2; i:=2;

while f[i]<=n do begin i:=i+1; f[i]:=f[i-1]+f[i-2]; end;

for j:=1 to i do ind[j]:=0 ;

b:=i; a:=n;

while a>0 do begin while a< f[b] do

b:=b-1; ind[b]:=1;

a:=a-f[b]; end; write ('cod Fibonacchi='); for j:=i-1 downto 1 do write (ind[j]);end.

Page 137: Основы программирования в  Pascal

Задача №3 «Криптографические ключи» Недавно одна компания “X” разработала принципиально новый

алгоритм шифрования данных, который практически невозможно взломать, но и одновременно абсолютно не ресурсоемкий. Все шифрование строится на симметричном K-ключе, то есть на числе, в двоичной записи которого ровно K единиц. Все принципиальное отличие от предыдущих алгоритмов заключалось в том, что ключ не был одним и тем же на все время соединения, а менялся после некоторых определенных интервалов времени на другой K-ключ. Также одной из особенностей разработанного алгоритма была необходимость того, чтобы каждый следующее число, соответствующее K-ключу, было больше предыдущего. Более того, специалисты компании установили, что для увеличения помехоустойчивости разница между следующим K-ключом и предыдущим K-ключом должна быть минимальна. Под разницей K-ключей понимается абсолютная разница соответствующих им чисел.

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

Разбор задач районного конкурса ПиИТ

Page 138: Основы программирования в  Pascal

Задача №3 «Криптографические ключи»

Uses crt;var x,v,sum,summa : integer;begin clrscr; writeln('Vvodim chislo'); ReadLn(x); v:=x; sum:=0 ; While v>0 do begin sum:=sum+v mod 2; v:=v div 2 end;

summa:=sum; repeat x:=x+1; sum:=0; v:=x; While v>0 do begin sum:=sum+v mod 2; v:=v div 2; end; until summa=sum; writeln(x);end.

Page 139: Основы программирования в  Pascal
Page 140: Основы программирования в  Pascal

Символьные переменныеОдин символ занимает один байт памяти

Var X:char;

Var a:array[1..50] of char;

Ввод символьного массива:

For i:=1 to n doread(a[i])

Page 141: Основы программирования в  Pascal

Символьные переменныеЗадача 1: Слово, заданное как массив символов, записать в обратном порядке.

a[1] а[2] … а[i] … a[n-1] a[n]

b[1] b[2] … b[i] … b[n-1] b[n]

Для изменения индексов массива используется формула:

n – i + 1

Program z1;

Const n=15

Var a,b:array[1..n] of char; i:integer;

Begin

For i:=1 to n do

begin

read(a[i]);

b[n-i+1]:=a[i]

end;For i:=1 to n do

write(b[i])End.

Page 142: Основы программирования в  Pascal

Строки в ПаскалеСтрока – ограниченная апострофами последовательность символов

Длина строки – 255 символов

Var X:string[20];

Page 143: Основы программирования в  Pascal

Операции над строками1. Объединение строк

Var X,Y,Z:string[10];

Begin

X := ’тепло’;

Y := ’ход’;

Z := X + Y;

write(Z)

end.

Page 144: Основы программирования в  Pascal

Операции над строками2. Сравнение строк

a + b <> b + a

‘not’ > ‘no’

‘nod’ > ‘don’

‘Nod’ < ‘nod’

‘Дон’ > ‘Don’

‘Дон’ < ‘дон’

1. Цифры

2. Латинские буквы (заглавные)

3. Латинские буквы (строчные)

4. Русские буквы (заглавные)

5. Русские буквы (строчные)

Page 145: Основы программирования в  Pascal

Операции над строками2. Присваивание

Var Z:string[5];

Begin

Z := ’гор’ + ’ода’;

write(Z)

end.

город

Page 146: Основы программирования в  Pascal

Строковые функции1. Длина строки

Var Z:string[10];

Begin

Z := ’гор’ + ’ода’;

k := length(z);

write(k)

end.

Length (строковое выражение) – количество символов в строке

Page 147: Основы программирования в  Pascal

Строковые функции2. Копирование строки или ее части (вырезка)

Copy(‘информатика’,3,5)

copy (строковое выражение, начальный номер символа, количество символов)

‘форма‘

Page 148: Основы программирования в  Pascal

Строковые функции2. Копирование строки или ее части (вырезка)

Задача 2. Записать исходное слово наоборот.

Program z2;

Var x,y:string[10]; i:integer;

Begin

readln(x);

y:=‘ ‘;

For i:=1 to length(x) do

y := Copy(x,i,1)+y;write(y)

End.

Page 149: Основы программирования в  Pascal

Строковые функции3. Поиск подстроки в строке

pos(x,T)

pos (подстрока, исходная строка) – номер символа в исходной строке

Page 150: Основы программирования в  Pascal

Строковые функции4. Вставка в строку

insert(x,a,3)

insert (вставляемая строка, исходная строка, целочисленное выражение)Порядковый номер первой буквы вставляемой строки в новой строке

Page 151: Основы программирования в  Pascal

Строковые функции5. Удаление части строки

delete(T,3,2)

delete (строка, начальный номер, количество символов

Page 152: Основы программирования в  Pascal

Строковые функцииOrd(C) - функция определяет порядковый номер символа С в наборе символов

Chr(K) - функция определяет по порядковому номеру К символ, стоящий на К-ом месте в наборе символов.

Page 153: Основы программирования в  Pascal

Строковые функцииЗадача 3. Заменить букву ‘о’ на букву ‘и’ в слове форма.

Program z3;

Var x:string[10];

Begin

x:= ‘форма’;

insert(‘и’,x,2);

delete(x,3,1)write(x)

End.

Page 154: Основы программирования в  Pascal

Домашнее заданиеЗадача 1. Написать программу подсчета количества

появлений конкретного символа в заданном фрагменте текста.

Задача 2. Написать программу подсчета количества слов в тексте.

Задача 3. Определить, является ли текст, вводимый с клавиатуры палиндромом. При этом пробелы не учитывались бы (например: «а роза упала на лапу азора» -палиндром).

Задача 4. Разработать программу тестирования знаний учащихся.

Page 155: Основы программирования в  Pascal
Page 156: Основы программирования в  Pascal

Задача 1. Написать программу подсчета количества появлений конкретного символа в заданном фрагменте текста.

Разбор задач

var a,b:string; i,k:integer;begin

writeln('введите текст: '); readln(a); writeln('введите искомую букву - '); readln(b);

k:=0; for i:=1 to length(a) do if a[i]= b then inc(k); write('в этом тексте ',k,' букв ', b);end.

Page 157: Основы программирования в  Pascal

Задача 2. Написать программу подсчета количества слов в тексте.

Разбор задач

var a:string; i,b:integer; begin

readln(a); writeln(a);b:=1;

for i:=1 to length(a) do begin if a[i]=‘ ' then inc(b); end; write('в этом тексте ',b,' слов'); end.

а := ‘раз два три четыре - пять. Шесть семь, восемь!!’

if (a[i]='-') and (a[i-1]=' ') and (a[i+1]=' ') then b:=b-1

Page 158: Основы программирования в  Pascal

Задача 3. Определить, является ли текст, вводимый с клавиатуры палиндромом.

Разбор задач

program palind;var b,a,a1:string; i:integer;begin readln(a); a1:=a; b:=''; for i:=1 to length(a) do begin if (a[i]<>' ') then b:=a[i]+b; if (a1[i] = ' ') then delete(a1,i,1) end; if a1 = b then write('является палиндромом') else write('не является палиндромом');end.

Page 159: Основы программирования в  Pascal

Домашнее заданиеЗадача 5. Подсчитать количество цифр среди вводимых

с клавиатуры символов.

Задача 6. Преобразовать во вводимой с клавиатуры строке строчные латинские буквы в прописные.

Задача 7. Подсчитать сумму цифр, встречающихся в строке.

Задача 4*. Разработать программу тестирования знаний учащихся.