Методические рекомендаци по решению задач на массивы

advertisement
Методические рекомендаци по решению задач на
массивы
1. Массивы. Некоторые теоретические сведения.
Массивы относятся к сложному типу данных. Под массивом понимается
упорядоченная последовательность величин одного типа, обозначенная одним
именем. Каждый элемент в массиве имеет уникальный номер (индекс) по которому и
происходит упорядочение. Тип индексов может быть любым скалярным, но не
вещественным! Обычно тип индексов–ограниченный тип, выделяемый из целого.
В математике понятию массив соответствует понятие вектора и матрицы. Различают
одномерные массивы (линейная таблица или вектор) двумерные массивы
(прямоугольная таблица, матрица) и многомерные массивы. Одномерные, двумерные
и трёхмерные массивы ещё можно представить наглядно (рис. 1). Многомерные
массивы (более трёхмерных) можно представить лишь абстрактно.
Имя структурной переменной–массива образуется по тем же правилам Паскаля, что и
для простых типов. Глубина вложенности, т.е. количество индексов, при определении
массивов не ограничена. Играет роль только суммарный объем данных в программе.
Рис. 1 Примеры одномерных, двумерных и многомерных массивов.
Рассмотрим синтаксис описания массивов в языках программирования
Бейсик:
DIM имя (число элементов) AS тип
Паскаль:
array [нижняя_граница .. верхняя_граница] of тип;
Си++:
тип имя [число элементов];
Пример описания одномерного массива из 100 элементов целого типа:
Си++:
int IntArray[100];
Паскаль
Matrix: array [1..100] of integer;
Бейсик:
DIM IntArray(l00) AS INTEGER
Matrix [5] – пятый элемент одномерного массива Matrix;
Далее мы будем рассматривать примеры в основном на Паскале.
Элемент двумерного массива будет иметь уже два индекса: индекс строки и столбца.
Например в Паскале:
Matrix2D: array [1..10,1..5] of real;
описание массива вещественных чисел из 10 строк и 5 столбцов. Размерность
статического массива (сколько в нём элементов) должна быть описана конкретно
сразу в разделе VAR. Использование букв для обозначения размерности, например
Matrix2D: array [1..M,1..N] of real
допускается только тогда, когда M и N описаны предварительно, например, в разделе
констант.
2. Ввод значений элементов массива.
В предыдущих примерах рассмотрены только описания массивов. Значения их
элементов не определены. Так как мы работаем со сложным типом данных, поэтому
ввод значений в массив осуществляется иначе, чем в случае простых переменных.
Мы должны «перебрать» все элементы массива, обращаясь к ним по их индексам–
адресам. И для каждого элемента массива выполнить операцию присваивания или
ввода с клавиатуры. Например, для массива из пяти элементов, описанного как
M: array [1..5] of integer;
можно записать:
M[1]:=2; M[2]:=8;
M[3]:=10; M[4]:=60; M[5]:= –8
Получили такое заполнение массива, как на рисунке 2
Рис. 2. Заполнение массива одиночными операторами присваивания.
Можно использовать оператор ввода с клавиатуры значения:
…
Readln (M[1]);
Readln (M[2]);
Readln (M[3]);
Readln (M[4]);
Readln (M[5]); …
Вы понимаете, что данный метод хоть и прост, но крайне неэффективен. Повторяется
оператор ввода read (или readln), изменяется лишь индекс, пробегая все свои
значения, поэтому целесообразнее организовать цикл с параметром. В качестве
параметра цикла будет выступать индекс элемента.
А) Фрагмент ввода с клавиатуры для одномерного массива из 10 элементов.
…
for i:=1 to 10 do begin
read (a[i]);
end;
…
Элементы вводят через пробел и после последнего нажимают ввод.
В любом языке программирования высокого уровня есть функция получения
случайных чисел из заданного интервала. В Паскале это функция random (М)– выдаёт
случайное целое число из интервала [0, M-1]. Можно использовать функцию без
указания аргумента: random. Она выдаёт случайное вещественное число от 0 до 1.
Для получения случайного числа из интервала [a,b], нужно пользоваться следующими
формулами:
random (b-a+1)+a. Например, для [-30, 40] получим random (71)-30. При первом
обращении к функции случайных чисел, необходимо инициализировать датчик
случайных чисел с помощью процедуры randomize модуля crt
Б) Фрагмент ввода значений с использованием функции random для одномерного
массива.
…
for i:=1 to 10 do begin
a[i]:=random(101); {числа от 1 до 100}
Write (a[i]:4); {вывод значений массива, параметр 4 означает
количество позиций, отводимых под значение a[i]}
end;
…
Теперь рассмотрим инициализацию значений элементов двумерного массива.
Элементы многомерных массивов в памяти ЭВМ расположены «по строкам». То есть
сначала расположены элементы первой строки (первый индекс фиксирован и равен
минимальному значению (второй «пробегает» все свои значения), затем второй и т.д.
Таким образом для ввода значений в двумерный массив нам можно организовать два
цикла с параметром вложенных один в другой. Например, для массива размерностью
M(столбцов)*N(строк)
…
for i:= 1 to N do begin
for j:= 1 to M do begin
A[i, j]:= random(100); { или read (A[i,j]); для ввода с клавиатуры}
end; end;
…
У произвольного элемента квадратной матрицы A[i, j] i— это номер строки, а j — это
номер столбца. При этом параметр внешнего цикла (индекс строки) i изменяется на
один шаг, а параметр внутреннего цикла (индекс столбца) j пробегает все свои
значения. Получается, что вначале по столбцам заполняется первая строка, затем
вторая и т.д.
RЗадание: организуйте ввод значений элементов в массив с использованием циклов с
предусловием и постусловием
1. Вывод значений элементов массива на экран.
Для вывода значений двумерных и одномерных массивов на экран тоже
используются вложенные циклы с параметром. Однако, основным оператором в тела
цикла будет не оператор read ( ) или присваивания, а оператор вывода на экран
write ( ).
Для одномерного массива из N элементов:
…
For i:=1 to N do begin
write (N[i]:4);
end;
Для двумерного массива M*N:
…
for i:= 1 to N do begin
for j:= 1 to M do begin
write (A[i,j]:4);
end;
writeln; end;
…
Второй оператор writeln без аргументов переводит строку, для того, чтобы массив
выводился в виде таблицы.
RЗадание: организуйте вывод массива в программе с использованием второго
оператора writeln и без него. Сравните результаты.
Массив, сформированный с использованием функции случайных чисел всегда
рекомендуется выводить на экран перед обработкой. Это можно сделать, организовав
отдельный цикл или в теле цикла ввода значений.
RЗадание: организуйте вывод значений элементов массива с использованием циклов с
предусловием и постусловием.
4. Примечательные элементы в массиве.
Из двумерных массивов особый интерес представляют так называемые квадратные, у
которых оба измерения совпадают, например
A: array [1..5,1..5] of real;
Рассмотрим, как можно эффективно обрабатывать различные части таких матриц.
Итак, пусть наш массив уже заполнен например так как на рисунке 3:
0
2
2
2
2
1
0
2
2
2
1
1
0
2
2
1
1
1
0
2
1
1
1
1
0
Рис. 3. Пример квадратного массива
Выделим в матрице главную диагональ — линию, соединяющую левый верхний и
правый нижний угол квадратной матрицы. Пометим все элементы цифрами 0, 1 или 2
в зависимости от расположения элемента матрицы относительно главной диагонали.
Элементы, стоящие на главной диагонали матрицы, обозначены цифрой 0.
Для элементов главной диагонали выполняется условие (i = j) . Для обработки всех
элементов главной диагонали, можно организовать один цикл:
…
For i:=1 to 5 do begin
{…фрагмент обработки A[i,i]…}
end;
…
Элементы верхнего треугольника, помеченные цифрой 1, лежат правее главной
диагонали. Для их обработки можно написать цикл, который также не будет
содержать никаких условий:
…
for i :=1 to n -1 do begin
{это цикл по всем возможным строкам}
for j := i+ 1 to n do begin
{цикл по столбцам: от диагонали до n}
{… фрагмент обработки A[i,j]…} end;
end;
…
Элементы нижнего треугольника, помеченные цифрой 2, описываются так:
…
for i := 2 to n do begin
for j := 1 to i -1 do begin
.
{…обработка A[i,j]…}
end;
end; …
Кроме главной диагонали в квадратном массиве можно выделить так называемую
побочную диагональ. На рисунке 4 элементы, стоящие на побочной диагонали матрицы, обозначены цифрой 0.
1
1
1
1
0
1
1
1
0
2
1
1
0
2
2
1
0
2
2
2
0
2
2
2
2
Рис. 4. Пример квадратного массива.
Для индексов [1...N, 1...N] элементов побочной диагонали можно записать важное
соотношение:
j = N–i + 1.
Глубина вложенности структурированных типов вообще, а следовательно, и массивов
- произвольная, поэтому количество элементов в списке индексных типов
(размерность массива) не ограничено, однако суммарная длина внутреннего
представления любого массива, как уже говорилось, не может быть больше 65520
байт. В памяти ПК элементы массива следуют друг за другом так, что при переходе от
младших адресов к старшим наиболее быстро меняется самый правый индекс массива.
Если, например,
var
а : array[1. .2,1. .2] of Byte;
begin
a [1,1]:=1; a [2,1]:=2; a [l, 2]:=3; a [2,2]:=4;
end.
то в памяти последовательно друг за другом будут расположены байты со значениями
1,3,2, 4 . Это обстоятельство может оказаться важным при использовании стандартной
процедуры копирования памяти MOVE.
В Турбо Паскале можно одним оператором присваивания передать все элементы
одного массива другому массиву того же типа, например:
var а,b:array [1..5] of Single;
begin
.....
a := b;
.....
После этого присваивания все пять элементов массива А получат те же значения, что и
в массиве В. Однако над массивами не определены операции отношения. Нельзя,
например, записать if a = b then ...
5. Типовые алгоритмы обработки массива
К типовым нечисловым алгоритмам обработки массивов относят алгоритмы поиска и
сортировки.
5.1. Алгоритмы поиска
Начнем с задачи поиска элемента в неупорядоченном массиве.
Рассмотрим массив
a :array [0..N]] of <тип элемента>;
Индексы элементов массива, которые мы будем рассматривать, изменяются от 1 до N,
а нулевой элемент будем использовать в случае необходимости как вспомогательный.
Конкретный же тип элемента не важен, он может быть как любым числовым, так и
символьным или даже строковым. Алгоритм поиска в массиве элемента К, может
выглядеть так:
…
i:=0;
repeat
i:=i+1;
until (i=N) or (a[i]=K);
if a[i]=K then write (i) else write (‘Искомого элемента нет!’);
При отсутствии в массиве элемента с искомым значением К выводится
соответствующее сообщение. Даже такую программу можно упростить, с
использованием так называемого "барьерного" метода, который часто применяется в
программировании. Он заключается в том, что мы можем занести в дополнительный
элемент массива (например, нулевой) искомое значение К, избавив тем самым условие
окончания цикла от проверки на выход за границу массива:
…
а[0] := К;
i := N;
while (a[i] <>K) do
i := i – 1;
write(i);
Подсчитаем количество операций сравнения, которое в худшем случае будет
выполнено при работе данного алгоритма. Оно равно N + 1. Говорят, что данный
алгоритм линеен от входных данных (количество операций пропорционально
количеству элементов N).
Рассмотрим теперь массив, элементы которого упорядочены например по
возрастанию. То есть a1 < а2 < ... < аn.
Поиск элемента, равного К, в таком массиве можно выполнить с помощью алгоритма
деления пополам. Приведем пример его реализации:
…
L := 1; R := N;
while L < R do
begin
m := (L + R) div 2;
if a[m] < К then L := m + 1
else R := m
end;
if a[R] = К then write(R) else write(0);
…
На каждом шаге данного алгоритма длина части массива, в которой мы осуществляем
поиск элемента, уменьшается в два раза. То есть, если N = 2i, то алгоритм будет
выполнять i + 1 сравнение. Эта величина существенно меньше, чем N. Так, для N —
1000 число сравнений будет равно 11, а для N = 106 всего 21.
R Задание: реализуйте представленные фрагменты поиска в виде самостоятельных
программ. Произведите ввод, отладку, тестирование программ на ЭВМ.
5.2 Алгоритмы сортировки.
Задача сортировки массива, то есть перестановки элементов массива так, чтобы они
были упорядочены по возрастанию, убыванию или другой аналогичной характеристике, является одной из основных технических задач программирования. С этой
задачей мы сталкиваемся и при записи фамилий учеников в классном журнале, и при
подведении итогов соревнований, и даже при упорядочении игральных карт,
например, при игре в преферанс.
Рассмотрим наиболее простые алгоритмы сортировки массивов и подсчитаем их
вычислительную сложность.
Традиционно наиболее простой в реализации считается так называемая "пузырьковая"
сортировка.
Сутьее в случае упорядочения по возрастанию заключается в следующем.
Будем просматривать слева направо все пары соседних элементов: a1 и а2, а2 и а3 ,...,
аn-1, и аn. Если при этом аi > ai+1, то элементы меняем местами. В результате такого
просмотра массива максимальный элемент окажется на крайнем справа (своем) месте.
Об остальных элементах ничего определенного сказать невозможно. Будем
просматривать массив снова, исключив из рассмотрения правый элемент. На своем
месте теперь окажется уже второй по величине элемент. И так далее. В последнем
просмотре будут участвовать только первый и второй элементы. Общее число
просмотров при этом равно
N - 1.Приведем фрагмент программы, реализующий описанный алгоритм:
for j := 1 to n – 1 do {цикл по просмотрам}
for i := 1 to n –j do {просмотр массива)
if a[i] > a[i + 1]then begin
х := a[i];
a[i] := a[i + 1];
a[i +1] := x
end;
…
При оценке сложности алгоритмов сортировки обычно отдельно подсчитывают
количество операций сравнения и количество операций присваивания, т.к. заранее
неизвестно, какая из них окажется более трудоемкой, ведь сравниваться между собой
могут не только числа, но и строки, и другие достаточно сложные объекты. Иногда
обе операции сопоставимы по трудоемкости.
Количество сравнений в данном алгоритме равно
N-1+N-2 + N-3 + ... + 1= N(N - l)/2.
Количество присваиваний в три раза больше, чем число выполненных обменов. В
худшем случае обмен будет производиться после каждого сравнения и общее число
присваиваний будет равно ,
3(N - 1 + N - 2 + N - 3 + ... + 1) = 3N(N - l)/2.
Говорят, что данный алгоритм квадратичный как по числу сравнений, так и по числу
присваиваний. "Пузырьковым" он называется потому, что в результате каждого
просмотра на своем месте оказывается максимальный из оставшихся элементов — он
как бы постепенно, шаг от шага "всплывает". По-другому такая сортировка называется
обменной.
Теперь рассмотрим другой метод сортировки–прямой выбор. Находится минимальный
элемент в массиве и меняется с первым элементом массива. В результате он окажется
на своем месте. Затем находится минимальный элемент среди оставшихся и меняется
со вторым элементом. На N - 1 шаге мы закончим упорядочивание массива. Такой
алгоритм называется сортировкой прямым выбором. Приведем фрагмент программы,
реализующий описанный алгоритм:
for i:=l to n-l do begin
min := i;
{индекс минимального элемента}
for j := i + 1 to n do
{ищем минимальный элемент}
if a[j] < a[min] then min := j
{меняем минимальный элемент с i-м}
х := a[i]; a[i] := a[min]; a[min] := x
end;
Количество выполняемых операций в данном алгоритме всегда одинаково. Для
сравнений оно равно
N-1+N-2 + N-3 + ... + 1 = N(N - l)/2,
а для присваиваний — всего 3(N - 1).
То есть данный алгоритм квадратичный по числу сравнений и линейный
(эффективный) по числу присваиваний.
6. Задачи на массивы.
1. Все элементы двухмерного числового массива А[1..10,1..10] первоначально были
равны 0. Затем значения элементов меняются с помощью вложенного оператора цикла
в представленном фрагменте программы:
…
for n := 1 to 4 do
for k := n to 4 do begin
A [n,k] := A [n,k] + 1;
A [k,n] := A [k,n] + 1 end
…
Сколько элементов массива в результате будут равны 1? (Задача из демо-версии ЕГЭ
по информатике 2006 г.)
2. В произвольном двухмерном массиве размерностью М х Nнайти такие элементы,
которые одновременно являются минимальными в своей строке и максимальными в
своем столбце.
4. Пусть уk — это число вызовов, которые поступают на АТС за k-тую секунду.
Предположим, что yk - случайное число со значением от 0 до 6, которое генерируется
формулой
уk = trunc(abs(7sin(k))). Создать массив у с десятью элементами (h= 1, ..., 10).
Вычислить количество вызовов за первые 10 секунд работы АТС и максимальное
количество вызовов, которые поступили за одну секунду. Вывести результаты
вычислений.
5. Модифицируйте программу ATS, используя функцию random, и определите, за
какую секунду поступило максимальное количество вызовов.
6. Создать массив у, элементы которого вычисляют по формуле yk= ln(k) - 3, где k = 1,
2, ..., 10. Построить массив g, состоящий из отрицательных элементов массива у.
Вывести результаты вычислений на экран. Если искомых величин нет, то вывести
соответствующее сообщение.
7. Составить программу для построения таблицы умножения двух чисел (таблицы
Пифагора) и занесения её в двумерный массив р. Вывести массив на экран в виде
таблицы.
7. Ответы и комментарии.
К задаче 1. В данном фрагменте программы меняются 16 элементов таблицы, при
этом элементы, стоящие на главной диагонали, увеличиваются дважды. Поэтому в
результате выполнения данного фрагмента программы равными единице окажутся
16– 4 = 12 элементов.
К задаче 2. Данная задача является задачей поиска так называемых "седловых точек".
Интересно, что если все элементы в матрице различны, то такой элемент если и
существует, то он единственен. Это несложно доказать методом "от противного".
Далее, например, можно проверять для минимального элемента каждой строки,
является ли он, в свою очередь, максимальным элементом своего столбца. Для более
эффективной реализации данного решения можно использовать вспомогательные одномерные массивы.
К задаче 4. Рассмотрим вариант программы
program ATS;
uses Crt;
type Cal_l = array [1..10] of integer;
var
у : Cal_l; max, s, i : integer;
begin
clrscr;
max := 0; {Предполагаем, что max= 0}
s := 0;
for i := 1 to 10 do
begin {Вычисляемколичествовызовов)
y[i] := trunc(abs(7 * sin(i))); {за i-туюсекунду}
write ( 'Количество вызовов за ', i , '–тую секунду: ');
writeln (y[i]:5);
{Выводим это количество}
s := s + y[i]; {Вычисляем количество вызовов}
{Вычисляем max значение}
if y[i] > max then max := y[i];
end;
writeln("Количество вызовов за 10 секунд = ', s:3);
write ('Максимальное количество вызовов за одну секунду = ', mах:3);
end.
К задаче 7. Рассмотрим вариант программы.
program Pifagor;
uses Crt;
const n = 9;
var
p : array [l..n, l..n] of integer;
i, j : integer;
begin
clrscr;
for i := 1 to n do begin
for j := 1 to n do begin p[i, j] :=i * j; write(p[i, j] : 6) end; end.
Варианты задания
1. В массив A[N] занесены натуральные числа. Найти сумму тех элементов, которые
кратны данному К.
2. В целочисленной последовательности есть нулевые элементы. Создать массив из
номеров этих элементов.
3. Дана последовательность целых чисел а1, а2, …, аn. Выяснить, какое число
встречается раньше — положительное или отрицательное.
4. Дана последовательность действительных чисел а1, а2, …, аn. Выяснить, будет ли
она возрастающей.
5. Дана последовательность натуральных чисел а1, а2, …, аn. Создать массив из
четных чисел этой последовательности. Если таких чисел нет, то вывести сообщение
об этом факте.
6. Дана последовательность чисел а1, а2, …, аn. Указать наименьшую длину числовой
оси, содержащую все эти числа.
7. Дана последовательность действительных чисел а1, а2, …, аn. Заменить все ее
члены, большие данного Z, этим числом. Подсчитать количество замен.
8. Последовательность действительных чисел оканчивается нулем. Найти количество
членов этой последовательности.
9. Дан массив действительных чисел, размерность которого N. Подсчитать, сколько в
нем отрицательных, положительных и нулевых элементов.
10. Даны действительные числа а1, а2, …, аn.Поменять местами наибольший и
наименьший элементы.
11. Даны целые числа а1, а2, …, аn. Вывести на печать только те числа, для которых
ai> i
12. Даны натуральные числа а1, а2, …, аn.Указать те из них, у которых остаток от
деления на М равен L(0 < L< M — 1).
13. В заданном одномерном массиве поменять местами соседние элементы, стоящие
на четных местах, с элементами, стоящими на нечетных местах.
14. При поступлении в вуз абитуриенты, получившие двойку на первом экзамене, ко
второму не допускаются. В массиве А[п] записаны оценки экзаменующихся,
полученные на первом экзамене. Подсчитать, сколько человек не допущено ко
второму экзамену.
15. Дана последовательность чисел, среди которых имеется один нуль. Вывести на
печать все числа до нуля включительно.
16. В одномерном массиве размещены: в первых элементах — значения аргумента, в
следующих — соответствующие им значения функции. Напечатать элементы этого
массива в виде двух параллельных столбцов (аргумент и значения функции).
17. Задана последовательность из N вещественных чисел. Определить, сколько среди
них чисел меньших К, равных К и больших К.
Варианты задания
1. Дан двумерный массив, содержащий З строки и 4 столбца. Элементами массива
являются целые числа. Найти сумму элементов указанного массива, принадлежащих
интервалу
[-4,4]. Разделить каждый элемент исходного массива на полученное значение.
Результат получить в другом массиве.
2. Дан двумерный массив, содержащий 4 строки и З столбца. Элементами массива
являются целые числа. Найти максимальный элемёнт указанного массива. Увеличить
каждый элемент исходного массива на полученное значение. Результат получить в
другом массиве.
З. Дан двумерный массив, содержащий З строки и З столбца. Элементами массива
являются целые числа. Найти сумму диагональных элементов указанного массива.
Каждый элемент исходного массива уменьшить на полученное значение. Результат
получить в другом массиве.
4. Дан двумерный массив, содержащий З строки и 4 столбца Элементами массива
являются целые числа. Найти сумму четных элементов, указанного массива. Разделить
каждый элемент исходного массива на полученное значение. Результат получить в
другом массиве.
5. Дан двумерный массив, содержащий З строки и 5 столбцов. Элементами массива
являются целые числа. Найти сумму элементов второй строки указанного массива.
Умножить каждый элемент исходного массива на полученное значение. Результат
получить в другом массиве.
6. Дан двумерный массив, содержащий 4 строки и З столбца. Элементами массива
являются целые числа. Найти минимальный элемент второго столбца указанного
массива. Увеличить каждый элемент исходного массива на полученное значение.
Результат получить в другом массиве.
7. Дан двумерный массив, содержащий 4 строки и 4 столбца. Элементами массива
являются целые числа. Найти среднеарифметическое элементов указанного массива.
Каждый элемент исходного массива уменьшить на полученное значение. Результат
получить в другом массиве.
8. Дан двумерный массив, содержащий 4 строки и 4 столбца. Элементами массива
являются целые числа. Найти максимальный из элементов, расположенных на главной
диагонали. Увеличить каждый элемент исходного массива на полученное значение.
Результат получить в другом массиве.
9. Дан двумерный массив, содержащий 4 строки и З столбца. Элементами массива
являются целые числа. Увеличить элементы каждой строки на сумму элементов этой
строки. Результат получить в другом массиве.
10. Дан двумерный массив, содержащий З строки и 4 столбца. Элементами массива
являются целые числа. Найти минимальный элемент каждого столбца указанного
массива. Элементы каждого из столбцов уменьшить на найденное минимальное
значение этого столбца. Результат получить в другом массиве.
11. Дан двумерный массив, содержащий 4 строки и 4 столбца. Элементами массива
являются целые числа. Найти сумму элементов, расположенных на главной
диагонали. Разделить каждый элемент исходного массива на полученное значение.
Результат получить в другом массиве.
12. Дан двумерный массив, содержащий З строки и 5 столбцов. Элементами массива
являются целые числа. Найти сумму элементов, расположенных в столбцах с
нечетными номерами (1,3,5). Умножить каждый элемент исходного массива на
полученное значение. Результат получить другом массиве.
13. Дан двумерный массив, содержащий 4 строки и З столбца. Элементами массива
являются целые числа. Просуммировать элементы нечетных строк заданного массива.
Уменьшить каждый элемент исходного массива на полученное значение. Результат
получить в другом массиве.
14. Дан двумерный массив, содержащий З строки и 4 столбца. Элементами массива
являются целые числа. Элементы каждого из столбцов увеличить на найденное
максимальное значение этого столбца. Результат получить в другом массиве.
10. Список литературы
1. Е.В. Андреева. «Методика обучения основам программирования на уроках
информатики»// «Информатика», приложение к газете «Первое сентября» №
17-24 за 2009г.
2. Керман М.К. Программирование и отладка в DELPHI. Пер. с англ.–М.:
Издательский дом «Вильямс», 2003, 672 с.
3. Лабораторный практикум по языкам и методам программирования. Автор–
составитель: Царькова О.М. / Бирский государственный педагогический
институт: Бирск. 2007.–104 с.
4. Могилёв А.В. и др. Информатика: Учеб. пособие для студ. пед. вузов.–М.: Изд.
Центр «Академия», 2007.–816 с.
o
o
Окулов С.М. Программирование в алгоритмах / С.М. Окулов.–М.:
БИНОМ. Лаборатория знаний, 2004.–341с.
Глинский Я.Н. и др. Turbo Pascal и Delphi. Учебное пособие.– 2-е изд.,
испр. и доп.,– СПб: ООО «ДиаСофтЮП», 2006.–208с.
Download