Программирование на языке Pascal

Система Турбо Паскаль для компьютеров. Транслятор, редактор, различные сервисные функции для работы с файлами, библиотеки. Структура программы в Паскале, вод и вывод данных, линейные программы. Условный оператор в программах на Паскале, обработка таблиц.

Рубрика Программирование, компьютеры и кибернетика
Вид методичка
Язык русский
Дата добавления 06.11.2015
Размер файла 740,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

2

Подсчитать число цифр целого положительного числа.

3

Одноклеточная амеба делится каждые 3 часа на 2 клетки. Определить сколько амеб будет через 3, 6,9,12,…,24 часа.

4

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

5

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

6

Начав тренировку спортсмен в первый день пробежал 10км. Каждый день он увеличивал дневную норму на 10% нормы предыдущего дня. Какой суммарный путь пробежит спортсмен за 7 дней.

7

Написать программу, которая выводит таблицу значений функции y=2,4х2+5х -3 в диапазоне от -2 до 2 с шагом 0,5.

8

Написать программу, которая выводит таблицу степеней двойки ( до 10).

9

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

10

Написать программу приближенного вычисления интеграла функции f(x)=5x2- x + 2 методом прямоугольника (методом трапеций).

11

Дано положительное число А. Найдите среди чисел 1, 1 + 1/2, 1 + 1/2 + 1/3, ... первое, большее А.

12

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

13

Составить алгоритм решения задачи: сколько можно купить ваз, салфеток и цветов, платя за вазу 10р., за салфетку-5р., а за цветок - 0,5р., если на 100р. надо купить 100 предметов.

14

Напишите программы вычисления сумм:

а) сорока слагаемых вида п -- i, где i = 1, 2, 3, .... 40, a n -- данное число;

б) п слагаемых вида х + i, где х --- данное число, а i меняется от 1 до п;

в) ста слагаемых, имеющих вид дроби (i + 1) / (i + 2);

г) п слагаемых вида (i + 1)2, где i = 1, 2, .... n;

д) кубов n первых натуральных чисел;

е) n слагаемых sin х + sin2 х + sin3 х + ... + sinn х;

ж) п слагаемых sin х + sin х2 + sin х3 + ... +- sin хn;

15

Напишите программы вычисления произведений:

а) a * (a + 1) * (a + 2) * ... * (a + n - 1);

б) a * (a - n) * (a - 2n) * ...* (a - n2);

в) (x - 1) (x - 2) (х - 3) ... (x - п);

г) 2 * 4 * 6 * ... * (2n);

д) (1 + sin 0.1) (1 + sin 0.2) ... (1 + sin 10);

е) n сомножителей вида (x+i)2;

ж) всех чисел от 1 до 100 кратных 3, но не кратных 6.

16

Написать программу, которая выводит таблицу значений функции y=3,4х2+8х -5 в диапазоне от -2 до 2 с шагом 0,5.

17

Написать программу приближенного вычисления интеграла функции f(x)=6x2- x + 4 методом прямоугольника (методом трапеций).

18

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

19

Написать программу, которая выводит таблицу степеней двойки ( до 10).

20

Подсчитать число цифр целого отрицательного числа.

21

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

22

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

ВОПРОСЫ К ЗАЩИТЕ ЛАБОРАТОРНОЙ РАБОТЫ

1. Перечислите возможные способы организации цикла с заданным числом повторений.

2. Сколько раз выполнится оператор цикла repeat, если условие после слова until истинно при входе в цикл?

3. Объясните, какая разница между условиями, записанными после слов while и repeat для одной и той же задачи.

4.Что такое итерационный процесс? Его отличие от цикла с заданным числом повторений.

5. В чем преимущества использования операторов цикла в программах?

6. Рассказать правила организации цикла.

7. Каково условие выхода из цикла при вычислении суммы бесконечного ряда?

Лабораторная работа №5

  • 3.3 Массивы
  • Цель работы: приобрести навыки решения задач с использованием одномерных массивов, усвоить операторы используемые при работе с массивами: ввода и вывода одномерных массивов, оператора описания.
  • Краткие теоретические сведения.

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

Массив -- именованный набор с фиксированным количеством однотипных данных.

В массивы объединены результаты экспериментов, списки фамилий, различные сложные структуры данных. Так, список из классного журнала 10 "А" является массивом. В массиве могут быть одинаковые данные, поэтому элементы массива различаются по своим порядковым номерам. Если каждый элемент имеет один порядковый номер, то такой массив называется одномерным, если два -- то это таблица из строк и столбцов. Для таблиц первый номер элемента показывает строку, а второй -- столбец, на пересечении которых находится элемент. Все строки таблицы имеют одинаковую длину.

Одномерный массив может быть числовой последовательностью с известным количеством членов. Так же, как и в последовательности, в массиве можно указать элемент с конкретным номером, например a5, или записать общий вид элемента, используя в качестве индекса переменную и указывая диапазон ее изменения: ai, i = 1, 2, ..., n.

Задачи на обработку массивов могут иметь различную формулировку. Например, начинаться со слов "Дано п чисел...", а далее говорится, что требуется сделать с этими числами. Чтобы решить такую задачу на компьютере с использованием языка программирования Паскаль, необходимо выполнить следующее:

1) определить, какие числа даны: целые или вещественные (если об этом конкретно не сказано, то лучше считать их вещественными);

2) назвать весь массив одним именем, которое будет использоваться для каждого элемента, только к нему добавится номер этого элемента (индекс);

3) описать массив в разделе переменных var, тем самым отведя место в памяти для массива;

4) ввести данные в память.

В описании массива имеется специальное слово array (массив), после которого в квадратных скобках через две точки указывается диапазон изменения номеров элементов, затем слово of (из) и пишется тип данных массива. Встретив описание массива, транслятор отводит для него столько последовательных ячеек, сколько указано в квадратных скобках, и такого формата, каков тип данных массива. Эту память в программе можно использовать целиком или частично, вычисляя значения элементов массива или вводя их с клавиатуры (либо с диска). Чаще всего номера элементов меняются от 1 до заданного числа n. Поместив значение п в разделе констант (const), в описании можно указать в качестве переменной n последнее значение (верхнюю границу) номера элемента массива.

Пример описания:

const n = 10;

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

Это описание означает, что для массива а будет отведено десять ячеек оперативной памяти по шесть байтов каждая. Имена ячеек: а1, а2, ... , a10. В Паскале эти имена будут записаны следующим образом: а[1], ... , a[10].

В описании после имени массива а ставится двоеточие, за которым указывается тип данного -- массив. Если в программе несколько массивов одного размера и типа, то, как и для простых переменных, их имена можно перечислить через запятую, а потом, после двоеточия, указать описание массива.

Для ввода данных в память необходимо организовать цикл. Поскольку число повторений ввода данных известно, удобно использовать цикл пересчет. Ввод описанного массива a может иметь вид:

for i: = 1 to n do

read (a[ i ]);

Вводимые значения набираются на клавиатуре через пробел и нажимается <Enter>.

Можно ввод прокомментировать и вводить каждое данное на отдельной строке экрана:for i: = 1 to n do

begin

write (`a[`, i, `] = `);

readln (a [ i ])

end;

При обработке массивов решения многих задач основываются на следующих, более простых, задачах: вычисление суммы (произведения) элементов массива; нахождение наибольшего (наименьшего) элемента; упорядочение элементов по возрастанию или убыванию. Рассмотрим эти базовые задачи.

1. Вычисление суммы элементов массива.

Вычисление суммы элементов массива ничем не отличается, в принципе, от суммирования значений простых переменных (программа Р11). Решение задачи состоит из трех основных этапов: 1) ввод данных; 2) вычисление суммы; 3) печать результатов.

program Р12;

const n = 7;

var a: array [ 1 .. n ] of real; S : real; i: integer;

begin

write (`вводите элементы массива -- `, n, ` вещественных чисел через пробел');

for i: = 1 to n do

read (a [ i ]);

S : = 0;

for i: = 1 to n do

S : = S+a [i];

writeln;

write (` сумма элементов массива S = `, S)

end.

Выполнение программы вычисления суммы элементов массива представлено в таблице:

Исходные данные: 3, -2, 9, 7, -1, 6, 1

I

1

2

3

4

5

6

7

A[i]

3

-2

9

7

-1

6

1

S

0

1

10

17

16

22

23

2. Нахождение наибольшего элемента массива.
В предыдущем примере производились вычисления, переменная S меняла свои значения в процессе решения задачи. Однако большинство задач, решаемых с помощью компьютера, являются невычислительными. К ним относится задача поиска наибольшего элемента в массиве. Трудность при разработке алгоритма решения заключается в том, что надо записать в виде команд компьютеру привычные для человека действия: выделение большего из последовательности чисел. Чтобы лучше представить себе, как последовательно просматривать и сравнивать между собой числа, записанные в памяти, вообразим, что каждое число написано на отдельной карточке и карточки сложены стопкой. В таком случае мы первое число запомним сразу как наибольшее и перевернем карточку. Теперь в нашем распоряжении два числа: одно видим, другое -- помним. Сравнивая их между собой, запомним большее, т. е. если первое было больше, то запоминать новое не придется и надо смотреть следующую карточку. Если второе больше первого, то первое в дальнейшем помнить нет смысла и мы запомним второе. Таким образом, на каждом этапе сравнения мы будем помнить большее из просмотренных чисел и в конце решим поставленную задачу. Записав приведенные рассуждения в виде операторов, получим программу нахождения наибольшего значения. Промежуточные значения и ответ содержит переменная max.

program Р13;

const n = 7;

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

begin

for i: = 1 to n do

begin

write (`a[`, i, `] = `);

readln (a [ i ]);

end;

max: = a [1 ];

for i: = 2 to n do

if max < a [ i ]

then max: = a [ i ];

write (`наибольший элемент массива max = `, max)

end.

3. Упорядочение массива по возрастанию.

Упорядочения массивов по какому-либо признаку называются также сортировками. Существуют различные методы сортировок, различающиеся, в основном, по скорости получения результата. Рассмотрим один из них -- "метод пузырька". Пусть имеется последовательность чисел a1, а2, ..., an, которую необходимо упорядочить по возрастанию. Зафиксируем первый элемент и будем последовательно сравнивать его со стоящими справа. Если какой-то из элементов справа окажется меньше первого, то мы поменяем местами этот элемент с первым и продолжим сравнение уже нового элемента, стоящего на первом месте, с оставшимися справа числами. Если снова выявится элемент, меньший зафиксированного, то повторим перестановку. В результате первого просмотра последовательности на первом месте окажется наименьший из всех элементов, т. е. он, как более "легкий", как бы всплывает наверх (отсюда и название метода -- "метод пузырька"). Теперь зафиксируем второй элемент и повторим просмотр, выполняя при необходимости перестановки элементов, и т. д. Уяснив идею решения, остановимся на двух вопросах: каким образом фиксировать элементы и как осуществить перестановку двух элементов? Чтобы при переборе элементов, стоящих справа от проверяемого, не менялся индекс последнего, индексы фиксируемого и стоящих правее него элементов должны быть различными: i и j. Индекс i изменяется от 1 до п -- 1, индекс j всегда на 1 больше i и пробегает все значения от i + 1 до n. Для каждого значения i индекс j должен последовательно принять все допустимые значения, следовательно, конструкция программы, отражающая полный перебор всех элементов и их упорядочение по возрастанию, представляет собой двойной цикл. При перестановке двух элементов используется третья переменная. Перестановка местами (обмен значениями в памяти) двух переменных а и b выглядит следующим образом: 1) с: = а; 2) a: = b; 3) b: = с. Программа сортировки методом пузырька имеет вид:

program Р14;

const n = 7;

var a : array [ 1.. n ] of real; i, j: integer; c: real;

begin

for i: = 1 to n do

begin

write (`a [`, i, `] = `);

readln (a [ i ])

end;

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;

writeln (`упорядоченный по возрастанию массив `);

for i:= 1 to n do

write (a [ i ]);

end.

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

Одна из важных невычислительных задач -- поиск данного значения среди элементов массива, Такой поиск называется также поиском по ключу. На практике поиск осуществляется в упорядоченном массиве, причем имеются различные алгоритмы поиска. В данном примере осуществим поиск путем сплошного перебора. Если элемент найден, то напечатаем его номер, если нет, то выдадим соответствующее сообщение. Существенным является то, какой из одинаковых элементов массива, равных данному, нас интересует: первый встретившийся при поиске или последний. В этом примере будем искать первый. Поиск осуществляется в цикле, и как только элемент найден, надо выйти из цикла. Для досрочного выхода из цикла for используем оператор goto. Если досрочный выход не произойдет, то значит, элемент, равный данному, в массиве отсутствует. В таком случае выдача сообщения об отсутствии элемента происходит сразу после цикла поиска. Следовательно, чтобы обойти печать номера элемента, надо использовать еще один оператор goto и еще одну метку в программе.

Программа поиска данного элемента в массиве:

program Р15;

label 1,2;

const n = 7;

var a : array [1 .. n ] of real; x : real; i : integer;

begin

writeln (`введите элементы массивов');

for i: = 1 to n do

read (a [ i ]);

writeln;

write (`введите число для поиска в массиве, х = `);

readln (х);

for i: = 1 to n do

if a [ i ] = x then goto 1;

writeln (`такого числа в массиве нет');

goto 2;

1: write (`номер элемента массива, равного данному `, i);

2: end.

Если искать не первый по порядку равный ключу элемент, а последний, то надо использовать цикл обратного пересчета: for i: = n downto 1 do.

Методические указания по работе и задания

Условие задачи

1

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

2

Подсчитать количество ненулевых элементов, введенного с клавиатуры массива.

3

В заданной последовательности целых чисел определите количество и сумму элементов, кратных 10.

4

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

5

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

6

Вычислите среднее арифметическое наибольшего и наименьшего из п чисел.

7

Найдите полупроизведение всех положительных элементов массива

8

Составить программу, которая вычисляет среднюю (за неделю) температуру воздуха.

9

Дано n чисел. Найдите сумму чисел, больших заданного числа а.

10

Проверить, представляют ли элементы введенные с клавиатуры массива возрастающую последовательность.

11

Дан целочисленный массив с количеством элементов n. Напечатать те его элементы, индексы которых являются степенями двойки.

12

Заполнить случайными числами из диапазона [0;1] вещественный линейный массив из N чисел. Найти максимальное значение и его индекс.

13

Пригодность детали оценивается по размеру В, который должен соответствовать интервалу (А+, А-). Определить имеются ли в партии из N деталей бракованные. Если да, то подсчитать их количество, иначе выдать отрицательный результат.

14

При поступлении в вуз абитуриенты, получившие "двойки" на первом экзамене, ко второму не допускаются. В массиве А[n] записаны оценки экзаменующихся, полученные на первом экзамене. Подсчитать, сколько человек не допущено ко второму экзамену.

15

Дан массив чисел. Найти, сколько в нем пар одинаковых соседних элементов.

16

Дано n чисел. Найдите сумму чисел, больших заданного числа а.

17

Проверить, представляют ли элементы введенные с клавиатуры массива возрастающую последовательность.

18

Заполнить случайными числами из диапазона [0;1] вещественный линейный массив из N чисел. Найти максимальное значение и его индекс.

19

Вычислите среднее арифметическое наибольшего и наименьшего из п чисел.

20

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

21

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

22

Вычислите среднее арифметическое наибольшего и наименьшего из п чисел.

ВОПРОСЫ К ЗАЩИТЕ ЛАБОРАТОРНОЙ РАБОТЫ

1. Чем отличается массив от файла?

2. Для чего необходимо описание массива?

3.Что надо сделать, чтобы начать решать на компьютере задачу, формулировка которой начинается со слов: "Дано п чисел..."?

4. Может ли массив содержать разнородные данные?

5. Что надо изменить в программе Р13, чтобы осуществлялся поиск не наибольшего, а наименьшего элемента массива?

6. Какие изменения в программу Р13 надо внести, чтобы одновременно со значением наибольшего числа определялся его порядковый номер?

7. Объясните работу двойного цикла в программе Р14.

Лабораторная работа №6.

  • 4. Обработка таблиц. (двумерных массивов)
  • Цель работы: приобрести навыки в решении задач с использованием двумерного массива.
  • Краткие теоретические сведения
  • Двумерный массив (или прямоугольная таблица) В из n строк и т столбцов в общем виде выглядит следующим образом:
  • b11 b12 b1m
  • b21 b22 b2m
  • . .. . .. ... . ..
  • bn1 bn2 bnm
  • На Паскале имена элементов массива записываются так же, с двумя номерами (индексами): b (1,1), b (1, 2), .... b (1, т), b (2, 1), b (2, 2), ..., b (2, т), .... b (n, т). В памяти компьютера элементы двумерного массива расположены один за другим: после элементов первой строки следуют элементы второй строки и т. д. Если число строк таблицы равно числу столбцов, то такая таблица называется квадратной. Главная диагональ квадратной таблицы проходит из левого верхнего угла в правый нижний. Рассмотрим примеры.

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

Для решения задачи надо выполнить следующие шаги:

1) ввести таблицу в память; 2) найти сумму элементов главной диагонали; 3) напечатать результат. Описание таблицы, как и описание одномерного массива, используется для резервирования памяти. В описании указываются диапазоны для двух номеров: строк и столбцов.

const n = 3;

var b: array [ 1..n, 1..n ] of real; i, j: integer;

При обработке массивов в разделе переменных программы появляются имена индексов элементов: для одномерного массива -- одной, для двумерного -- двух целочисленных переменных.

При вычислении суммы элементов диагонали следует обратить внимание на имена суммируемых элементов: оба индекса имеют одинаковые значение, т. е. в общем виде имя элемента диагонали -- b[ i, i ]. Это означает, что можно рассматривать диагональ, как одномерный массив, и использовать один цикл для вычислений.

program Р16;

const n =3;

var b: array [ 1 .. n, 1 .. n ] of real; i, j: integer; S: real;

begin

writeln (`введите значения элементов таблицы по строкам');

writeln (`в конце каждой строки нажимайте <Enter> `);

for i: = 1 to n do

begin

for j: = 1 to n do

read (b[i,j]);

writeln

end;

S: = 0;

for i: = 1 to n do

S: = S+ b [i, i ];

write (` сумма элементов диагонали таблицы S = ` , S)

end.

2. Нахождение наибольших элементов каждой строки таблицы.

Каждую строку таблицы можно рассматривать, как одномерный массив, и использовать идею нахождения наибольшего значения в программе Р13. Найденные значения будем помещать в одномерный массив. В программе Р17 для каждой строки таблицы переменная а [ i ] играет такую же роль, как переменная mах в программе Р13. Для каждой строки (ее задает переменная i) элемент a [ i ] получает значение первого элемента строки. Затем внутренний цикл по переменной j позволяет просмотреть все элементы данной строки и, если среди них встретится элемент, значение которого больше, чем запомненное в а [ i ], то оно присваивается a [ i ]. Для распечатки результатов работы программы -- массива а -- используется цикл. Имеющийся в программе комментарий, заключенный в фигурные скобки, позволяет при чтении программы выделить основную ее часть.

Пример Р17 -- нахождение наибольших элементов строк:

Массив результатов

Данная таблица

А [1]

6

5

6

1

а [2]

15

4

12

15

а [3]

2

2

-3

0

program Р17;

const n = 3;

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

begin

writeln (`введите значения элементов таблицы по строкам');

writeln (`в конце каждой строки нажимайте <Enter> `);

for i: = 1 to n do

begin

for j: = 1 to n do

read (b [ i, j ]);

writeln end;

{построение массива наибольших значений элементов строк таблицы}

for i: = 1 to n do

begin

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

for j: = 2 to n do

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

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

end;

writeln (`наибольшие числа строк таблицы:');

for i: = 1 to n do

writeln (a [ i ])

end.

3. Нахождение сумм элементов столбцов таблицы.

При обработке таблиц можно осуществлять операции как над строками, так и над столбцами. Для нахождения сумм элементов столбцов можно использовать алгоритм примера Р12. Чтобы лучше понимать работу программы, введем переменную S для вычисления суммы, а затем для каждого столбца запишем полученный результат в массив a, т. е. присвоим его переменной а [j ], где j -- текущий номер столбцов таблицы. Пример Р18 -- суммирование по столбцам:

Данная таблица

5

6

1

4

12

15

2

-3

0

Массив результатов

а [1]

а [2]

а [3]

11

15

16

program Р18;

const n = 3;

var b: array [ 1 .. n, 1 .. n ] of integer; S, i, j: integer;

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

begin

writeln (`вводите значения элементов таблицы по строкам');

writeln (`в конце каждой строки нажимайте <Enter>`):

for i: = 1 to n do

begin

for j: = 1 to n do

read (b [ i, j ]);

writeln;

end;

{построение массива сумм элементов столбцов таблицы}

for j: = 1 to n do

begin

S: = 0;

for i: = 1 to n do

S: = S+ b [i,j];

a [j ]: = s

end;

writeln (`суммы элементов столбцов таблицы:');

for i: = 1 to n do

write (a [ i ])

end.

4. Перестановка строк таблицы.

В прямоугольной таблице В из n строк и m столбцов требуется поменять местами две строки. При решении этой задачи можно воспользоваться алгоритмом обмена значениями двух переменных из программы сортировки (пример Р14). Для этого достаточно организовать цикл по переменной столбца и, используя промежуточную переменную, менять местами каждую пару элементов, стоящих в одном столбце. При заданных номерах строк К и L решение выглядит так:

program Р19;

const n = 3; m = 4;

var b: array [ 1 .. n, 1 .. m ] of real; c: real; i, j, K, L: integer;

begin

write (`введите номера меняемых местами строк таблицы');

readln (К, L);

{ввод таблицы}

for i: = 1 to n do

begin

writeln (i, `-я строка таблицы');

for j: = 1 to m do

read (b [ i, j ]);

end;

{перестановка строк}

for j: = 1 to m do

begin

c:= b[K,j];

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

b [ L, j ]: = с end;

{печать результатов}

writeln;

writeln (`таблица с переставленными строками:')

for i: = 1 to n do

begin

for j: = 1 to m do

write (b [ i, j ]);

writeln

end

end.

Методические указания по работе и задания

Условие задачи

1

Найдите произведения элементов строк прямоугольной таблицы.

2

Найдите наибольший элемент квадратной таблицы.

3

Замените все отрицательные числа их модулями.

4

Найдите наим. элемент квадратной таблицы и замените его нулем.

5

В квадратной таблице, не содержащей отр. элементов, найдите корень квадратный из произведения диагональных элементов.

6

В целочисленной прямоугольной таблице увеличьте на 0,5 все отрицательные элементы.

7

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

8

В квадратной таблице найдите наибольший элемент диагонали.

9

В заданном массиве замените нулем наибольший элемент

10

Поменяйте местами 1-ую и последнюю строки прям-ой таблицы.

11

Составить программу подсчета числа различных элементов двумерного массива.

12

В прямоугольной таблице замените все элементы их квадратами

13

Квадратичную матрицу, состоящую из натуральных чисел повернуть на 90 градусов по часовой стрелке и вывести результат на экран.

14

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

15

Написать программу, которая проверяет, является ли введенная матрица магическим квадратом (сумма элементов которой в каждой строке, в каждом столбе и по каждой диагонали одинакова).

16

В квадратной таблице, не содержащей отр. элементов, найдите корень квадратный из произведения диагональных элементов.

17

В целочисленной прямоугольной таблице увеличьте на 0,5 все отрицательные элементы.

18

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

19

В квадратной таблице найдите наибольший элемент диагонали.

20

В заданном массиве замените нулем наибольший элемент

21

Квадратичную матрицу, состоящую из натуральных чисел повернуть на 90 градусов по часовой стрелке и вывести результат на экран.

22

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

Лабораторная работа №7

  • 5. Оператор варианта. (выбора)
  • Цель работы: отработать практические навыки работы с оператором выбора (варианта).
  • Краткие теоретические сведения
  • Условный оператор позволяет осуществить ветвление программы только по двум направлениям, одно из которых соответствует выполнению проверяемого условия, а другое -- невыполнению этого же условия. Если для переменной необходимо осуществить ряд действий, зависящих от других условий, то надо записывать либо вложенные условные операторы, либо несколько таких операторов подряд. Для такой ситуации удобно использовать оператор варианта. Он соответствует структуре, изображенной на рисунке 6.
  • Данная структура называется также переключателем и выполняется следующим образом. Вход в структуру содержит вычисление или ранее полученное значение переменной (индекса варианта). Это значение может совпасть с меткой, стоящей перед оператором на одной из ветвей переключателя. В таком случае выполняется оператор, помеченный этой меткой, и происходит выход из структуры. Оператор бывает простым или составным, ограниченным операторными скобками begin ... end;. Если значение индекса варианта не совпало ни с одной из меток, то выполняется оператор с номером п + 1 из строки else. Если оператор варианта содержит строку else, то это -- полная форма оператора, если такой строки нет, то используется сокращенная форма оператора варианта.
  • Метки оператора варианта могут быть константами любого типа. Их тип должен совпадать с переменной индекса варианта. Возможно, чтобы индекс варианта был как именем переменной, так и выражением соответствующего типа.
  • Рис. 6. Структура оператора варианта

На языке Паскаль оператор варианта имеет вид:

case индекс варианта of

метка1: оператор 1;

метка2: оператор 2;

. . .

метка n: оператор n;

else оператор n + 1

end;

Пример программы, содержащей оператор варианта. Одной из распространенных задач раздела физики "Молекулярно-кинетическая теория" является задача, связанная с расчетом числа молекул в единице объема в теле заданной массы и в теле известного объема. Для такой задачи можно построить программу-решатель.

Дано: молярная масса вещества М, плотность данного вещества Р, масса R или объем данного тела V. Требуется найти число молекул К: 1) в единице массы вещества; 2) в теле с заданной массой; 3) в единице объема вещества; 4) в теле с заданным объемом. Для решения задачи воспользуемся формулой:

К= (NA/M)R,

где NA = 6,022 * 10 23 г/моль -- число Авогадро.

На основании этой формулы получаем расчетные формулы для программы:

1) К = N A/ М; 2) К= N AR/M; 3) К= NA Р V/ М; 4) К= NA Р/ М.

Программа имеет вид:

program Р20;

const NA = 6.022 E20;

var N: integer; М, R, Р, V, К: real;

begin

writeln (`зная постоянную Авогадро, плотность Р данного вещества');

writeln (`и его молярную массу М, можно найти число молекул в');

writeln (`1. в единице массы вещества');

writeln (`2. в теле массой R');

writeln (`3. в единице объема');

writeln (`4. в теле объемом V');

write (`введите номер решаемой задачи');

readln (N);

write (`введите исходные данные: М = `);

readln (М);

case N of

1: К: = NA/M;

2: begin

write (`R = `);

readln (R);

K: = NA -R/M;

end;

3: begin

write (`плотность вещества Р = `);

readln (Р);

write (`V= `);

readln (V);

K: = NA *P-V/M;

end;

4: begin

write (`плотность вещества Р = `);

readln (Р);

К: = NA "P/V end;

end;

write (`число молекул К = `, К')

end.

Методические указания по работе и задания

Условие задачи

1

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

2

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

3

Написать программу, которая после введения с клавиатуры числа в диапазоне от 1 до 999, обозначающего денежную единицу, дописывает слово "рубль" в правильной форме.(12 рублей, 21 рубль …)

4

Написать программу, которая вычисляет дату следующего дня.

5

Найти наибольшее из двух действительных чисел, используя оператор выбора.

6

Написать программу, определяющее животное, соответствующее введенному году по китайскому гороскопу.

7

Преобразуйте символ, если он является строчной русской буквой, в заглавную букву. Предполагается использование альтернативной кодировки ASCII.

8

Написать программу, которая после введения с клавиатуры числа в диапазоне от 1 до 99, обозначающего денежную единицу, дописывает слово "копейка" в правильной форме (5 копеек, 41 копейка …).

9

Написать программу, которая после введения с клавиатуры числа в диапазоне от 1 до 99, обозначающего возраст человека, дописывает слово "год", "года", "лет" соответственно во фразу "Мне … лет" ( 5 лет, 2 года, 41год …).

10

Написать программу, определяющее по заданному году и номеру месяца количество дней в этом месяце.

11

Написать программу, которая читает натуральное число в десятичном представлении (до 10000), а на выходе выдает это же число на естественном языке (7 семь, 204 двести четыре, 12 двенадцать).

12

Написать программу, позволяющую получить словесное описание школьных оценок (1-плохо, 2-неудовлетворительно, 3-удовлетворительно, 4-хорошо, 5-отлично).

13

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

14

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

15

Написать программу, которая по данному натуральному числу от 1 до 12 (номеру месяца) выдает все приходящиеся на этот месяц праздники (например число1, то: 1января-Новый год, 7 января - Рождество).

16

Написать программу, определяющее по заданному году и номеру месяца количество дней в этом месяце.

17

Написать программу, которая читает натуральное число в десятичном представлении (до 10000), а на выходе выдает это же число на естественном языке (7 семь, 204 двести четыре, 12 двенадцать).

18

Написать программу, позволяющую получить словесное описание школьных оценок (1-плохо, 2-неудовлетворительно, 3-удовлетворительно, 4-хорошо, 5-отлично).

19

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

20

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

21

Написать программу, которая по данному натуральному числу от 1 до 12 (номеру месяца) выдает все приходящиеся на этот месяц праздники (например число1, то: 1января-Новый год, 7 января - Рождество).

22

Написать программу, которая после введения с клавиатуры числа в диапазоне от 1 до 99, обозначающего денежную единицу, дописывает слово "копейка" в правильной форме (5 копеек, 41 копейка …).

Лабораторная работа №8

  • 6. Подпрограммы
  • Цель работы: приобрести навыки в решении задач с использованием процедур, функций, подпрограмм.
  • Краткие теоретические сведения

При разработке программы иногда появляются повторяемые группы действий или возникает необходимость расчленить программу на функциональные модули, сделать ее структуру иерархической. Для этого во всех языках программирования существуют средства организации подпрограмм. Для решения сложной задачи рекомендуется сначала алгоритм, а затем и программу разрабатывать "сверху вниз", от более общего плана к детальному. В таком виде главная программа соответствует укрупненному плану решения задачи, а ее команды -- вызову соответствующей подзадачи, реализованной в виде подпрограммы. Идя по такому пути создания программы, можно отдельные мелкие функции реализовывать сначала в виде небольших подпрограмм, проверять их на контрольных примерах и, только убедившись в правильности работы, включать в состав основной программы. Это удобнее проделывать, имея в распоряжении язык, позволяющий полностью выделить подпрограмму из текста основной программы в виде отдельного модуля. Использование подпрограмм дает возможность разрабатывать программу по частям, поручать реализацию больших проектов группам разработчиков. В состав групп входят специалисты данной науки или производства, из области которой решается задача, разрабатывающие алгоритм и структурирующие данные, а также программисты, объединяющие алгоритм и данные в программе для компьютера.

В Паскале подпрограмма является частью основной программы, ее описание располагается между разделом var главной программы и ее программным блоком (первым begin). Подпрограмм может быть несколько, их описания располагаются в произвольном порядке одно за другим. Описание подпрограммы можно сравнить с записываемой в математике формулой "в общем виде", в которую при расчетах подставляются конкретные значения. Поскольку далеко не каждую задачу удается свести к некоторой формуле, но всегда можно записать алгоритм ее решения, подпрограмма -- это та же инструкция по решению некоторой задачи. Как и формула, подпрограмма используется для различных данных, передаваемых из главной программы или других подпрограмм.

Подпрограмма -- это специальным образом оформленный алгоритм, который может многократно использоваться при решении более общей задачи.

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

Подпрограммы имеют структуру, аналогичную главной программе. Они содержат заголовок со специальным словом -- признаком подпрограммы, имя и, при необходимости, списки передаваемых на обработку и получаемых из подпрограммы данных. Затем могут располагаться все имеющиеся в главной программе разделы описаний: меток, констант, типов и переменных. В этих разделах описываются данные, используемые только внутри подпрограммы и являющиеся промежуточными при ее выполнении. Такие данные называются локальными. В подпрограмме могут участвовать переменные, описанные в главной программе. Эти данные называются глобальными, их значения и подпрограмма, и главная программа берут из общей памяти.

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

Рассмотрим способы организации подпрограмм в Паскале.

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

Процедуры без параметров.

Описание процедуры имеет вид:

procedure имя;

{описание локальных переменных}

begin

{операторы}

end;

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

Рассмотрим пример вычисления наименьшего общего кратного двух натуральных чисел НОК (X, Y), которое можно вычислить, используя наибольший общий делитель этих чисел, по формуле:

HOK(X,Y) = Х*У/НОД(Х,У).

При составлении программы оформим как процедуру без параметров программу Р7 -- вычисление НОД по алгоритму Евклида. Результат работы процедуры будет заносится в ячейку с именем М, переменная М описана как глобальный параметр и используется и главной программой, и процедурой. В программе будем вычислять НОК нескольких чисел, занеся их в массив С. Этот массив формируется в разделе констант главной программы. Если данные определяются в разделе констант, то они не требуют дополнительного описания в разделе переменных (var). Переменная Х сначала содержит значение первого числа, а затем ей присваивается результат -- НОК двух первых чисел. Переменная Y имеет своим значением второе число из пары, для которой вычисляется наименьшее общее кратное. Таким образом, при каждом шаге цикла вычисляется НОК двух чисел, первое из которых Х содержит результат предыдущего шага.

Вызов процедуры НОД вычисления наибольшего общего делителя осуществляется только по имени: NOD;

Рассмотрим пример выполнения программы вычисления НОК нескольких чисел.

Х := НОК (X, Y)

36

108

216

216

1080

Y:=C[i]

54

72

18

15

М := НОД (X, Y)

18

36

18

3

Текст программы имеет вид:

program Р21;

const c: array [1 .. 5] of integer = (36, 54, 72, 18, 15);

var x, y, i, m: integer;

procedure NOD; {заголовок процедуры}

var a, b: integer; {описание локальных переменных}

begin

a: = x; b: = у; {сохранение исходных данных}

while а <> b do

if a > b then a: = a -- b

else b: = b -- a;

m: = а; {результат работы процедуры присваивается глобальной переменной}

end; {конец процедуры}

begin {начало главной программы}

x: = с[1 ];

for i: = 2 to 5 do

begin

y:= c[i];

NOD; {вызов процедуры без параметров}

x: = x * у div m {div -- деление нацело для целочисленных данных}

end;

write (` НОК = `, x)

end. {конец главной программы}

Процедуры с параметрами. Для удобства передачи данных в процедуру и получения из нее результата используются формальные и фактические параметры. Формальные -- условные обозначения в описании процедуры -- описываются в ее заголовке, фактические -- с которыми требуется выполнить процедуру -- перечисляются при вызове процедуры, формальные и фактические параметры должны соответствовать по количеству, типу и порядку следования. Формальные параметры описываются только в заголовке процедуры и больше нигде. Их описание похоже на описание данных в разделе переменных и может также содержать слово var. Слово var в заголовке процедуры ставится перед теми параметрами, имена которых соответствуют выходным данным. Фактические параметры, соответствующие формальным, перед которыми стоит слово var, могут быть только именами переменных. Перед именами формальных переменных, являющимися входными данными процедуры, слово var указывать не обязательно. Если перед формальным параметром в заголовке процедуры нет слова var, то ему может соответствовать формальный параметр, имеющий вид выражения соответствующего типа. Если для входных данных процедуры при описании формальных параметров указано слово var, то им также соответствуют фактические параметры -- имена переменных.

Например, процедура NOD с параметрами может иметь заголовок:

procedure NOD (a, b: integer; var k: integer);

Вызов этой процедуры: NOD (x, у, m);

или: NOD (36, 54, m);

Переменные в заголовке процедуры -- формальные параметры, заменяемые при выполнении процедуры на конкретные значения переменных х и у или числа 36 и 54. В заголовке процедуры NOD описаны формальные параметры: a и b -- входные данные, для которых находится наибольший общий делитель; k -- результат работы процедуры. При вызове процедуры переменная а примет значение x, а переменная b -- значение у. Результат работы процедуры при вызове попадет в ячейку с именем т, которой соответствует формальный параметр k.

Программа при использовании процедуры с параметрами примет вид:

program Р22;

const с: array [1 ..5] of integer = (36,54,72,18,15);

var x, у, i, m: integer;

procedure NOD (a, b: integer; var k :integer); {заголовок процедуры}

begin

while a <> b do

if a > b then a: = a - b

else b: = b - a;

k: = а {значение переменной k-- результат работы процедуры}

end; {конец процедуры}

begin {начало главной программы}

х:= с[1];

for i: = 2 to 5 do

begin

y:= c[i];

NOD (x, y, m); {вызов процедуры с фактическими

параметрами}

х: = х * у div m

end;

write (` НОК = `, х)

end. {конец главной программы}

Например. Найдем с помощью процедуры среднее арифметическое, наибольший и наименьший элементы массива.

program Р23;

const n = 10;

type R = array [ 1 ..n ] of real;

var Y: R; A, B, C: real; i: integer;

procedure Stat (X : R; var S, min, max: real);

begin

S: = 0; min: = x [1]; max: = x [1];

for i: = 1 to n do

begin

S: = S+x[i];

if x [ i ] < min then min: = x [ i ];

if x [ i ] > max then max: = x [ i ]

end;

S: = S/n

end;

begin {главная программа}

for i: = 1 to n do

read (Y [ i ]);

Stat (Y, А, В, С); {вызов процедуры}

writeln;

write (`среднее = `, А, `наименьшее = `, В, `наибольшее = `,C);

end.

В программе Р23 появился новый раздел описаний -- раздел типов данных type. В этом разделе можно описать новый тип данных через уже известные типы, которые могут быть так же ранее описаны в данном разделе. Тип данных R -- это массивы из n вещественных чисел, R -- имя типа. В дальнейшем этот тип позволяет сократить описания, он используется в главной программе при описании исходного массива Y и в заголовке процедуры при описании формального параметра -- массива X.

Главная программа состоит из трех основных этапов: 1) ввода данных -- массива Y; 2) вызова процедуры Stat с фактическими параметрами -- массивом Y и получаемыми результатами, попадающими соответственно в ячейки А (среднее значение), В (наименьшее) и С (наибольшее); 3) печати результатов работы программы.

Подпрограммы-функции.

Подпрограмма, имеющая единственный результат, может быть оформлена, как функция. Описание функции имеет вид:

function имя_функции (описание входных данных):

тип_результата;

{описания локальных переменных}

begin

{операторы}

имя_функции: = результат;

end;

После описания формальных параметров, которые являются аргументами функции, в заголовке указывается тип результата, т. е. тип самой функции. Это описание относится к имени функции, которому необходимо присвоить значение результата работы подпрограммы. Как и процедура, функция может содержать все четыре раздела описаний локальных переменных.

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

Функция вызывается с помощью указателя. Указатель -- это имя функции, после которого в круглых скобках перечислены фактические параметры -- аргументы функции. Указатель имеет вид:

имя_функции (список фактических параметров)

Указатель может появиться в выражении соответствующего типа, в условиях операторов if, while и repeat после слова until, а также в операторе печати write. Примерами являются встроенные арифметические функции, такие, как sin(x):

write (sin(x));

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


Подобные документы

  • Система программирования Турбо Паскаль. Главные особенности языка С++. Составной и условный оператор в Паскале, алгоритм работы. Метка в Турбо Паскале. Счетный оператор цикла FOR. Описание логической структуры. Свойства функции PieSlice и initgraph.

    курсовая работа [20,8 K], добавлен 23.12.2010

  • Правила описания множественных типов данных, приемов использования множеств и операций над множествами в Паскаль-программах. Разработка в Турбо Паскале программы вывода всех согласных букв, которые входят хотя бы в одно слово заданного предложения.

    контрольная работа [30,8 K], добавлен 25.12.2010

  • Структура программы в Турбо Паскале и определение переменной в ней. Понятие идентификатора и его основные ограничения. Операторы присваивания в языке программирования. Процедура ввода-вывода информации. Способы описания массива, обработка его элементов.

    контрольная работа [134,5 K], добавлен 28.09.2012

  • Международный стандарт на язык программирования Паскаль. Приемы объектно-ориентированного программирования в Турбо Паскале. Символы языка, его алфавит. Этапы разработки программы. Понятие алгоритмов и алгоритмизации. Структура программ на Паскале.

    курсовая работа [29,8 K], добавлен 28.02.2010

  • Программирование на языке Паскаль: алфавит, решение задач, простейшие программы, разветвляющие программы, циклические программы, ввод-вывод, массивы, подпрограммы, строковые данные, записи, файлы, использование библиотеки CRT, графика в Паскале.

    учебное пособие [211,1 K], добавлен 30.03.2008

  • Основные сведения о системе программирования Турбо Паскаль. Структура программы на Паскале и ее компоненты. Особенности и элементы языка Турбо Паскаль. Порядок выполнения операций в арифметическом выражении, стандартные функции и оператор присваивания.

    лекция [55,7 K], добавлен 21.05.2009

  • Алгоритмы, алфавит языка, структура программы, написанной на Турбо Паскале. Целые, вещественные, логические, символьные типы данных, их совместимость. Линейные алгоритмы, пустой и составной операторы, простейший ввод и вывод, разветвляющиеся алгоритмы.

    курсовая работа [49,8 K], добавлен 03.11.2009

  • Особенности программирования на языке Паскаль в среде Турбо Паскаль. Линейные алгоритмы, процедуры и функции. Структура данных: массивы, строки, записи. Модульное программирование, прямая и косвенная рекурсия. Бинарный поиск, организация списков.

    отчет по практике [913,8 K], добавлен 21.07.2012

  • Понятие и принципы реализации оператора ветвления, его значение и роль в языке программирования Паскаль. Основные логические операции и сложные логические выражения, их содержание. Программа упорядочения значений двух переменных, ее этапы и методы.

    презентация [187,9 K], добавлен 02.04.2014

  • Основные сведения о языке программирования Pascal. Листинг программы с комментариями. Диагональ элементов вектора и матрицы. Использование команд ввода-вывода информации. Быстродействие выполнения программы при компиляции. Отражение процессов вычисления.

    курсовая работа [1,9 M], добавлен 05.05.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.