- Домашнее задание по теме "Программирование"
- Одномерные массивы
- Файловый тип данных
- Поиск: линейный, с барьером, бинарный - скачать конспект
- Подпрограммы
- Двумерные массивы
- №2936, 2949, 264. Дополнительно №2956, 304 на сайте http://informatics.mccme.ru. ( к 10 сент)
- №63, 64, 65, 66. Дополнительно №68, 1456 на сайте http://informatics.mccme.ru. (к 15 сент)
- №69, 72, 223, 224, 226, 1566 (№1566: Поменять местами в массиве максимальный и минимальный элементы. На вход подается N - количество элементов, затем в следующей строке n элементов массива через пробел). Дополнительно №70, 71, 73, 1460, 1461. *300, *1467, *1468 на сайтеhttp://informatics.mccme.ru. (к 17 сент)
- Решить все задачи или из базового или из продвинутого списка. (к 22 сент)
Текст задач (скачать текст):
Базовый уровень
- Найти сумму элементов, кратных заданному с клавиатуры числу.
- Найти количество положительных и отрицательных элементов (т.е. 0 не считать).
- Найти среднее арифметическое всех элементов массива.
- Найти номер последнего отрицательного элемента массива.
- Найти номера (индексы) всех элементов массива с максимальным значением.
- Найти количество нечетных элементов массива.
- Найти сумму всех четных элементов массива, имеющих четные номера.
- Найти количество элементов массива, кратных 3 или 5.
- Найти сумму элементов массива, имеющих нечетные индексы.
- Найти индексы тех элементов массива, у которых значение больше, чем значение предыдущего элемента.
- Найти индексы тех элементов массива, у которых значение индекса больше, чем значение соответствующего элемента.
- Заменить отрицательные элементы массива на противоположные по знаку.
- Если элемент массива четный, то прибавить к нему первый элемент. Если нечетный – последний. Первый и последний элементы не изме6нтять.
Продвинутый уровень
- Даны два одномерных массива. Найти элементы, которые есть в первом массиве, и которых нет во втором массиве.
- Даны два одномерных массива одинаковой размерности. Построить третий массив, элементами которого будут суммы соответствующих элементов первого и второго массива. Например, c[1]=a[1]+b[1].
- Дан первый член арифметической прогрессии и разность между соседними элементами. Сформировать одномерный массив из первых n элементов арифметической прогрессии.
- Даны массивы A и B одинаковой размерности. Найти их скалярное произведение:
a1•b1+a2•b2+…+an•bn.
- Из элементов массива A сформировать массив B по правилу:
b[i]=a[1]+a[2]+…+a[i].
- Переставьте в массиве местами второй и минимальный элементы.
- Удалить из массива последний максимальный элемент (последнему элементу присвоить 0).
- Вставить в массив элемент X, введенный с клавиатуры, после первого максимального элемента.
- Удалить из массива все элементы, значения которых меньше нуля.
- Домашнее задание: задача, записанная в тетради, на тему "Работа с файлами в Паскале" (Найти последнее вхождение элемента X в массив A методом линейного поиска с барьером. Массив задается из файла.)
+ доделать все долги. (к 24 сент)
- Выучить алгоритмы линейного поиска с барьером, бинарного поиска. Решить все задачи или из базового или из продвинутого списка. (к 29 сент)
Текст задач:
Базовый уровень
- В файле записано количество учеников в 10 классе, затем в следующей строке через пробел в невозрастающем порядке записаны в сантиметрах значения роста учащихся. Установить методом бинерного поиска, есть ли в классе ученик ростом 170 см.
Пример входных данных |
Пример выходных данных |
9
185 180 178 175 170 169 169 165 164
|
YES
|
(сдать задачу)
- Есть ли в массиве отрицательный элемент? Установите методом линейного поиска с барьером.
(сдать задачу)
- В файле записаны через пробел значения среднесуточной температуры за август (31 число). Найдите методом линейного поиска с барьером - какого числа температура воздуха впервые за месяц опустилась ниже 15 градусов.
Пример входных данных
|
Пример выходных данных
|
31
28 29 25 24 23 20 25 16 14 ... 12 8 15
|
9
|
(сдать задачу)
Продвинутый уровень
- (сдать как №1567) На вход программе подается последовательность чисел от 1 до 9, заканчивающаяся нулем. Всего будет введено не более 100 000 чисел. Подсчитайте в этой последовательности количество единиц, количество двоек, количество троек и т. д. и выдайте результат. В выходных данных всегда должно быть 9 чисел. (Подсказка - создавать только один массив a[0..9], входные данные считывать и обрабатывать без использования массива.)
Пример входных данных
|
Пример выходных данных
|
1 1 4 1 5 8 6 3 5 1 0
|
4 0 1 1 2 1 0 1 0
|
- (№1570) Подсчитайте за один проход массива, сколько его элементов равны максимальному элементу. На вход программе сначала подается значение n<=100 —количество элементов в массиве. В следующей строке входных данных расположены сами элементы массива - целые числа, по модулю не превосходящие 30000. Выдайте количество искомых элементов массива. (Подсказка: счетчик зануляется при каждом найденном наибольшем числе.)
Пример входных данных
|
Пример выходных данных
|
8
4 3 5 2 5 1 3 5
|
3
|
- (№1571) В массиве, заполненном произвольными целыми числами, найдите два числа, произведение которых максимально. Вложенные циклы не используйте. На вход программе сначала подается значение n<=10000 - количество элементов в массиве. В следующей строке входных данных расположены сами элементы массива - целые числа, по модулю не превосходящие 30000. Выдайте два искомых числа в порядке неубывания. (Подсказка: max1, max2 ищутся одновременно и по модулю.)
Примеры входных данных
|
Примеры выходных данных
|
5
4 3 5 2 5
|
5 5
|
5
-4 3 -5 2 5
|
-5 -4
|
Подпрограммы
Подпрограмма - это повторяющаяся группа операторов, оформленная в виде самостоятельной программной единицы. Она записывается однократно, а в соответствующих местах программы обеспечивается лишь обращение к ней по имени.
Фактические параметры - это параметры, которые передаются процедуре при обращении к ним.
Формальные параметры - это переменные, фиктивно присутствующие в процедуре и определяющие тип и место подстановки фактических параметров, над которыми производятся действия. Все формальные параметры делятся на два вида: параметры-переменные и параметры-значения.
Параметры-переменные - это те формальные параметры» перед которыми стоит служебное слово Var. Они передаются по ссылке (перелается адрес фактического параметра) тогда, когда необходимо передать некоторые новые значения в точку вызова процедуры из программы, то есть когда нужно, чтобы изменения в теле процедуры значений формальных параметров приводило к изменению соответствующих фактических параметров, таким образом, они и получают новое значение.
Параметры-значения - перед ними слово Var не ставится и идет передача по значению, то есть передается только копия значения этих параметров, внутри процедуры можно производить любые действия с данными формальными параметрами (допустимые для его типа), но их любые изменения никак не отражаются на значениях соответствующих фактических параметров, то есть какими они были до вызова процедуры, то такими же и останутся после завершения ее работы.
В программе все переменные делятся на глобальные и локальные. Глобальные переменные - это те переменные, которые объявлены в описании основной части. Локальные переменные - это те, которые объявлены в процедурах и функциях. Эти переменные помещаются в стек при вызове подпрограммы и убираются из него при возвращении в точку вызова. Таким образом, локальные переменные существуют только тогда, когда работает подпрограмма, появляются при вызове и исчезают при завершении работы.
Общий вид процедуры
Procedure<имя> [(<список формальных параметров>)];
<описательная часть>
Begin
<тело процедуры>
End;
Число и тип формальных и фактических параметров должны совпадать с точностью до их следования.
Общий вид функции
Function<имя>[(<список формальных параметров>)]:<тип результата>;
<описательная часть>
Begin
<тело функции>
<имя>:=<значение>;
End;
В теле функции обязательно должен быть хотя бы один оператор присваивания, где в левой части стоит имя функции, а в правой - ее значение. Иначе, значение не будет определено.

Пример: Составить программу перестановки значений переменных a, b, c в порядке возрастания.
Решение:
Program Z1;
Var a,b,c:integer;
Procedure Swap(Var x,y:Integer);
Var t:integer;
Begin
t:=x; x:=y; y:=t;
End;
BEGIN
Writeln(’введите три числа’);
Readln(a,b);
If a>b Then Swap(a,b);
If b>c Then Swap(b,c);
If a>b Then Swap(a,b);
Writeln(a:5, b:5, c:5);
Readln;
END.
Проверочная работа «Подпрограммы»
Ответьте на вопросы по следующему примеру:
program arifmetica;
var p,q:integer;
r:real;
procedure srgeom(f,h:integer;var k:real);
begin
k:=(f*g)/2; {1}
end;
BEGIN
readln(p,q); {2}
srgeom(p,q,r); {3}
writeln(r); {4}
readln; {5}
END.
- Перечислите все формальные параметры.
- Перечислите все фактические параметры.
- Все локальные переменные.
- Все глобальные переменные.
- Все параметры-переменные.
- Все параметры-значения.
- Опишите, в какой последовательности выполняются команды при работе программы.
- Если пользователь введет с клавиатуры числа 5 и 7, то какое значение получит переменная h?
Задачи по теме "Подпрограммы"
Процедуры
- Вычислить значение выражения: у=a1* х4+а2*х3+аЗ*х2+а4*х+а5. где коэффициенты al, а2, аЗ, а4, а5 и x - это числа, вводимые с клавиатуры.
- Упорядочить значения трех переменных а, b и с в порядке их возрастания.
- Даны координаты трех вершин треугольника. Найти длины всех его сторон.
- Дано натуральное число. Найти все его делители. Подсчитать их количество.
- Даны координаты трех вершин треугольника ABC и даны координаты четвертой точки D. Определить, является ли эта точка внутренней точкой треугольника.
Функции
- Из первых n натуральных чисел вывести на экран те, сумма цифр которых четна.
- Найти значение выражения хy, где х и у целые числа и вводятся с клавиатуры.
- Вычислить значение выражения 11+22+...+nn для введенного значения n.
- Составить программу для графического изображения делимости чисел от 1 до n (n - исходное данное). В каждой строке надо печатать число и столько плюсов, сколько делителей у этого числа. Например, если исходное данное - число 4, то на экране должно быть напечатано:
1+
2++
3++
4+++
- Составить программу возведения заданного числа в третью степень, используя следующую закономерность:
13=1
23=3+5
33=7+9+11
43=13+15+17+19
53=21+23+25+27+29
- Даны коэффициенты квадратного уравнения. Найти его корни. Дискриминант вычислять в подпрограмме.
- Определить, чему равна максимальная первая цифра n введенных с клавиатуры чисел.
- Найти чиста из промежутка от А до В, у которых больше всего делителей.
- Найти сумму всех делителей числа.
- Определить, является ли число совершенным, то есть равно ли оно сумме своих делителей, кроме самого себя
- Среди чисел из интервала от А до В найти все простые.
- Составьте программу, проверяющую, является ли число палиндромом (например, число 12721 -палиндром).
- Определить, является ли число автоморфным, то есть квадрат этого числа заканчивается этим же числом, например число 6, так как его квадрат 36 заканчивается на 6 или число 25 - его квадрат 625.
- Используя функцию из предыдущей задачи, найти первые N автоморфных числа, начиная с числа М.
- Составить программу нахождения наибольшего общего делителя нескольких чисел, используя функцию нахождения НОД двух чисел.
- Составить программу, вычисляющую наименьшее общее кратное четырех заданных с клавиатуры чисел (использовать функцию из предыдущего примера).
- Дано натуральное число n. Выяснить, имеются ли среди чисел n, n+l,..., 2n близнецы, т.е. простые числа, разность между которыми равна двум.
Файловый тип данных в Паскале
Файл—это поименованная область во внешней памяти. В него можно поместить данные или извлечь их оттуда.
Файл в Паскале—последовательность элементов одного типа. Доступ к каждому конкретному элементу файла—только последовательный! (Количество элементов в файле может быть любым.)
Описание переменной файлового типа
Var f: file of Integer; {элементы файла—целые числа}
h: file of Char; {элементы файла—символы}
Обработка файлов
- Связь файловой переменной с конкретным внешним файлом
Assign(f,’c:\bp\bin\test.dat’);
- Чтение из файла
Reset (f);
Read (f,a);
Close (f);
- Запись в файл
Rewrite (f);
Write (f,a);
Close (f);
- Признак конца файла
Eof(f) - логическая функция
Eof(f)=true;
Eof(f)=false;
While Not Eof(f) do
begin
read(f,a);
write(a,’ ‘);
end;
- Работа с элементами файла
a) Seek(f,N);
b) N:=FilePos(f);
c) Max:=FileSize(f);
- Работа с файлом
a) Erase (f);
b) Rename (f, ‘ c:\bp\bin\g.dat’);
Задача
Создать файл целых чисел Num.dat. Ввод выполнять до введения числа 0.
а)Вывести содержимое файла на экран.
б) Сосчитать сумму элементов файла и записать результат в файл sum.dat.
Program Test1;
Var f,g: file of Integer;
a,sum: Integer;
BEGIN
Assign (f,’num.dat’);
Rewrite(f);
a:=1;
Writeln(‘0—окончание ввода’);
While a<>0 do
Begin
Read(a);
If a<>0 then write(f,a);
End;
Writeln(‘ввод окончен’);
Close(f);
Reset(f);
Sum:=0;
While Not Eof(f) do
Begin
Read(f,a);
Sum:=sum+a;
Write (a, ‘ ‘);
End;
Close(f);
Assign(g,’sum.dat’);
Rewrite(g);
Write(g,sum);
Close(g);
Writeln(sum,’-сумма элементов’);
Readln;
END.
Домашнее задание
1. Дан текстовый файл А. Записать в файл В все четные числа, а в файл С все нечетные числа.
2. В файле DAN записаны целые числа. Найти:
а) сумму чисел в файле;
б) количество чисел в файле;
в) максимальный элемент в файле.
|