Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Знакомство со средой программирования Turbo Pascal 7.0



МЕТОДИЧЕСКИЕ УКАЗАНИЯ

к выполнению лабораторных работ по курсам
«Информатика» и «Специальные главы информатики»
для студентов направлений 150400 «Металлургия»,
140700 «Ядерная энергетика и теплофизика» и
131000 «Нефтегазовое дело» очной формы обучения

 

 

Воронеж 2014


Составители: канд. техн. наук С.А. Кострюков,

канд. техн. наук В.В. Пешков,

канд. физ.-мат. наук Г.Е. Шунин

 

УДК 004.42+004.43

 

Основы программирования на Турбо Паскале: методические указания к выполнению лабораторных работ по курсам «Информатика» и «Специальные главы информатики» для студентов направлений 150400 «Металлургия», 140700 «Ядерная энергетика и теплофизика» и 131000 «Нефтегазовое дело» очной формы обучения / ФГБОУ ВПО «Воронежский государственный технический университет»; сост. С.А. Кострюков, В.В. Пешков, Г.Е. Шунин. Воронеж, 2014. 56 с.

 

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

Издание соответствует требованиям Федерального государственного образовательного стандарта высшего профессионального образования по направлениям 150400.62 «Металлургия», 140700.62 «Ядерная энергетика и теплофизика» и 131000.62 «Нефтегазовое дело», профилям «Технология литейных процессов», «Техника и физика низких температур» и «Эксплуатация и обслуживание объектов транспорта и хранения нефти, газа и продуктов переработки» по дисциплинам «Информатика» и «Специальные главы информатики».

Методические указания подготовлены на магнитном носителе в текстовом редакторе Microsoft Word 2003 и содержатся в файле MU-Pascal.doc.

 

Ил. 6. Табл. 2. Библиогр.: 5 назв.

Рецензент канд. физ.-мат. наук, доц. В.В. Ломакин

 

Ответственный за выпуск зав. кафедрой д-р физ.-мат. наук, проф. И.Л. Батаронов

 

Издается по решению редакционно-издательского совета Воронежского государственного технического университета

 

ã ФГБОУ ВПО «Воронежский государст-

венный технический университет», 2014


ВВЕДЕНИЕ

 

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

Паскаль был разработан Никлаусом Виртом в 1968-1970 гг. и поначалу предназначался для обучения программированию, однако затем, с появлением Турбо Паскаля, получил широкое распространение благодаря наглядности программ, удобству и легкости при изучении. Он послужил основой для разработки других языков программирования (Ада, Модула-2), на его основе создана популярная RAD-среда Delphi.

Наиболее популярная реализация языка Паскаль – Турбо Паскаль фирмы Borland International – появилась на рынке программных продуктов в 1984 году. В 1992 г. было выпущено два пакета программирования на языке Паскаль в среде MS DOS – это Borland Pascal 7.0 и Turbo Pascal 7.0.

Пакет Turbo Pascal 7.0 использует новейшие для своего времени достижения в программировании. Язык этой версии обладает широкими возможностями, имеет большую библиотеку модулей. Среда программирования позволяет создавать тексты программ, компилировать их, находить и исправлять ошибки, компоновать программы из отдельных частей, использовать модули, отлаживать и выполнять отлаженную программу.

 

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

Структура программы на Паскале.
Организация ввода-вывода данных.
Использование стандартных функций.

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

1. Раздел заголовка (объявления программной единицы);

2. Разделы описаний;

3. Раздел операторов (тело программы).

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

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

· раздел описания используемых библиотек Uses;

· раздел описания меток Label;

· раздел описания констант Const;

· раздел описания типов Type;

· раздел описания переменных Var;

· раздел описания процедур и функций.

Разделы Type, Const, Var, Label могут следовать друг за другом в любом порядке и встречаться в разделе описаний сколько угодно раз. Единственное ограничение – идентификаторы, которые используются для определения других идентификаторов, должны описываться раньше. В простейшей программе из всех перечисленных подразделов раздела описания обычно присутствует только раздел описания переменных Var.

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

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

Таким образом, структура программы на Турбо Паскале имеет вид:

Program < имя программы> ; {например: program First; }

Uses < список библиотек> ; {например: uses CRT; }

Label < список меток> ; {например: Label Home; }

Const < имя константы> =< значение константы> ; {например: const n=7; }

Type < имя типа> =< описание типа> ; {например: type mass=array[1..3, 1..5] of real; }

Var < имя переменной> : < тип данных> ; {например: var x: real; }

Раздел описания процедур и функций. Каждая процедура должна начинаться с ключевого слова Procedure, а каждая функция – со слова Function.

Begin

< операторы программы>

End.

Ввод и вывод данных в Паскале полностью реализованы с помощью стандартных процедур.

Для ввода данных с клавиатуры служат процедуры Read и ReadLn. Примеры:

Read(a);

ReadLn(x, y, z);

При вводе нескольких значений одной процедурой их разделяют пробелом, пробелами или нажатием клавиши < Enter>.

При вводе с клавиатуры используют обычно ReadLn, а процедура Read предназначена для работы с внешними файлами. Особенность процедуры ReadLn в том, что она вызывает Read для ввода указанных переменных, а затем, игнорируя остаток введенной строки, переходит к началу следующей строки (Ln – сокращение от Lineстрока).

Для вывода данных на дисплей применяются процедуры Write и WriteLn. Примеры:

Write(a);

WriteLn(x, ’ ’, y); {между x и y выводится несколько
пробелов, взятых в апострофы
}

Write(’Максимальное значение: ’, max);

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

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

WriteLn(x: 9: 6); { отводится 9 знаков, из них 6 после точки}

Обычно при вводе с клавиатуры исходных данных программы предварительно выводят на экран подсказку – что именно пользователь должен ввести. Примеры:

Write(’Введите х: ’); ReadLn(x);

Write(’Введите число элементов массива (от 1 до 10): ’); ReadLn(n);

 

Выражения

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

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

Операции – действия по получению новых значений из значений операндов. Большинство операций являются бинарными, т.е. определенными для двух операндов. В этом случае знак операции ставится между ними. Примеры: a + b, n div 2, x > y. Унарные операции определены для одного операнда, здесь знак операции ставится слева. Примеры: –х (унарный минус), not a.

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

Операции, определенные в языке Паскаль, и их приоритеты приведены в таблице:

Операция Приоритет Категория
@ вычисление адреса переменной not инверсия Первый (наивысший)  
* умножение / деление div деление нацело mod остаток от деления нацело and конъюнкция shl логический сдвиг влево shr логический сдвиг вправо Второй Операции типа умножения
+ – сложение, вычитание, унар­ный плюс, унарный минус or дизъюнкция xor строгая дизъюнкция Третий Операции типа сложения
= < > < > < = > = сравнения in проверка принадлежности к множеству Четвертый (низший) Операции отношения

 

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

Арифметические выражения служат для определения одного числового значения. Например, (1+sin(x))/2 .

Логические выражения описывают некоторые условия, которые могут удовлетворяться или не удовлетворяться. Таким образом, логическое выражение может принимать только два значения – «истина» или «ложь» (да или нет). Пример: логическое выражение x*x + y*y < r*r, определяющее принадлежность точки с координатами (x, y) внутренней области круга радиусом r c центром в начале координат. При x=1, y=1, r=2 значение этого выражения – " истина", а при x=2, y=2, r=1 – " ложь".

Строковые выражения – выражения, значениями которых являются наборы символов. В строковые выражения могут входить символьные и строковые константы, символьные и строковые переменные, строковые функции, разделенные знаками операции сцепки. Например, А + В означает присоединение строки В к концу строки А. Если А=’куст ’, а В=’зеленый’, то значение выражения А + В есть ’куст зеленый’.

Практические задания

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

; ; ; ; (m, n, k, j – целые).

Указание. Использовать соотношения: ; ; ; ; .

 

2.Составить программу, печатающую на экране код, который соответствует нажимаемой клавише.

 

Uses crt;

Var c: char;

i: integer;

Begin

Writeln('Hажмите клавишу: '); c: =ReadKey;

Readln

End.

Задания для самостоятельной работы

1. Составить программы, вычисляющие и выводящие на экран значения выражений:

a) y = (2x–1 + 3x +4x+1;

б) ({ } – дробная часть числа);

в) ;

г) ;

д) .

 

2.Составить программу, печатающую на экране символ, соответствующий введенному с клавиатуры коду (от 0 до 255).

 

3. Составить программу, которая для введенного положительного числа а вычисляет площади следующих фигур: равностороннего треугольника со стороной а, квадрата со стороной а, круга радиуса а.

 

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

,

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

 

6. Поменять местами значения двух целых переменных x и y, не используя дополнительные переменные.

 

7. Составить программу, которая для введенного номера дня в году (от 1 до 365) определяет день недели, при условии, что 1 января – среда.

 


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

END

Здесь также ветвь ELSE может отсутствовать.

Выражение после CASE должно быть дискретного типа, совместимого со значениями из списков.

Например:

CASE ErrorCode OF

1: writeln(’Файл не найден’);

2..4, 6: writeln(’Ошибка открытия файла: ’, ErrorCode);

5: writeln(’Недопустимое имя файла’);

END

Практические задания

1. Изучить и запустить программу, определяющую, попало ли введенное пользователем число х в интервал [a, b].

Program Interval;

Var a, b, x: real;

Begin

a: =–5; b: =5;

Write(’x=’); Readln(x);

If (x> =a) and (x< =b) then

writeln(’x принадлежит [a, b]’)

else writeln(’x не принадлежит [a, b]’);

Readln

End.

2. Составить программу, определяющую, попала ли точка с координатами (x, y) внутрь заштрихованной области.

 

3. С клавиатуры вводятся три целых числа a, b, c. Изучить и запустить программу, которая выводит их на экран в порядке возрастания (использовать наименьшее количество условных операторов).

Program ThreeNumbers;

Var a, b, c, x: integer;

Begin

Write(’a=’); Readln(a);

Write(’b=’); Readln(b);

Write(’c=’); Readln(c);

{Упорядочим сначала два числа a, b – должно быть а < b}

If a> b then begin x: =a; a: =b; b: =x end;

{a и b упорядочены, теперь может быть c < a, c > b или a < c < b}

If c< a then Writeln(c, ’ ’, a, ’ ’, b)

else If c> b then Writeln(a, ’ ’, b, ’ ’, c)

else Writeln(a, ’ ’, c, ’ ’, b);

Readln

End.

 

4. Изучить и запустить программу, которая вычисляет сумму, разность, произведение или частное двух чисел в зависимости от знака операции +, –, *, / (т.е. простейший калькулятор). Добавить в программу операцию возведения x в степень y.

 

Program Calc;

Var x, y, r: real;

c: char;

Begin

write('Операнд 1: '); readln(x);

write('Операция: '); readln(c);

write('Операнд 2: '); readln(y);

Case c of

'+': r: =x+y;

'-': r: =x-y;

'*': r: =x*y;

'/': If y< > 0 then r: =x/y

Else

begin writeln('Деление на 0'); exit end;

Else

begin writeln('Неверная операция'); exit end;

end;

writeln(x: 6: 3, ' ', c, ' ', y: 6: 3, ' = ', r: 9: 6);

Readln

End.

Задания для самостоятельной работы

1. Составить программу, определяющую, попала ли точка с координатами (x, y) внутрь заштрихованной области.

а) б)

в) г)

2. Составить программу, которая преобразует введенное с клавиатуры целое число от 0 до 15 в шестнадцатеричную систему и выводит результат на экран.

3. Используя оператор варианта, составить программу вычисления площадей геометрических фигур – круга, квадрата, прямоугольника, прямоугольного треугольника, произвольного треугольника.

4. Составить программу, определяющую, можно ли построить треугольник со сторонами a, b, c, а также его форму – равносторонний, равнобедренный или разносторонний; прямоугольный, остроугольный или тупоугольный.

5. Составить программу вычисления действительных корней квадратного уравнения ax2 + bx + c = 0.

6. На клавиатуре вслепую нажимается клавиша. Составить программу, определяющую тип введенного символа – цифра, прописная буква, строчная буква, спецсимвол (использовать оператор варианта).

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

Программы циклической структуры

В Турбо Паскале имеется три оператора цикла:

1) Оператор цикла с параметром For … do. Оператор безусловного цикла имеет следующую структуру:

For i: =N1 to N2 do < тело цикла >;

где i – параметр цикла, который должен быть дискретного типа (целого, символьного и т.д.); N1 – начальное значение параметра цикла; N2 – конечное значение параметра цикла.

Безусловный цикл выполняется заданное число раз. Чтобы прервать выполнение досрочно, необходимо увеличить iдо конечного значения ( i: =N2 ), либо использовать процедуру Break, которая прерывает выполнение циклов. Процедура Continue начинает новую итерацию цикла, даже если предыдущая не была завершена.

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

For i: =N2 downto N1 do < тело цикла >;

2) Оператор цикла с постусловием Repeat … Until. В этом операторе проверка условия выхода из цикла осуществляется после каждого выполнения тела цикла, поэтому тело цикла обязательно выполнится хотя бы один раз:

Repeat

< тело цикла >

Until < условие >;

Цикл выполняется до тех пор, пока условие не станет истинным. Например, при задании длины массива проверка может осуществляться следующим образом:

Repeat

Write(’Введите длину массива N (N< 10): ’);

ReadLn(N)

Until (N> 0) AND (N< 10);

Цикл выполняется до тех пор, пока пользователь не введет положительное число, меньшее 10.

Здесь в теле цикла можно использовать несколько операторов, не заключая их в операторные скобки begin … end.

3) Оператор цикла с предусловием While … do. В этом цикле проверка условия проводится до начала выполнения тела цикла:

While < условие > do < тело цикла >;

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

N: =0;

While (N< =0) OR (N> =10) do

Begin

Write(’Введите длину массива N: ’);

ReadLn(N)

END;

Обратите внимание, что до первого входа в цикл переменной N уже должно быть присвоено какое-либо значение!

Процедуры Break и Continue могут использоваться в условных циклах так же, как и в цикле For.

Практические задания

1.Изучить и запустить программу, вычисляющую сумму , n = 10. Определить максимальное значение n, при котором факториал (переменная f типа longint ) вычисляется верно.

var f: longint;

i: integer;

s: real;

Begin

s: =0; f: =1;

for i: =1 to 10 do begin

f: =f*i;

s: =s+1/f

end;

writeln(’s=’, s: 9: 6); readln

End.

2.Составить программы, вычисляющие значения выражений:

а) б) в) г) ;
д) е) ж) ; з)
и) к) .

3.Составить программу, вычисляющую значение выражения f = n× 10! +(n–1)× 9! +...+(n–10)× 0!, где n – любое целое число.

var n, u, f: longint;

i, j: integer;

Begin

writeln(’Введите число n’);

readln(n);

f: =0;

for i: =10 downto 0 do { цикл вычисления суммы}

Begin

u: =1;

for j: =2 to i do u: =u*j; {цикл вычисления факториала}

f: =f+(n+i-10)*u; {добавление в сумму}

end;

writeln(’f=’, f: 12);

End.

4. Вычислить с помощью рекуррентной формулы сумму ряда с заданной точностью e (использовать оператор цикла с постусловием):

.

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

.

Итак, требуется получить формулу

un+1 = Rn un.

Определим множитель Rn

.

Таким образом, сумму указанного ряда можно найти по следующей схеме:

S = u0 + u1 +... + un,

где

u0 = 1, ,

суммирование заканчивается, когда

|un – 1| > e, |un | < e.

 

var s, u, x, eps: real; {s – сумма, u – член ряда, eps - точность}

n: integer; {x – аргумент функции, n – номер члена ряда}

Begin

writeln(’Введите аргумент x и точность eps’);

readln(x, eps);

u: =1; s: =u; n: =0; { инициализация переменных}

Repeat

u: =–u*x*x/(2*n+1)/(2*n+2); {рекуррентная формула}

s: =s+u; {суммирование ряда}

n: =n+1; {счетчик}

until abs(u)< eps;

writeln(’Сумма ряда равна ’, s: 10: 6);

writeln(’Для сравнения cos(x)=’, cos(x): 10: 6);

Readln

End.

5.Вычислить суммы рядов с точностью e = 0, 0001. Использовать, где это целесообразно, рекуррентные формулы. Использовать цикл с предусловием (а, в), с постусловием (б, г):

а) б)

в) г)

 

6. Изучить и запустить программу вычисления значений функции на интервале x1£ x£ x2 с шагом h и найти ее минимальное значение и среднее арифметическое:

var x, y, a, x1, x2, h, xmin, ymin, SA: real;

n, i: integer;

Begin

writeln(’Введите число a, начало и конец интервала и шаг h’);

readln(a, x1, x2, h);

if (x2> x1) and ((x2–x1)> 2*h) then { если x2 > x1 и}

begin { на интервале не менее трех точек}

x: =x1; { инициализация }

n: =round((x2-x1)/h); {кол-во точек равно n+1 }

if(x> a) then y: = sqr(sin(abs(x)))

else y: = cos(x*x);

writeln(’x=’, x: 7: 3, ’ y=’, y: 9: 4); {вывод x1 и y1}

xmin: =x; ymin: =y; SA: =y; { присваивание начальных }

{ значений перед циклом }

for i: =1 to n do begin { выполняется цикл }

x: =x1+i*h;

if(x> a) then y: = sqr(sin(abs(x)))

else y: =cos(x*x); {вычисление функции }

writeln(’x=’, x: 7: 3, ’ y=’, y: 9: 4); {вывод x и y}

if y< ymin then begin

ymin: = y; xmin: = x; {корректируем уmin, xmin}

end;

SA: =SA+y; {накопление суммы значений функции}

end; { конец цикла }

writeln(’Минимальное значение y =’, ymin: 9: 4, ’ при x=’, xmin: 7: 3);

writeln(’Среднее значений функции ’, SA/(n+1): 9: 4);

End

else writeln (’Неверно заданы x1 и x2’);

Readln

End.

 

Задания для самостоятельной работы

 

1. Составить программу, выводящую на экран все символы кодовой таблицы ASCII.

2. Составить программу, которая вводит с клавиатуры четное целое число Х в интервале от 0 до 100 с проверкой введенного значения и предложением повторить ввод в случае ошибки.

3. Составить программу, находящую сумму всех двузначных чисел: а) которые делятся на 7 и при этом не делятся на 5; б) которые делятся на 3 и не делятся на 4; в) у которых число единиц делится нацело на число десятков.

4. Составить программу, выводящую на экран все простые числа в интервале от 1 до 100 (простым называется число, которое делится нацело только на 1 и на себя).

5. Вычислить суммы рядов с точностью e = 0, 0001. Использовать, где это целесообразно, рекуррентные формулы.

а) ; б) ; в) ; г) .

6. Составить программу вычисления значений функций на интервале x1£ x£ x2 с шагом h и найти минимальное, максимальное и среднее арифметическое этих значений:

1) 2)

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

Тип «массив»

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

Var < имя>: Array[< тип1>, < тип2>, …, < типN> ] of < базовый тип>;

Здесь < тип1>, < тип2>, …, < типN> – типы индексов, их число определяет размерность массива (один – для одномерного массива, два – для двумерного, и т.д.). Чаще всего здесь используется тип «диапазон». Базовый тип – тип элементов массива. Примеры:

Var A: Array[1..3] of real; {массив из трех вещественных чисел}

B: Array[1..10, 1..10] of integer; {матрица 10´ 10 из целых чисел}

C: Array[Char] of integer; {массив из 256 целых чисел, значения индекса – символы}

Также массив может быть определен с помощью описания нового типа:

Type Vector = Array[1..3] of real;

Matrix = Array[1..10, 1..10] of integer;

Var A: Vector;

B: Matrix;

Этот способ применяется, если массив нужно передать в подпрограмму в качестве параметра.

Единственная операция над массивом в целом – присваивание, например, A: =B; (при этом массивы A и B должны быть определены одинаково). Все остальные операции над массивами производятся поэлементно, чаще всего в циклах. Обращение к элементам массивов производится путем указания в квадратных скобках значений индексов: A[1], B[2, 3], B[i, j], и т.п. Допустима другая форма: B[2][3].

Тип «строка»

Строковый тип расширяет понятие символьного массива ( Array[…] of char ), предоставляя новые возможности. Описание:

Var < имя>: String[< макс. длина> ];

Если максимальная длина не указана явно, то по умолчанию берется значение 255. Примеры:

Var S: String[80];

mess: string;

При создании в программе строки с максимальной длиной N символов под нее отводится N+1 байт памяти. Элементы с номерами от 1 до N предназначены для хранения символов, а элемент с номером 0 – для хранения динамической (т.е. текущей) длины строки. Определить текущую длину строки S можно с помощью функций Length(S) или Ord(S[0]).

Строковые константы, как и символьные, заключаются в апострофы:

S: ='Пример строки';

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

Операции над строками:

а) конкатенация (т.е. слияние строк): две строки соединяются в одну:

S: ='Пример ' + 'строки';

б) сравнение по правилам:

– более короткая строка меньше, чем более длинная;

– если длины строк равны, то попарно сравниваются коды первых символов, если они равны, то вторых, и т.д.

Доступ к отдельным символам строки производится так же, как и к элементам массивов: S[3]: ='а';

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

 

Практические задания

 

1. Изучить и запустить программу, осуществляющую ввод массива с клавиатуры, сортировку его по убыванию и вывод на экран. С ее помощью составить программу, выполняющую следующие действия над вещественным одномерным массивом А(n):

а) поиск и вывод на экран минимального и максимального элементов с указанием номера;

б) перестановку элементов массива (1-го с последним, 2-го с предпоследним, и т.д.);

в) сортировку элементов массива по возрастанию методом пузырька;

г) замену каждого из элементов массива aij на разность
aijacp, где acp – среднее арифметическое элементов массива.

 

var A: array[1..100] of real;

i, j, n: integer;

z: real;

Begin

{Ввод массива А(n)}

write(¢ Введите длину массива (n< 100): ¢ );

readln(n);

writeln(¢ Введите элементы массива: ¢ );

for i: =1 to n do

Begin

write(¢ A[¢, i, ¢ ]=¢ );

readln(A[i])

end;

{Вывод массива в одну строку}

writeln(¢ Массив А: ¢ );

for i: =1 to n do write(A[i]: 6: 3, ¢ ¢ );

writeln;

{Сортировка}

for i: =1 to n-1 do

for j: =i+1 to n do

if A[i]< A[j] then

Begin

z: =A[i]; A[i]: =A[j]; A[j]: =z

end;

{Вывод отсортированного массива}

writeln(¢ Отсортированный массив: ¢ );

for i: =1 to n do write(A[i]: 6: 3, ¢ ¢ );

writeln;

Readln

End.

 

2. Изучить и запустить программу, осуществляющую ввод матрицы А с клавиатуры, перестановку указанных строк и вывод матрицы на экран в виде таблицы. С ее помощью составить программу, выполняющую следующие действия над вещественным двумерным массивом А(m´ n), mn:

а) поиск и вывод на экран минимального и максимального элементов матрицы с указанием их позиции;

б) подсчет количества положительных и отрицательных элементов матрицы А;

в) транспонирование матрицы А;

г) вычисление и печать результатов перемножения матриц А и АТ: B=ААТ, С=АТА.

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

 

var A: array [1..10, 1..10] of real;

i, j, n, m, m1, m2: integer;

z: real;

Begin

{Ввод матрицы А}

write(¢ Введите число строк (m< 10): ¢ );

readln(m);

write(¢ Введите число столбцов (n< 10): ¢ );

readln(n);

for i: =1 to m do

for j: =1 to n do

Begin

write(¢ A[¢, i, ¢, ¢, j, ¢ ]=¢ );

readln[a[i, j]]

end;

{Вывод матрицы в виде таблицы}

writeln(¢ Исходная матрица: ¢ );

for i: =1 to m do

Begin

for j: =1 to n do write(a[i, j], ¢ ¢ );

Writeln

end;

{Ввод номеров переставляемых строк}

write(¢ Введите номера переставляемых строк: ¢ );

readln(m1, m2);

if (m1> m) or (m2> m) or (m1=m2) then

Begin

writeln(¢ Неверные номера строк¢ );

Exit

end;

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

for j: =1 to n do

Begin

z: =a[m1, j]; a[m1, j]: =a[m2, j]; a[m2, j]: =z

end;

{Вывод матрицы в виде таблицы}

writeln(¢ Матрица после перестановка: ¢ );

for i: =1 to m do

Begin

for j: =1 to n do write(a[i, j], ¢ ¢ );

Writeln

end;

Readln

End.

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

 

Var s: string;

i: integer;

Num: array [char] of byte;

c: char;

Begin

writeln('Введите строку: '); readln(s);

for c: =chr(0) to chr(255) do Num[c]: =0;

for i: =1 to length(s) do

Num[s[i]]: =Num[s[i]]+1;

for c: =chr(0) to chr(255) do

if Num[c]> 0 then

writeln('Символов ''', c, ''' - ', Num[c], ' шт');

Readln

End.

Задания для самостоятельной работы

 

1. Составить программу, которая в массиве А(15) подсчитывает число отрицательных и число неотрицательных элементов и формирует из них два массива, в один из которых войдут неотрицательные, а в другой – отрицательные элементы.

 

2. Составить программу, осуществляющую ввод с клавиатуры вещественных матриц А(3´ 3) и В(3´ 3) и выполняющую следующие действия:

а) сложение матриц: С=А+В;

б) перемножение матриц: С=АВ;

в) вычисление скалярного произведения указанной строки матрицы А и того же столбца матрицы B.


Поделиться:



Последнее изменение этой страницы: 2017-03-17; Просмотров: 505; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.307 с.)
Главная | Случайная страница | Обратная связь