Методическое пособие для 9 классов Составители

Вид материалаМетодическое пособие

Содержание


Логический тип
Логические операции
Циклы с условием
Другой тип цикла с условием — цикл с постусловием
Пример: repeat
Цикл типа “Для” (цикл с параметром).
Do меняется на downto
Program Z_7
Program Z_8
Readln; End.
Program Z_9
Пример программы №10
Самостоятельная работа № 3 по теме
МАССИВ - это упорядоченный по номерам набор значений, объединенных общим типом и именем.
Виды массивов
Заполнение массива
Васильев Василий
Жиглов Глеб
Program Primer1_mas
Begin {**заполнение массива c клавиатуры **}
...
Полное содержание
Подобный материал:
1   2   3   4

Логический тип


Значения логического типа boolean занимают 1 байт и принимают одно из двух значений, задаваемых предопределенными константами True (истина) и False (ложь). Логический тип является порядковым.

В частности, False
 

Логические операции

К логическим относятся бинарные операции and, or и xor, а также унарная операция not, имеющие операнды типа boolean и возвращающие значение типа boolean.

Выражения с and и or вычисляются по "короткой схеме":

в выражении x and y если x ложно, то все выражение ложно, и y не вычисляется;
в выражении x or y если x истинно, то все выражение истинно, и y не вычисляется.


Примеры логических выражений:

 (x>=0)and(x<=10); (ch='y')or(ch='Y');

(x=5)or(y=1);

(x+1>0)and(x+1<10) or (y>0)and(y<2);.

 Поскольку в Паскале приоритеты операций and и or выше приоритета операций сравнения (равно, больше, больше или равно и т. д.), то использование скобок в данных выражениях является обязательным.

1.2.3. Циклический алгоритм

Структура цикл обеспечивает многократное выполнение некоторой совокупности действий, которая называется телом цикла.

Основные разновидности циклов представлены в таблице:

Школьный алгоритмический

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

Язык программирования Pascal

Циклы с условием
  1. Цикл типа «Пока»

Предписывает выполнять тело цикла до тех пор, пока выполняется условие, записанное после слова пока

нц пока (условие)

тело цикла

(последовательность действий)

кц




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

Если условие проверяется перед выполнением действий тела цикла, то такой цикл называют циклом с предусловием или циклом «пока» («повторять пока истинно условие»). В Pascal он выглядит следующим образом: while условие do оператор;

Пример:


нц пока i <= 5

S:= S+A[i]

i:= i+1

кц

Пример:

while a > 10 do

a := sqrt(a);


Такая запись обозначает: пока значение переменной a превосходит 10, из него следует извлекать квадратный корень. Предположим, что до начала цикла переменная имела значение 10000. Поскольку 10000 > 10, из него будет извлечен корень; переменная получит значение 100. С этим значением вновь проверяется условие повторения. 100 больше 10, поэтому квадратный корень извлекается еще раз; переменная получает значение 10. Опять проверяется условие, но на этот раз 10 не больше 10, значит цикл будет завершен, и компьютер перейдет к исполнению следующего оператора.




Школьный алгоритмический язык

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

Язык программирования Pascal
  1. Другой тип цикла с условием — цикл с постусловием «ДО» проверка условия происходит после выполнения операторов тела цикла.



последовательность действий

нц

пока (условие

(ЛВ - логическое выражение))

кц




Другой тип цикла с условием — цикл с постусловием, в котором проверка условия происходит после выполнения операторов тела цикла. Действия повторяются до того момента, когда условие станет истинным. Тело цикла выполняется хотя бы 1 раз. В Pascal он записывается следующим образом: repeat

операторы

until условие;

Пример:

repeat

write('Введите положительное число:');

readln(x);

until x > 0;

Этот фрагмент программы осуществляет ввод исходных данных с проверкой их корректности.

Запрос будет повторяться до тех пор, пока пользователь не введет значение, удовлетворяющее поставленному условию (в данном случае — положительное).



  1. Цикл типа “Для” (цикл с параметром).

Предписывает выполнять тело цикла для всех значений некоторой переменной

(параметра цикла) в заданном диапазоне.

Школьный алгоритмический язык

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

Язык программирования Pascal

нц для i от i1(начальное) до i2(конечное значение)

тело цикла

(последовательность действий)

кц






В тех случаях, когда количество посторенний известно заранее (до начала цикла), обычно бывает удобнее использовать цикл с параметром. Он выполняется следующим образом: переменная-параметр (её также называют счетчиком) принимает последовательные значения в заданных пределах и при каждом из них выполняются операторы тела цикла. В Pascal оператор цикла с параметром выглядит следующим образом:

Пример:

нц для i от 1 до 5

X[i] := i*i*i

Y[i] := X[i]/2

кц



for параметр:= начальное to конечное do оператор; либо

For i := 1 to N do тело цикла ;

В таком случае параметр будет увеличиваться на величину шага


Величина шага 1

for параметр := начальное downto конечное do оператор; либо

For i := N downto 1 do тело цикла ;

Если необходимо, чтобы значения параметра убывали, оператор немного изменяется. Do меняется на downto;

Величина шага – 1


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


При составлении программ с использованием циклов с параметром необходимо помнить следующее:

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

Параметры циклов в процедурах и функциях должны быть локальными переменными.

Пример 1:


for i := 1 to 20 do

writeln(i:3, i*i*i:5);



При выполнении этого фрагмента программы переменная i примет поочередно все значения от 1 до 20, при каждом из них на экран на отдельной строке (writeln) будет выводиться само это значение и его куб. В результате получится таблица кубов первых двадцати натуральных чисел. Чтобы значения выводились ровными колонками, в процедуре вывода указан формат (на значение переменной i отведено 3 позиции, для куба — 5).

Пример 2:

for c := 'z' downto 'a' do write(c);

Этот фрагмент программы выведет на экран английский алфавит в обратном порядке —от «z» до «a»:zyxwvutsrqponmlkjihgfedcba



Примеры программ циклической структуры:
  1. Цикл типа «Пока»
  1. Цикл с постусловием «ДО»
  1. Цикл типа “Для”

Пример программы №7

Написать программу, которая вычисляет наибольший общий делитель двух целых чисел


Program Z_7;

var

n1,n2,: integer; {числа НОД которых надо найти}

nod: integer; {наибольший общий делитель}

r: integer; {остаток от деления n1 на n2}

begin

write ('n1='); readln (n1);

write ('n2='); readln (n2);

while (n1 mod n2) < > 0 do

begin

r:=n1 mod n2; {остаток от деления}

n1:=n2;

n2:=r;

end;

nod:=n2;

writeln (nod=, ‘ чисел’, ‘ ’ ,n1, ,n2, ‘это’, nod);

Readln;

End.


Пример программы №8

Написать программу, которая вычисляет сумму и среднее арифметическое последовательности положительных чисел, которые вводятся с клавиатуры

Program Z_8;

var

а: integer; {число введенное с клавиатуры}

n: integer; {количество чисел}

s: integer; {сумма чисел }

m: real; {среднее арифметическое}

begin

s:=0;

n:=0;

repeat

write ('введите числа'); readln (a); {после ввода последнего числа введите 0}

s:=s+a;

n:=n+1;

until a<=0;

n:=n-1;

writeln (‘Введено чисел:’,n);

writeln (‘Cумма чисел=’,s);

m:=s/n;

writeln (‘Среднее арифметическое:’, ‘ ’ ,m:6:2); {Для завершения работы программы нажмите enter!}

Readln; End.

Пример программы №9

Написать программу, которая запрашивает имя пользователя и повторяет его на экране указанное число раз

Program Z_9;

var i,n:integer;

a: string;

begin

Writeln (‘Введите имя');readln(a);

Write('n='); readln(n); {введите кол-во повторов}

for i:=1 to n do

Writeln(' ', a); readln;

end.




Пример программы №10

Вычислить сумму натурального ряда чисел от 1 до N. Решение: программа состоит из трех частей, в которых повторяется решение этой задачи с использованием операторов цикла While, Repeat, For.

program C_PR_28;




var




a,N,Summa: integer;




begin




writeln ('N'); readln (N);




a:=1; summa:=0;




while a<=N do

Цикл - While

begin




summa:=Summa+a;




a:=a+1




end;




writeln ('S1=', summa); readln;




a:=1; summa:=0;




repeat

Цикл - Repeat

Summa:=summa+a;




a:=a+1




until a>N;




writeln ('S2=', summa); readln;




summa:=0;

for a:=1 to N do summa:=summa+a;

writeln ('S3=', summa); readln;

end.

Цикл - For.


Очевидно, что все три результата будут одинаковыми.







Самостоятельная работа № 3 по теме:

«Составление алгоритмов циклических структур»

Задание: «Представить решения задач в соответствии с обобщенной схемой алгоритма обработки данных»
  1. Начав тренировки, спортсмен в первый день пробежал 10 км. Каждый день он увеличивал дневную норму на 10 % нормы предыдущего дня. Какой путь пробежал спортсмен за 7 дней?
  2. Одноклеточная амеба каждые 3 часа делится на две клетки. Определить сколько амеб будет через 3,6,12,…,24 часов.
  3. Дано натуральное число n. Вычислить: S=1+2+3+…+n , (n>1).
  4. Для проверки физического развития проверяют рост школьников. Составьте программу, запрашивающую рост очередного школьника и вычисляющую после завершения медосмотра средний рост прошедших осмотр. Количество школьников, подлежащих медосмотру заранее не известно.
  5. Составить программу для перевода расстояний из дюймов в сантиметры (1дюйм = 2,5 см) для значений длин от 1 до 20 дюймов.
  6. Найти сумму ряда: 1, 2, ..20. Тип переменной S может быть integer, если сумма чисел не более 32767.
  7. С клавиатуры вводятся числа и последовательно суммируются. Найти количество введенных чисел, когда их сумма превысила 100.
  8. С помощью оператора repeat напишите программу, которая требует у вас пароль, например 111, и если пароль правильный, то печатает сообщение «Молодец!»
  9. Составьте программу вычисления степени числа a с натуральным показателем n. (Записать варианты программы с разными видами циклов while, repeat, for).
  10. Ежемесячная стипендия студента составляет A руб., а расходы на проживание превышают стипендию и составляют B руб. в месяц. Рост цен ежемесячно увеличивает расходы на 3%. Составьте программу расчета необходимой суммы денег, которую надо единовременно попросить у родителей, чтобы можно прожить учебный год (10 месяцев), используя эти деньги и стипендию.



1.3. Массивы

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

МАССИВ - это упорядоченный по номерам набор значений, объединенных общим типом и именем. Упорядоченность в том, что элементы массива располагаются в последовательных, пронумерованных ячейках памяти. Массив имеет фиксированные: имя, тип и количество значений. Массиву выделяется место в памяти.

Элементы массива - это переменные с индексами. Индексы можно вычислять.

ОПРЕДЕЛЕНИЕ МАССИВА - массивы, как и простые переменные, подлежат описанию в разделе переменных:

VAR <имя>: ARRAY[] OF <тип элементов>;

array (эррэй) - массив. of (оф) - из.

Тип индексов - целый . Индексы можно вычислять.

Тип элементов - любой для данной версии языка.

[min..max] - размер массива. min - нижняя, max –верхняя границы индексов. min<=max. Границы можно задать с помощью переменных.

Можно задавать постоянный массив:

const x: array [1..10] of integer=(4,6,3,5,2,1,7,8,9,13); const x: array [1..8] of char=('a','b','c','d','e','f','g','h');

Элементы таких массивов являются константами.

Если массивы одинаковы и отличаются лишь именами, то их можно описать в одной строке:

var a,b,c :array[1..n] of real; , где n -верхняя граница индекса и n описывается в разделе констант.

ВИДЫ МАССИВОВ :

Одномерные - ряд элементов. B[5] - 5-ый элемент массива.

Двумерные - таблицы. B[3,5] - элемент таблицы B ,стоящий в 3 строке и в 5 столбце.

Многомерные - ряд таблиц (изучаются в Вузе).


ЗАПОЛНЕНИЕ МАССИВА:

1. С помощью CONST.

2. С помощью READ и циклической конструкции.

3. Часто требуется обнуление ячеек массива. For I:=1 to n do A[I]:=0;

4. Для отладки программ и для программирования игр, тестов применяют заполнение массива случайными числами.

randomize; For I:=1 to n do A[I]:=random(q-p+1)+p; qp

5. Присваивание значений. A[1]:=7; A[2]:=77; A[3}:=33; и т. д.


Способы задания и заполнения массивов в задаче

Пример программы№11: Заполнить и вывести на экран одномерный массив целых чисел. Массив оценок учащихся 5 А класса

1

2

3

4

5

6

Номер ученика в журнале – это индекс массива

Авдеев Иван

Васильев Василий

Григорьев Григорий

Демидов Дмитрий

Евсеев Егор

Жиглов Глеб

В решении задачи Фамилии и Имена не важны найти ученика можно по индексу!!!

5

4

4

3

3

5

Оценка – это значение элемента массива
      1. Способы задания данного массива с клавиатуры
      1. Способы задания данного массива c оператором присваивания





Program Primer1_mas;

var klass5_a: array[1..6] of integer;

{В массиве 6 элементов, элементы- целые числа}

i: integer; {Индекс массива, параметр цикла}

Begin

{**заполнение массива c клавиатуры **}

for i:=1 to 6 do {с помощью цикла с параметром}

begin

write(‘klass5_a [',i,'] ='); readln(klass5_a [i]);

end;

{** вывод массива на экран **}

Write(‘Массив klass5_a: ’);

for i:=1 to 6 do

{с помощью цикла с параметром}

write (klass5_a [i], ’ ; ‘); readln; End.






Program Primer1_mas;

var klass5_a: array[1..6] of integer;

{В массиве 6 элементов, элементы- целые числа}

i: integer;

{Индекс массива, параметр цикла}

Begin

{** заполнение массива **}

klass5_a[1]:=5;

klass5_a[2]:=4;

klass5_a[3]:=4;

klass5_a[4]:=3;

klass5_a[5]:=3;

klass5_a[6]:=5;

{**вывод массива на экран **}

Write(‘Массив klass5_a: ’);

for i:=1 to 6 do

{с помощью цикла с параметром}

Write (klass5_a [i],’ : ‘); read; End.





Пример программы №12. Вычислить сумму элементов числового массива A = (a1 , a2 , ... , aN ).


Школьный алгоритмический язык

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

Язык программирования Pascal

алг Сумма (арг цел N, арг вещ

таб A[1:N], рез вещ S)

  дано N>0

нач цел i

  S:=0

  нц для i от 1 до N

  S := S + A[i]

  кц

кон


Тест 

Данные

Результат

N=5

A=(3, 5, -2, 6, 3)

S=15.0


Исполнение алгоритма

i

S

 

0 

1

0 + a1 = 0+3 = 5 

2

a1 + a2 = 3+5 = 8 

3

a1+a2+a3 = 8-2 = 6 

4

a1+a2+a3+a4 = 6+6 = 12 

5

a1+a2+a3+a4+a5 = 12+3=15








Program Summa;

     Var A Array [1..20] of Real;

  i, N : Integer;

  S   : Real;

BEGIN

  Write('Введите N = ');

  ReadLn(N); {ввод значения N}

  For i := 1 to N dо {цикл по элементам массива}

  begin

  Write('A [ ', i , ' ] = ');

  ReadLn(A[i]) {ввод элементов массива}

  end;

  S := 0; {присваивание начального значения}

  For i := 1 to N do S := S+A[i]; {суммирование}

  WriteLn;

  WriteLn('Сумма равна ', S : 5 : 1);

  ReadLn;

END.

Результаты работы Pascal-программы 

Введите N = 5   
  A[1] =  3     
  A[2] =  5     
  A[3] = -2     
  A[4] =  6     
  A[5] =  3     

  Сумма равна  15.0



Пример программы №13. Найти наибольший элемент числового массива A = (a1, a2 , ..., aN ) и его номер.


Школьный алгоритмический язык

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

Язык программирования Pascal

алг МаксЭлемент (арг цел N, арг вещ таб A[1:N],

рез вещ Amax, рез цел k)

нач цел i

  Amax := A[1]; k := 1

  нц для i от 2 до N

  если A[i] > Amax

  то Amax:=A[i]; k := i

  все

  кц

кон

Тест


Тест

 Данные

Результаты

N=4

A=(3, -1, 10, 1)

Amax=10

K=3


Исполнение алгоритма 
 

i

A[i] > Amax

Amax

k

2

3

4

-

+

-

3

10

 

1

3

 








Program MaxElem;

Var A Array [1..20] of Real;

  i, N : Integer;

  k   : Integer;

  Amax : Real;

BEGIN

  Write('Введите N = ');

  ReadLn(N);

  For i := 1 to N do {Ввод значений элементов массива А}

  begin

  Write('A [ ', i, ' ] = '); ReadLn(A[i])

  end;

  Amax := A[1]; k:=1; {Поиск максимального элемента}

  For i := 2 to N do

  If A[i] > Amax then

  begin

  Amax := A[i]; k := i; end;

  WriteLn; WriteLn('Наибольший элемент' , k , '-й');

  WriteLn('Его значение ', Amax : 5 : 1); ReadLn

END.




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

Система тестов

 Номер 

теста

Проверяемый 

случай

Число 

учеников

Фамилии

Рост

Результаты

1

Есть 

кандидаты

3

Кулов 

Чехин 

Уваров

171

165

178

Кулов 

Уваров

2

Нет 

кандидатов

2

Ершов 

Иванов

170

165

Нет 

кандидатов

алг Баскетбол (арг цел N, арг лит таб Фам[1:N], арг вещ

таб Рост[1:N], рез лит таб Канд [1:N] )

нач цел i, k

  k:=0

  нц для i от 1 до N | запись фамилий кандидатов в таблицу Канд

  если Рост[i]>170

  то k:=k+1; Канд [k] := Фам [i]

  все

  кц

  если k=0

  то вывод "В КЛАССЕ НЕТ КАНДИДАТОВ В КОМАНДУ."

  иначе нц для i от 1 до k

  вывод Канд [i]

  кц

 все

кон

Исполнение алгоритма

N теста

i

Рост[i] > 170

K

Кондидаты в команду

1

1

2

3

+

-

+

0

1

2

Кулов

Уваров

2

1

2

-

-

0

-



Program BascetBall;

Var

SurName : Array [1..30] of String;  { фамилии учеников }

Height  : Array [1..30] of Real;   { рост учеников }

Cand   : Array [1..30] of String;  { фамилии кандидатов }

NPupil, i, K : Integer; { NPupil - число учеников,

K - количество зачисленных}

  Write('В КОМАНДУ ЗАЧИСЛЯЮТСЯ УЧЕНИКИ, ');

  WriteLn('РОСТ КОТОРЫХ ПРЕВЫШАЕТ 170 СМ.'); WriteLn;

  Write('Сколько всего учеников ? ');

  ReadLn(NPupil);

  WriteLn('Введите фамилии и рост учеников :');

  For i := 1 to NPupil do

  begin Write(i, '. Фамилия - '); ReadLn(SurName[i]);

  Write(' Рост - ');   ReadLn(Height[i]);

  end; WriteLn;

  K:=0; { Составление списка команды }

  For i := 1 to NPupil do

  If Height[i]>170 then

  begin K:=K+1; Cand[K] := SurName[i] end;

  If K=0 then WriteLn('В КЛАССЕ НЕТ КАНДИДАТОВ В КОМАНДУ.')

  else

  begin WriteLn('КАНДИДАТЫ В БАСКЕТБОЛЬНУЮ КОМАНДУ :');

  For i := 1 to K do WriteLn( i, '. ' , Cand[i]);

  end;

  ReadLn

END.















Пример программы №15. Примеры задач ГИА-2012. В таблице DAT хранятся данные измерений суточной температуры за неделю в градусах (Dat[1]) – данные за понедельник, Dat[2] – данные за вторник и т.д.). Определите, что будет напечатано в результате выполнения следующего алгоритма.

Школьный алгоритмический язык

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

Язык программирования Pascal


Исполнение алгоритма

k

Dat[k]

Dat[1..7]:={7,9,10,8,6,7,10}

Day:=1; {m:=Dat[1]}

Dat[k]>m

m:=Dat[k]

day:=k

2

9

Dat[2]:=9 >7 (m=7)

9>7 (+)

m:=Dat[2]

day:=2

3

10

Dat[3]:=10 >9 (m=9)

10>9 (+)

m:=Dat[3]

day:=3

4

8

Dat[4]:=8 >10 (m=10)

8 >10 (-)

-

5

6

Dat[5]:=6>10 (m=10)

6>10 (-)

-

6

7

Dat[6]:=7>10 (m=10)

7>10 (-)

-

7

10

Dat[7]:=10 >10 (m=10)

10 >10 (-)

-








Program GIA_9_1;

var k,m,day:integer;

Dat: array [1..7] of integer;

begin

Dat[1]:=7;

Dat[2]:=9;

Dat[3]:=10;

Dat[4]:=8;

Dat[5]:=6;

Dat[6]:=7;

Dat[7]:=10;

Day:=1;

m:=Dat[1];

for k:=2 to 7 do

if Dat[k]>m then

begin

m:=Dat[k];

day:=k;

end;

write('day=',day); readln;

end.






Самостоятельная работа № 4 по теме:

«Составление алгоритмов обработки числовых последовательностей (массивов)»

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

!Инструкция для учащегося!

В задачах, имеющих четные номера, значения массива вводятся с клавиатуры.

В задачах, имеющих нечетные номера, значения массива вводятся с помощью оператора присваивания.


    1. Дан массив А(5) Найти сумму и количество положительных элементов.
    2. Дан массив А(6). Найти минимальный элемент массива и его порядковый номер.
    3. Дан массив А(4). Найти максимальный элемент массива и его порядковый номер.
    4. Дан массив А(8). Найти минимальный  элемент массива.
    5. Дан массив А(5). Определить количество отрицательных элементов.
    6. Дан массив А(6). Определить количество положительных элементов.
    7. Дан массив А(5).  Найти количество нечетных положительных элементов.
    8. Дан массив А(7).  Найти количество четных положительных элементов.
    9. Дан массив А(5). Найти сумму четных положительных элементов.
    10. Дан массив А(8). Найти сумму нечетных положительных элементов.
    11. Дан массив А(5). Найти произведение положительных  элементов.
    12. Дан массив А(6). Найти определить количество элементов, равных 4.
    13. Дан массив А(5).  Вычислить произведение отрицательных элементов массивов.
    14. Дан массив А(5). Найти сумму и количество положительных элементов.
    15. Дан массив А(5). Найти наименьший положительный элемента среди элементов с четными номерами массива.
    16. Составить программу для нахождения наименьшего из отрицательных  элементов массива А(10).
    17. Найти наибольший среди элементов массива А(10),  остальные обнулить.







Классификация типов данных


Целочисленный тип данных

Тип

Диапазон

Размер в памяти

Shortin


-128...127

1 байт

Integer

-32768..32767

2 байтa

Longint

-2147483648.. 2147483647

4 байтa

Byte

0..255

1 байт

Word

0..65535

2 байтa



Вещественные типы данных различаются диапазоном и точностью значений

Тип

Диапазон

Количество значащих цифр

Размер в памяти

Real


2.9E-39...1.7E38

11-12

6 байт

Single

1.5E-45..3.4E38

7-8

2 байтa

Double

5.0E-324..1.7E308

15-16

4 байтa

Extended

3.4E-4932..1.1E4932

19-20

10 байт

Comp

-9.2e18..9.2e18

19-20

8 байтa



Символьные величины

Тип

Количество значений

Допустимые значения

Размер в памяти

Char


256

Символы ASCII

1 байт



Строковые величины

Тип

Количество значений

Допустимые значения

Размер в памяти

String


от 1 до 255 символов

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

1-255 байт



Логические (булевские) величины

Тип

Количество значений

Допустимые значения

Размер в памяти

Boolean


2

True, False

1 бит