Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Процедура вывода информации на печать

Поиск

Общий вид оператора:

write(p1, p2, …, pn);

или

writeln(p1, p2, …, pn);

Здесь p1, p2, …, pn -список выражений, значения которых выводятся на печать.

Оператор writeоставляет курсор в конце выведенной строки текста.

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

Кроме значений выражений, на печать можно выводить и произвольный набор символов, заключенный в апострофы, например

writeln(’p=’,p);

Этот оператор выполняется так: сначала выводятся символы, заключенные в апострофы. Затем выводится значение переменной р, например 13.5. На экране в результате работы оператора появится:

р=13.5

Пример 1. Вычислить длину окружности радиуса 5,785.

program t10;

(* Программа вычисления длины окружности*)

const r=5.785;

var l:real;

Begin

l:=2*3.1416*r;

writeln(' l=',l);

End.

либо

program t11;

var r:real;

Begin

readln(r);

writeln(' l=',2*3.1416*r);

End.

Имеется возможность задать ширину поля (число позиций) М для выводимой величины Р:

Write (P1:M1, P2:M2, …PN:MN);

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

Например,

Write (P:10:2);

Здесь под Р отводится 10 позиций, 2 из них под дробную часть.

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

Program Input_Output;

{Программа вводит два целых числа

и выводит частное от деления 1-го на 2-е}

Var

n1,n2:Integer; {n1 и n2 - вводимые целые}

x:real; {x - результат}

Begin

Write('n1='); {Сообщение о вводе n1}

ReadLn(n1); {Ввод n1}

Write('n2='); {Сообщение о вводе n2}

ReadLn(n2); {Ввод n2}

Х:=n1/n2; {Вычисление результата}

WriteLn('---------------------------'); {Печать таблицы}

WriteLn('| n1 | n2 | Частное |');

WriteLn('---------------------------');

WriteLn(n1:8,n2:8,x:8:4);{Вывод n1, n2 и x}

WriteLn('-------------------------');

End.

 


16. Переменные типа массив. Назначение, описание и доступ к элементам массива. Примеры.

Структурированные типы

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

Общие понятия.

Рассмотрим следующую задачу: ввести с клавиатуры 20 действительных чисел и вычислить их сумму, при этом каждое из чисел сохранить в памяти для последующей обработки. Мы будем вынуждены ввести 20 имен переменных, что, естественно очень неудобно.

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

К структурированным типам относятся массивы, записи, множества и файлы.

Массивы.

МАССИВ — а) область машинной памяти, в которой могут размещаться совокупности значений одного и того же типа

б) набор переменных, объединенных общим назначением и имеющих одно имя.

Элемент массива — отдельная переменная, входящая в массив.

Размерность массива — количество элементов, которое содержит массив.

Индекс — числовой или буквенный указатель, которым снабжаются математические выражения для того, чтобы отличать их друг от друга.

Индекс элемента массива — номер элемента в массиве.

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

При назначении массиву имени соблюдаются те же требования, какие предъявляются к именам переменных простых типов.

Доступ к элементам массива.

Массив можно условно изобразить в виде прямоугольника с n делениями, каждое деление — это элемент массива, он имеет свой номер (индекс). Индекс записывается рядом с именем массива в квадратных скобках.

Пример А[1] — первый элемент массива; А[5] - пятый элемент массива; А[1] — 1-тый элемент массива, в последнем примере мы указали в качестве индекса переменную 1. Каждая переменная в Паскале должна быть объявлена, следовательно, и переменная, указывающая индекс (индексная переменная) тоже.

Прежде чем приступить к описанию типа, назначим имена — имя типа массив и имя переменной, которая относится к типу массив. В описании типа мы должны указать, что объявляется тип массив для этого используется служебное слово аrrау, указать границы изменения индексов. У нас 20 элементов, следовательно, индекс изменяется от 1 до 20. Синтаксически это записывается следующим образом 1..20, называется такая запись —диапазон.

Все вышесказанное записывается в программе на языке Паскаль следующим образом:

A:array [1..20] of integer

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

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

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

 

Создание (описание) массивов

Итак, мы решили создать и использовать в своей программе массив из чисел. Для примера возьмем ту программу, которую я придумал в описании понятия массива: найти среднее арифметическое среди 100 чисел.

Массив - это переменная и как все переменные описывается в разделе var программы. Описание переменной - массива состоит из:

o Имени переменной;

o Служебного слова Array, означающего "массив";

o Описания размера массива (в нашем случае 100 чисел). Диапазон записывается в квадратных скобках - [ и ]. Внутри пишется сам диапазон, в виде двух чисел, разделенных двоeточием: начало..конец;

o Задании типа для элементов массива (в нашем случае - целые числа, или Integer). Задание типа начинается со служебного слова of;

Вот пример описания массива на 100 чисел:

Var

Mas: Array [1..100] of Integer;

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

Теперь в программе можно обратиться к любому элементу этого массива - от 1 до 100. Делается это посредством указания имени переменной с номером элемента в квадратных скобках. Вот примеры:

Begin

Mas[1]:= 100;

Readln(Mas[2]);

Write(Mas[4);

if Mas[100] < 18 then Halt;

Mas[50]:= Mas[49] + Mas[1];

End.

Думаю, из примера видно, что с отдельным элементом массива можно делать все, что с любой переменной.

Ну а теперь давайте всеже напишем нашу программу.

Program N1; var M: Array [1..100] of Integer; A: Real; I: Byte; begin Randomize; For I:= 1 to 100 do M[I]:= Random(500); For I:= 1 to 100 do A:= A + M[I]; A:= A / 100; Write('Среднее арифметическое всех чисел массива: ', A); end.

Вот такая программа. Здесь я использую новую функцию Random, думаю, она вам не знакома. Очень интересная функция.

Функция Random(A: Integer);.

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

Инициализация датчика случайных чисел (ДСЧ) происходит вызовом процедуры Randomize. Вы видите ее перед циклом.

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

Этот пример хорошо демонстрирует создание массива и доступ к его элементам.

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

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

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

Program N2; var M: Array [1..10] of Integer; Max: Integer; I: Byte; begin Writeln('Введите 10 чисел: '); For I:= 1 to 10 do begin Write('N',i,': '); Readln(M[i]); end; Max:= M[1]; For I:= 1 to 10 do if Max < M[i] then Max:= M[i]; Write('Максимальное число: ', Max); Readln; end.

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

o Сначала за максимальное принимается первое число;

o После оно сравнивается со всеми оставшимися числами, при этом:

o Если следующий элемент больше принятого за максимум (переменная Max), то оно принимается за максимум.

o После сравнения всех элементов в конце концов остается одно число, которое больше всех в массиве.

Надеюсь, это не сложно. Если вы не поняли работы этого алгоритма, то задумайтесь получше, перепишите программу и поэкспериментируйте. В дальнейшем таких алгоритмов будет множество. В большинстве своем они простые, но есть и довольно (и даже очень!) сложные. Без понимания таких простеньких на первых порах алгоритмов невозможно усвоить серьезные.

Паскаль. Двухмерные массивы.

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

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

         

, но и дополнительные элементы - например, помимо строк массив имеет и столбцы:

         
         
         
         
         

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

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

К примеру, имеем вышеописанный массив - таблица Пифагора то 1го до 5ти. Как мы можем обратиться к элементу, который находится в строке 5, столбце 3 (число 15)? Вот и всплывает упомянутое выше измерение двумя индеками. Мы так и поступим: в качестве первого индекса укажем номер строки, в качестве второго - столбец. Смотрите, что получиться:

Mas[5,3];

Думаю, вы поняли как происходит обращение к элементам такого массива. Более конкретные примеры использования см. ниже. А теперь давайте разберемся, как же такие массивы создаются в программе.

Создание 2х мерных массивов

Создать такой массив не сложнее, чем одномерный. Вот пример:

Var

Mas: Array[1..5, 1..5] of Integer;

Здесь создается двухмерный массив, размером в 5 строк и 5 столбцов. Сначала указывается количество строк, после - через запятую - количество столбцов. Вот еще один пример создания массива:

Var

Mas: Array[1..50, 1..25] of Integer;

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

Program N1;uses Crt;var Mas: Array[1..10, 1..10] of Integer; I, J: Byte;Begin ClrScr; For I:= 1 to 10 do For J:= 1 to 10 do Mas[I, J]:= I * J; For I:= 1 to 10 do Begin For J:= 1 to 10 do If Mas[I, J] < 10 then Write(Mas[I, J], ' ') else Write(Mas[I, J], ' '); Writeln; end; Readln;end.

Запустите эту программу. Видите, массив распечатыват таблицу умножения, причем наглядно видна сама структура массива. Сразу бросается в глаза, что это 2х мерный массив, не так ли?

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

Также заметьте, я использую изученый модуль CRT - и его процедуру ClrScr. Учитесь использовать модули, это очень важно.

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

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

Бегущие огни:

uses crt; const n=80; Var A:array[1..n] of byte; i,r:byte; c:char;Begin clrscr; write(' Esc -> Exit'); for i:=1 to n do a[i]:=random(2); repeat for i:=1 to n do begin gotoxy(i,4); if a[i]=0 then write('*') else write('-'); gotoxy(81-i,8); if a[i]=0 then write('*') else write('-'); end; r:=a[1]; for i:=1 to n-1 do a[i]:=a[i+1]; a[n]:=r; c:=readkey; until c=#27;end.

Запустите эту программу. Теперь нажмите любую клавишу. Видите, происходит сдвиг огней? Разноцветные огни реализованы двумя символами " * " и " - ".

Как же Огонек бежит по кругу? Если цепочку лампочек представить массивом чисел (1010010) то 1 шаг огней, есть сдвиг элементов массива на 1 (0100101) то есть:

a[1]:=a[2];

a[2]:=a[3]; и т.д.

a[n]:= {то что было в a[1], надо запомнить! }

Итак сдвиг всех элементов массива на 1 шаг влево это:

· R:=a[1];

· for i:=1 to N -1 do a[i]:=a[i+1];

· a[n]:=R;

 


17. Алфавит языка Паскаль. Идентификаторы.

Алфавит и словарь языка программирования Паскаль. Программа формируется из предложений, состоящих из лексем и разделителей, которые в свою очередь формируются из конечного набора литер, образующих алфавит языка Pascal. Этот язык состоит из букв латинского алфавита (прописных – А, В, С, D... X, Y, Z, строчных – а, b, с... x, у, z), арабских цифр (0, 1, 2, 3,4, 5, 6, 7,8,9) и специальных символов.

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

· пробел,

· конец строки,

·; – точка с запятой (конец предложения)

· комментарий, представляющий собой текст, ограниченный слева и справа фигурными скобками.

Лексемы включают: зарезервированные слова, идентификаторы (стандартные и пользовательские), специальные символы (простые и составные), метки.

· Зарезервированные слова представляют собой составную часть языка, имеют фиксированное начертание и определенный смысл (например, зарезервированное слово VAR открывает раздел описания переменных).

· Стандартные идентификаторы служат для определения заранее зарезервированных идентификаторов предопределенных типов данных, констант, функций и процедур (например, стандартная функция ABS возвращает модуль своего аргумента).

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

Правила составления идентификаторов.

· Идентификатор начинается с буквы, или знака подчеркивания.

· Содержит только буквы, цифры или знак подчеркивания.

· Между двумя идентификаторами должен стоять разделитель.

· Максимальная длина 127 символов. Все символы значимы.

· Идентификатор не может повторять зарезервированное слово.

· Если идентификатор пользователя повторяет стандартный, то действие стандартного идентификатора – отменяется.

Примеры пользовательских идентификаторов: x, s, s23, asd_sd45.

Специальные символы:

Простые: «+», «-», «*», «/», «=», «>», «

Составные: «:=», «», «..», «=».

Метки используются для идентификации операторов в программе при переходе по оператору GOTO. Правила написания меток отличаются от правил составления идентификаторов, следующим – на первом месте может стоять цифра.

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

Для обозначения заранее определенных разработчиками языка типов данных, констант, процедур и функций служат стандартные идентификаторы, например: integer, Sin, Cos, Ln, Sqr, Sqrt, Read, Readln, Write, Writeln. В этом примере стандартный идентификатор Sin вызывает функцию, вычисляющую синус заданного угла, Read, Readln вызывают процедуру, организующую ввод данных, Write, Writeln вызывают процедуру, организующую вывод данных. Любой из стандартных идентификаторов, в отличие от зарезервированных слов, можно переопределить, но это чаще всего приводит к ошибкам. Поэтому на практике стандартные идентификаторы лучше использовать без каких-либо изменений.

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

Компилятор Turbo Pascal строго следит за этим, и если это требование не соблюдается, то компиляция прерывается, а на экран выводится сообщение об ошибке «Error 4: Duplicate identifier» и указывается дублирующийся идентификатор.

В идентификатор не могут входить пробелы и специальные символы. Обратите внимание, что буквы русского алфавита не могут входить в идентификатор Turbo Pascal.

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

1. Идентификатор может начинаться только с буквы или знака подчеркивания (исключение составляют метки, которые могут начинаться также и с цифры);

2. Идентификатор может состоять из букв, цифр и знаков подчеркивания (пробелы, точки и другие специальные символы недопустимы);

3. Между двумя идентификаторами должен быть по крайней мере один пробел;

4. Максимальная длина идентификатора составляет 127 символов, но значимыми являются только первые 63 символа;

5. При записи идентификаторов можно использовать как прописные, так и строчные буквы. Компилятор не делает различий между ними, хотя они и имеют различные ASCII-коды. На практике рекомендуется применять эту особенность для более простого чтения и понимания значений идентификаторов. Так, вместо идентификатора nomerotdela лучше написать NomerOtdela, выделив прописными буквами каждую из двух смысловых частей.

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

Примеры:

Metkal2

2graph – ошибка, идентификатор начинается с цифры

Block_56

Nomer.Doma – ошибка, идентификатор содержит точку

Сумма – ошибка, идентификатор содержит буквы русского алфавита.

 


18. Типовые алгоритмы обработки массивов. Заполнение массивов данными, вывод массивов на экран.

Для этого мы должны составить алгоритм и программу осуществляющие обработку данных.



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 1084; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.1.63 (0.011 с.)