Материалы по программированию для 10 класса
  1. Домашнее задание по теме "Программирование"
  2. Одномерные массивы
  3. Файловый тип данных
  4. Поиск: линейный, с барьером, бинарный - скачать конспект
  5. Подпрограммы
  6. Двумерные массивы

Все домашние задания по теме "Программирование"

  1. №2936, 2949, 264. Дополнительно №2956, 304 на сайте http://informatics.mccme.ru. ( к 10 сент)
  2. №63, 64, 65, 66. Дополнительно №68, 1456 на сайте http://informatics.mccme.ru. (к 15 сент)
  3. №69, 72, 223, 224, 226, 1566 (№1566: Поменять местами в массиве максимальный и минимальный элементы. На вход подается N - количество элементов, затем в следующей строке n элементов массива через пробел). Дополнительно №70, 71, 73, 1460, 1461. *300, *1467, *1468 на сайтеhttp://informatics.mccme.ru. (к 17 сент)
  4. Решить все задачи или из базового или из продвинутого списка. (к 22 сент) 
    Текст задач (скачать текст): 

    Базовый уровень

    1. Найти сумму элементов, кратных заданному с клавиатуры числу.
    2. Найти количество положительных и отрицательных  элементов (т.е. 0 не считать).
    3. Найти среднее арифметическое всех элементов массива.
    4. Найти номер последнего отрицательного  элемента массива.
    5. Найти номера (индексы) всех элементов массива с максимальным значением.
    6. Найти количество нечетных элементов массива.
    7. Найти сумму всех четных элементов массива, имеющих четные номера.
    8. Найти количество элементов массива, кратных 3 или 5.
    9. Найти сумму элементов массива, имеющих нечетные индексы.
    10. Найти индексы тех элементов массива, у которых значение больше, чем значение предыдущего элемента.
    11. Найти индексы тех элементов массива, у которых значение индекса больше, чем значение соответствующего элемента.
    12. Заменить  отрицательные элементы массива на противоположные по знаку.
    13. Если элемент массива четный, то прибавить к нему первый элемент. Если нечетный – последний. Первый и последний элементы не изме6нтять.

    Продвинутый уровень

    1. Даны два одномерных массива. Найти элементы, которые есть в первом массиве, и которых нет во втором массиве.
    2. Даны два одномерных массива одинаковой размерности. Построить третий массив, элементами которого будут суммы соответствующих элементов первого и второго массива. Например, c[1]=a[1]+b[1].
    3. Дан первый член арифметической прогрессии и разность между соседними элементами. Сформировать одномерный массив из первых n элементов арифметической прогрессии.
    4. Даны массивы A и B одинаковой размерности. Найти их скалярное произведение:
      a1•b1+a2•b2+…+an•bn.
    5. Из элементов массива A сформировать массив B по правилу:
      b[i]=a[1]+a[2]+…+a[i].
    6. Переставьте в массиве местами второй и минимальный элементы.
    7. Удалить из массива последний максимальный элемент (последнему элементу присвоить 0).
    8. Вставить в массив элемент X, введенный с клавиатуры, после первого максимального элемента.
    9. Удалить из массива все элементы, значения которых меньше нуля.
  5. Домашнее задание: задача, записанная в тетради, на тему "Работа с файлами в Паскале" (Найти последнее вхождение элемента X в массив A методом линейного поиска с барьером. Массив задается из файла.)
    + доделать все долги. (к 24 сент)
  6. Выучить алгоритмы линейного поиска с барьером, бинарного поиска. Решить все задачи или из базового или из продвинутого списка. (к 29 сент) 
    Текст задач: 

    Базовый уровень

    1. В файле записано количество учеников в 10 классе, затем в следующей строке через пробел в невозрастающем порядке записаны в сантиметрах значения роста учащихся. Установить методом бинерного поиска, есть ли в классе ученик ростом 170 см. 
      Пример входных данных Пример выходных данных
      9
      185 180 178 175 170 169 169 165 164

       

      YES

      (сдать задачу)
    2. Есть ли в массиве отрицательный элемент? Установите методом линейного поиска с барьером.
      (сдать задачу)
    3. В файле записаны через пробел значения среднесуточной температуры за август (31 число). Найдите методом линейного поиска с барьером - какого числа температура воздуха впервые за месяц опустилась ниже 15 градусов.

      Пример входных данных

      Пример выходных данных

      31
      28 29 25 24 23 20 25 16 14 ... 12 8 15

      9

      (сдать задачу)

    Продвинутый уровень

    1. (сдать как №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

    2. (№1570) Подсчитайте за один проход массива, сколько его элементов равны максимальному элементу. На вход программе сначала подается значение n<=100 —количество элементов в массиве. В следующей строке входных данных расположены сами элементы массива - целые числа, по модулю не превосходящие 30000. Выдайте количество искомых элементов массива. (Подсказка: счетчик зануляется при каждом найденном наибольшем числе.) 

      Пример входных данных

      Пример выходных данных

      8
      4 3 5 2 5 1 3 5

      3

    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.
  1. Перечислите все формальные параметры.
  2. Перечислите все фактические параметры.
  3. Все локальные переменные.
  4. Все глобальные переменные.
  5. Все параметры-переменные.
  6. Все параметры-значения.
  7. Опишите, в какой последовательности выполняются команды при работе программы.
  8. Если пользователь введет с клавиатуры числа 5 и 7, то какое значение получит переменная h?

Задачи по теме "Подпрограммы"

Процедуры

  1. Вычислить значение выражения: у=a1* х4+а2*х3+аЗ*х2+а4*х+а5. где коэффициенты al, а2, аЗ, а4, а5 и x - это числа, вводимые с клавиатуры.
  2. Упорядочить значения трех переменных а, b и с в порядке их возрастания.
  3. Даны координаты трех вершин треугольника. Найти длины всех его сторон.
  4. Дано натуральное число. Найти все его делители. Подсчитать их количество.
  5. Даны координаты трех вершин треугольника ABC и даны координаты четвертой точки D. Определить, является ли эта точка внутренней точкой треугольника.

Функции

  1. Из первых n натуральных чисел вывести на экран те, сумма цифр которых четна.
  2. Найти значение выражения хy, где х и у целые числа и вводятся с клавиатуры.
  3. Вычислить значение выражения 11+22+...+nn для введенного значения n.
  4. Составить программу для графического изображения делимости чисел от 1 до n (n - исходное данное). В каждой строке надо печатать число и столько плюсов, сколько делителей у этого числа. Например, если исходное данное - число 4, то на экране должно быть напечатано:
    1+ 
    2++ 
    3++
    4+++
  5. Составить программу возведения заданного числа в третью степень, используя следующую закономерность:
    13=1
    23=3+5
    33=7+9+11
    43=13+15+17+19
    53=21+23+25+27+29
  6.  Даны коэффициенты квадратного уравнения. Найти его корни. Дискриминант вычислять в подпрограмме.
  7.  Определить, чему равна максимальная первая цифра n введенных с клавиатуры чисел.
  8. Найти чиста из промежутка от А до В, у которых больше всего делителей.
  9. Найти сумму всех делителей числа.
  10. Определить, является ли число совершенным, то есть равно ли оно сумме своих делителей, кроме самого себя
  11. Среди чисел из интервала от А до В найти все простые.
  12. Составьте программу, проверяющую, является ли число палиндромом (например, число 12721 -палиндром).
  13. Определить, является ли число автоморфным, то есть квадрат этого числа заканчивается этим же числом, например число 6, так как его квадрат 36 заканчивается на 6 или число 25 - его квадрат 625.
  14. Используя функцию из предыдущей задачи, найти первые N автоморфных числа, начиная с числа М.
  15. Составить программу нахождения наибольшего общего делителя нескольких чисел, используя функцию нахождения НОД двух чисел.
  16. Составить программу, вычисляющую наименьшее общее кратное четырех заданных с клавиатуры чисел (использовать функцию из предыдущего примера).
  17. Дано натуральное число n. Выяснить, имеются ли среди чисел n, n+l,..., 2n близнецы, т.е. простые числа, разность между которыми равна двум.

Файловый тип данных в Паскале

Файл—это поименованная область во внешней памяти. В него можно поместить данные или извлечь их оттуда.
Файл в Паскале—последовательность элементов одного типа. Доступ к каждому конкретному элементу файла—только последовательный! (Количество элементов в файле может быть любым.)

Описание переменной файлового типа

Var f: file of Integer; {элементы файла—целые числа}
h: file of Char; {элементы файла—символы}

Обработка файлов
  1. Связь файловой переменной с конкретным внешним файлом
    Assign(f,’c:\bp\bin\test.dat’);
  2. Чтение из файла
    Reset (f);
    Read (f,a);
    Close (f);
  3. Запись в файл
    Rewrite (f);
    Write (f,a);
    Close (f);
  4. Признак конца файла
    Eof(f) - логическая функция
    Eof(f)=true;
    Eof(f)=false;
    While Not Eof(f) do
    begin
    read(f,a);
    write(a,’ ‘);
    end;
  5. Работа с элементами файла
    a) Seek(f,N);
    b) N:=FilePos(f);
    c) Max:=FileSize(f);
  6. Работа с файлом 
    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 записаны целые числа. Найти:
а) сумму чисел в файле;
б) количество чисел в файле;
в) максимальный элемент в файле.