Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Совместимость и преобразование типов данных

Введение

В методическом пособии описываются базовые понятия языка TURDO PASCAL.

PASCAL лучше других языков подходит для обучения программированию. Язык программирования PASCAL был разработан в 1968-1971 гг. Н. Виртом в Цюрихском институте информатики (Швейцария). Первоначальная цель разработки языка PASCAL - необходимость инструмента для обучения программированию.

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

Компилятор – программа,  обеспечивающая перевод программ с языка высокого уровня(приближенного к человеку) на язык более низкого уровня (близкий к ЭВМ), или машинно-зависимый язык. Одной из наиболее удачных версий стала разработка фирмы Borland, в которой были объединены редактор текстов и высокоэффективный компилятор. Созданная среда стала называться TURDO PASCAL, а язык получил название TURDO PASCAL. Язык обладает расширенными возможностями по сравнению со стандартным языком PASCAL.

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

Пособие представляет вводный курс в язык программирования TURDO PASCAL.

 

Базовые элементы и структура языка PASCAL

Алфавит и словарь языка.

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

В качестве букв используются прописные и строчные буквы латинского алфавита, знак подчеркивания. Также при написании программ используются специальные символы: +, -, *, /, =, <, >, [ ], { }, (), @,.,,,:,;, ‘, #, $,^.

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

Зарезервированное или служебное слово – это слово, которое в языке программирования имеет определенное смысловое значение.

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

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

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

При написании идентификатора можно использовать прописные и строчные буквы латинского алфавита.

1.2. Структура программы

Программа, написанная на языке PASCAL, имеет следующие разделы

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

2. программный блок.

2.1. список имен подключаемых библиотечных модулей – экрана (CRT), графики (GRAPH).
USES_ имя1 [, имя2, …];

2.2. раздел описания меток – имена меток перечисляются через запятую после зарезервированного слова. В программе после метки ставится двоеточие. Метка позволяет выполнить переход на оператор, следующий за ней, из любого места программы с помощью оператора перехода GOTO.
LABEL_ имя1 [, имя2,…];

2.3. раздел описания констант. Выражения присваивания значений константам отделяются друг от друга точкой с запятой.
CONST_ идентификатор1 = значение1 [; идентификатор2 = значение2;…];

2.4. раздел описания типов данных. За служебным словом TYPE следуют одно или несколько определений типов, разделенных точкой с запятой. Тип данных может быть описан и непосредственно в разделе описания переменных.
TYPE_ имя типа = значение типа;

2.5. раздел описания переменных. Имена переменных перечисляются через запятую и далее, через двоеточие, следует их тип и точка с запятой, после которой аналогично описываются другие переменные.
VAR_ идентификатор1, идентификатор2,…: тип переменных;

2.6. раздел описания подпрограмм (процедур) и функций. В этом разделе размещаются тела подпрограмм, роль которых в Паскале выполняют процедуры и функции.
PROCEDURE_ имя(формальные параметры: тип);
BEGIN
Тело процедуры
END;
FUNCTION_ имя(формальные параметры: тип):тип результата;
BEGIN
Тело функции
END;

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

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

Любой раздел, кроме раздела операторов, может отсутствовать. Разделы описаний (кроме USES, который всегда расположен после заголовка программы) могут встречаться в программе любое количество раз, но все описания объектов программы (переменных, функций, меток, констант, процедур) должны быть сделаны до того, как эти объекты будут использованы.

Пример 1: Программа расчета объема шара.

PROGRAM share;       {заголовок программы}

USES crt; printer;       {подключение модулей}

CONST p=3.14;         {описание констант}

VAR rad: integer; v: real;{описание переменных}

BEGIN {раздел операторов}

clrscr;                             {очистка экрана}

rad:=4;                            {задание значения радиуса шаhа}

v:=3*p*rad*rad*rad/4;    {вычисление объема шара}

write (‘ объем шара - ’,v); end.{вывод результата}

Простые типы данных

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

Целые типы.

 В PASCAL имеется пять стандартных типов целых чисел. Они различаются диапазоном, наличием знака и размером занимаемой памяти.

Таблица 1.1. Целые типы данных

Тип Название Диапазон значений Память байт Формат
Byte Shortint   Integer Word Longint Байт Короткое цел. Целое Слово Длин. целое 0..255 -128..127   -32768..32767 0…65535 -2147483648.. 2147483647 1 1   2 2 4 Без знака Знаковый   Знаковый Без знака Знаковый  

Вещественные типы.

Таблица 1.2. Вещественные типы данных.

Тип Название Диапазон значений Память байт Число значащих цифр
Real     Single     Double   Extended     Comp Вещественный   Одинарн. точности   Двойной точности Расширенный   Большое целое 2.9*10-39-1.7*1038     1.5*10-45-3.4*1038     5*10-324-1.7*10308   3.4*10-4932-1.1*104932   -9.2*1018-9.2*1018 6     4     8     10   8 11-12     7-8     15-16     19-20   19-20

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

Число с плавающей точкой имеет вид mEp, где m - мантисса, p – порядок числа. В качестве m могут быть целые и действительные числа с фиксированной точкой, в качестве p – только целые числа. Мантисса и порядок могут содержать знаки +,-.

Пример представление чисел с плавающей точкой: Математическая запись чисел и их запись с плавающей точкой:

0,000002 – 2E-6;

0,34 X 104 – 0.34E+4;

-20,5 X 1012 - -20.5E12;

12 X 10-5 – 12E-5

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

Пример.

Таблица 1.3

Математическая запись Вывод без указания формата
2 2.0000000000E+00
0,5 5.0000000000E-01
0,0064 6.4000000000E-03
236,2 2.3620000000E+02

Изменить стандартную форму вывода можно, используя формат: write(a:m:n), где a – выводимое данное вещественного типа, m – общее поле выводимого числа(включая знак числа, целую часть, точку и дробную часть), n – поле дробной части. В качестве m и n могут быть целые константы, переменные, выражения.

Например: используя формат вывода write(a:8:5) для вывода числа 7.567895135 получим значение 7.56789.

Логический (Булевский) тип (boolean) представлен двумя значениями True (истина) и False (ложь) и используется в логических выражениях и выражениях отношения. Занимает 8 бит.

Символьный тип (Char). Char – это тип данных, элементами которого являются: буквы, цифры, знаки препинания и специальные символы. Каждому символу алфавита соответствует числовой код от 0 до 255. занимает в памяти 1байт.Система кодирования символов – ASCII.

Перечисляемый тип. Перечисляемый тип- не является стандартным и задаётся перечислением значений. Эти значения образуют упорядоченное множество.

Например;

Type day=(sat, sun, mon, tue, wed, thu, fri);

Тип day включает в себя значения sat, sun, mon, tue, wed, thu, fri. Как перечисляемые типы данных можно рассматривать и стандартные типы: integer, boolean, char.Имена значений, перечисленные в описании типа, являются константами этого типа.

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

Например;

Type chislo=1..25;

Ch=’a’..’z’;

Константы

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

CONST_ идентификатор = значение константы;

Например

CONST

 а=-0.5; s=3; symbol= ’k’;

1.5. Стандартные функции

Арифметические функции. Арифметические функции можно использовать только с величинами целого и вещественного типа.

Таблица 1.4. Стандартные функции.

Функция Назначение Тип результата
ABS(X) абсолютное значение аргумента совпадает с типом аргумента
SQR(X) квадрат аргумента совпадает с типом аргумента
SQRT(X) квадратный корень аргумента вещественный
COS(X) косинус аргумента вещественный
SIN(X) синус аргумента вещественный
ARСTAN(X) арктангенс угла вещественный
EXP(X) еХ   вещественный
LN(X) натуральный логарифм вещественный
Int(x) целая часть числа вещественный
Frac(x) дробная часть числа вещественный

PI – функция возвращает значение числа ð;

RANDOM(N) – генерирует значение случайного числа в диапазоне от 0 до N, тип результата целочисленный;

RANDOM – генерирует значение случайного числа в диапазоне от 0 до 0,99, тип результата вещественный.

Функции преобразования типов. Эти функции предназначены для преобразования типов величин, например, символа в целое число, вещественного числа в целое и т.д. Такими функциями являются, например, функции ord(х) (возвращает порядковый номер аргумента и, таким образом, преобразует величину порядкового типа в величину целого типа), round(х) (округляет вещественное число до ближайшего целого), trunc(х) (выдает целую часть вещественного числа, отбрасывая дробную).

  Функции для величин порядкового типа

Odd(х) - проверяет аргумент на нечетность. Аргумент функции величина типа Longint, результат Тrие, если аргумент нечетный, False - если четный.

Рred(х) - определяет предыдущее значение величины х.

Succ(х) - определяет последующее значение величины х.

Ord(x) - возвращает порядковый номер величины х.

Знаки операций

Все операции в Рascal можно разбить на группы. Арифметические операции. Арифметические операции (табл. 1.5) применимы только к величинам целых и вещественных типов.

Таблица 1.5. Арифметические операции.

 

 

 

Знак Операция Типы операндов Тип результата

+

сложение

Целые   Целый  
хотя бы один вещественный Вещественный

-

вычитание

Целые Целый
хотя бы один вещественный Вещественный

*

умножение

Целые Целый
хотя бы один вещественный Вещественный
/ деление целые или вещественные Вещественный
div целая часть от деления целых чисел Целые Целый
mod остаток от деления целых чисел Целые Целый

При использовании знака операции, являющегося служебным словом, он должен быть отделен от операндов хотя бы одним пробелом. Пример.13 div 3 = 4;17 mod=1 4

Логические операции. Логические операции (табл. 1.6) применяются к величинам логического типа, результат операции - тоже логического типа. Имеется одна унарная логическая операция not (отрицание) и три бинарные операции and (и), or (или), xor (исключающее или).

Таблица 1.6. Логические операции. 

Значение операнда

Значение операции

X Y not Х Х and у Х or Y X xor Y
False False True False False False
False True True False True      True
True False False False True True
True True False True True False

Пример

а=7, b= -5, c=True

Тогда значением выражения (а>0) and (а<10) and (b>-10) будет True.

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

= - равно    < - меньше    <= - меньше или равно

<> - неравно  > - больше >= - больше или равно.

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

1. Вычисления в круглых скобках.

Вычисления значений функций.

Унарные операции.

Операции *, /, div, mod, and

Операции +, -, or, xor.

Операции отношения

Совместимость и преобразование типов данных

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

1. оба они одного типа;

2.  один операнд вещественный, другой - целый;

3. один операнд является диапазоном типа второго операнда;

4. оба операнда - диапазоны одного и того же базового типа;

5. оба операнда - строки;

6. один операнд типа строка, другой - символ.

Примеры программ

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

Program example1;

Var a,b:integer;

c:real;

begin

writeln(‘введите два числа ’);

readln(a,b);

c:=a/b;

writeln(‘c=’,c) end.

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

Program example2;

Var x,y: real;

begin

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

readln(x) writeln(‘y=’,y);

end.

Для вывода вещественного результата можно использовать формат, как это было описано выше. Так, если мы хотим, чтобы результат выводился с точностью до двух знаков после запятой, нужно использовать следующий формат вывода: y:5:2. Тогда вывод будет выглядеть следующим образом: writeln(‘y=’,y:5:2);

2. Найти остаток от деления двух целых чисел.

Program example3;

Var a,b,c:integer;

begin

writeln(‘введите два числа ’);

readln(a,b);

c:=a mod b;

writeln(‘c=’,c)

end.

Переменная c является переменной целого типа, так как тип результата операции mod – целый.

Упражнения

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

1).   2).

3).   4).

5). 6).

7).   8).

II. Написать программу, которая подсчитывает:

1) периметр квадрата, площадь которого равна а;

2) площадь равностороннего треугольника, периметр которого равен p;

3) среднее арифметическое кубов двух данных чисел;

4) среднее геометрическое модулей двух данных чисел;

5) гипотенузу прямоугольного треугольника по двум данным катетам а, b;

6) площадь прямоугольного треугольника по двум катетам а, b;

7) периметр прямоугольного треугольника по двум катетам а, b;

8) периметр треугольника, заданного координатами вершин (х1, у1), (х2, у2), (х3,y3);

9) длину окружности и площадь круга с радиусом R;

10) площадь кольца с внутренним радиусом R1 и внешним R2.

Операторы ветвления

Условный оператор IF

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

1. IF_ условие _THEN_ оператор1 _ELSE_ оператор2;

2. IF_ условие _THEN_ оператор;

Условие – выражение булевского типа, при его записи могут использоваться все возможные операции отношения. Если значение выражения истинно, то выполняется оператор1, если ложно – оператор2. Во втором варианте, если выражение ложно, то выполняется оператор, следующий в программе сразу за оператором IF. Один оператор IF может входить в состав другого оператора IF, т.е. этот оператор может быть вложенным. При вложенности операторов каждое ELSE соответствует тому THEN, которое ему непосредственно предшествует.

 


Рисунок 2.1. Схема полной формы условного оператора.

 


Рисунок 2.2. Схема сокращенной формы условного оператора.

 

Если необходимо выполнить более одного оператора после ключевого слова then или else, то надо записать составной оператор begin …end

if условие then begin oп1;

                            оп2

                            end

                  else begin oп3;

                            оп4

                            end;

Оператор выбора

Оператор выбора позволяет сделать выбор из произвольного числа имеющихся вариантов и имеет формат:

CASE_ выражение OF

константа_1: оператор1;

константа_2: оператор2;

……………………………

Константа_ N: операторN;

[ELSE оператор ]

END;

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

Примеры программ

1. Найти максимальное из двух чисел x и Y

Program example1;

Var a,b,max:real;

begin

writeln(‘введите два числа ’);

readln(a,b);

if a>b then max:=a

     else max:=b;

writeln(‘максимальное значение=’,max:5:2)

end.

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

Вся числовая прямая разбивается на три интервала: [0;0],

[- ;0], [0; + ]. Заданная точка х может попасть только в один из интервалов. Сначала проверяется, попадает ли точка в первый интервал. Если попадает, то функцию вычисляем по первому интервалу. Если нет, то точка может принадлежать второму или третьему интервалу. Поэтому проверяем принадлежность точки второму интервалу. Если да, то вычисляем функцию на втором интервале. Если нет, то можно без проверки принадлежности точки третьему интервалу вычислять функцию в третьем интервале.

Program example2;

Var x,y:real;

begin

writeln(‘введите x ’);

readln(x);

if x=0 then y:=0

      else if x<0 then y:=x+1

                         else y:=sqr(x)-1;

writeln(‘y(‘,x,’)=’,y:5:2)

end.

3.Дана точка с координатами x,y. Определить принадлежит ли эта точка заданной области.


Program example3;

Var x,y:real;

begin

writeln(‘введите координаты точки ’);

readln(x,y);

if (abs(x)<4) and (abs(y)<2) then writeln(‘точка внутри области’)

   else if (abs(x)>4) or (abs(y)>2 then writeln(‘точка вне области’)

                                                     else writeln(точка на границе области’)

end.

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

Program example4;

Var i:integer;

begin

READ(I);

CASE I OF

1..10: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 1 до 10’);

11..20: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 11 до 20’);

21..30: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 21 до 30’);

ELSE WRITELN(‘число I=’,I:3,’находится вне диапазона 1 - 30’);

end; end.

Упражнения

Для произвольных значений аргумента вычислить функцию

1.

2.

.

3.

4. Вычислить

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

;

6. Дана точка с координатами x, y. Определить принадлежит ли эта точка заданной области:

 


7.Дано действительное число а. Для функции у = f(х), графики которых представлены, вычислить f(a)


8. Найти минимальное число из x1, x2, x3. Расположить три числа в порядке возрастания, убывания.

10. Дана точка на плоскости М (х, у). Составить программу, которая дает ответ на вопрос? Принадлежит ли точка заданной области: окружности с радиусом=2, кольцу с внешним радиусом 10 и внутренним радиусом 2, полукольцу.

Операторы цикла

Цикл - это повторяющаяся последовательность операторов. Операторы, которые выполняются в ходе цикла. Называются телом цикла. В Pascal имеется три типа циклов: while –цикл с предусловием, repeat – цикл с постусловием, for- цикл с параметром.

Цикл While.

Оператор while. Организует выполнение операторов неизвестное заранее число раз. Выход из цикла осуществляется, если условие завершения цикла окажется ложным.

 While_ условие _do_ тело цикла;  

Условие – булевское выражение, тело цикла – простой или составной оператор. Перед каждым выполнением тела цикла вычисляется условие, если условие выполняется, то тело цикла выполняется и снова вычисляется значение условия. Если условие не выполняется, то происходит выход из цикла и переход к первому после WHILE оператору. В этом операторе программист сам должен заботиться об изменении переменных, определяющих выход из цикла. Если необходимо выполнить более одного оператора после ключевого слова do, то надо записать составной оператор begin... end;

Все операторы повтора могут быть вложенными.

Блок-схема цикла While. Рисунок 3.1

 


Цикл Repeat

Оператор Repeat имеет следующие характерные особенности: выполняется, по крайней мере, один раз

Repeat

тело цикла;

Until_у словие;

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

Блок-схема цикла Repeat. Рисунок 3.2


Оператор повтора FOR

Оператор повтора FOR состоит из заголовка и тела цикла и может иметь два формата:

1.FOR_ параметр-цикла:=S1_TO_S2_DO_ оператор;

2.FOR_ параметр-цикла:=S1_DOWNTO_S2_DO_ оператор;

S1 и S2 – выражения, определяющие начальное и конечное значение параметра цикла. FOR…DO – заголовок цикла, оператор – тело цикла. Тело цикла может быть простым или составным оператором. Оператор FOR обеспечивает выполнение тела цикла с увеличением параметра цикла (TO) или с уменьшением параметра цикла (DOWNTO) на единицу.

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

Примеры программ

1. Найти все натуральные числа от 1 до n.(используя while)

Program example4;

Var i,n:integer;

begin

writeln(‘введите количество натуральных чисел ’);

readln(n);

i:=1;

while i<=n do

begin writel(‘ ’,i);

i:=i+1

end

end.

2. Найти все натуральные числа от 1 до n.(используя repeat)

Program example5;

Var i, n: integer;

begin

writeln(‘введите количество натуральных чисел ’);

readln (n);

i:=1;

repeat write(‘ ’,i);

i:=i+1;

until i>n

end.

3. Написать программу приближённого вычисления суммы

По условию задачи считается, что нужное приближение получено, если вычислена сумма нескольких первых слагаемых, и очередное слагаемое по модулю меньше, чем данное малое положительное число  - это и все последующие слагаемые уже не надо учитывать. В таких задачах следует получать каждый член последовательности из предыдущего с помощью рекуррентного соотношения. В данном примере,если уже получено xi-1/(i-1)!, то для получения xi/i! Достаточно помножить предыдущий результат на x/i.

Program example5;

Var i:integer;

x, eps, a,s:real; {очередной член ряда}

begin

writeln(‘введите x ’);

readln(x);

writeln(‘введите eps ’);

readln(eps);

i:=0; s:=0; a:=1;

while abs(a)>=eps do

begin

s:=s+a;

i:=i+1;

a:=a*x/i

end;

write(‘s=’,s)

end.

4.Написать программу для получения суммы

Знак означает суммирование слагаемых, каждый из которых имеет вид

, n принимает значения от 1 до k/

Program example6;

Var i,n:integer;

x, s, a:real; {очередной член ряда}

begin

writeln(‘введите n’);

readln(n);

writeln(‘введите x ’);

readln(x);

 s:=0; a:=-1;

for i:=1 to n do begin

begin

a:=-a*x/i

s:=s+a;

end;

write(‘s=’,s)

end.

Упражнения 3.5

1. Даны числа а, в(а>b). Получить все члены последовательности a, a2,a3… меньшие числа b

2.Найти все положительные числа из диапазона от А до В с шагом H.

3. Найти сумму чисел из диапазона А до В(A<=B) с шагом H.

4. Вычислить бесконечную сумму ряда с точностью до очередного члена ряда с заданной точностью ( =0,001)

5. Вычислить бесконечную сумму ряда с точностью до очередного члена ряда с заданной точностью ( =0,001)

точностью ( =0,001) для следующего ряда:

6. Вычислить бесконечную сумму ряда с точностью до очередного члена ряда с заданной точностью ( =0,001)

 

7. Вычислить бесконечную сумму ряда с точностью до очередного члена ряда с заданной точностью ( =0,001)

8. Даны действительные числа а1, а2 … аn. Найти:

9. Составить программу нахождения количества делителей заданного натурального числа n (n=1000) Число k является делителем, если при делении n на k остаток от деления равен 0. Поэтому надо перебрать все числа от 1 до n и проверить являются ли они его делителями.

10. Найти факториал числа (n!)

3..Вычислить y= ,если хi изменяется от 0 с шагом 0,1 одновременно с i

Одномерные массивы

Описание, принцип работы

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

1) TYPE_имя типа=ARRAY[тип индекса]_OF_тип элементов массива;

Например:

Type M=array[1..100] of integer;

Где M – имя типа, array[1..100] of integer – определение типа.

2) VAR_имя массива1[, имя массива2…]:имя типа;

Одномерный массив - это фиксированное количество элементов одного и того же типа, объединенных одним именем, где каждый элемент имеет свой номер.

Описание массива определяет имя, размер массива и тип элементов.

var <имя массива>: аrrау [<тип индекса>] of<базовый тип>;

 Например:

var а:array[1..5] of integer;

Так как массив не является стандартным типом данных, поэтому его можно описать также в разделе описания типов:

Например:

const=10;

type mas=array[1..n] of real;{ объявляется тип пользователя – массив, все элементы которого действительные числа}

var a:mas; {объявляется переменная, относящаяся к типу массив}

Компоненты массива могут быть любого, в том числе и структурированного типа (за исключением файлового). К любому элементу массива можно обратиться напрямую, указав имя массива, а затем в квадратных скобках номер требуемого элемента. Например, а[3] -- обращение к 3-му элементу массива А. С элементами массива можно делать всё, что допустимо для переменных того же типа.

Заполнение

Заполнить элементы одномерного массива значениями можно:

1 вводя значения с клавиатуры;

2 случайным образом;

3 по формуле.

Во всех трех случаях не обойтись без организации цикла.

Будем считать, что объявили массив из 10 элементов (тип элементов в данном случае значения не имеет).

1.    заполнение с клавиатуры.
for i:=1 to 10 do

Begin

Writeln(‘введите значение элемента’);

Readln(a[i])

End;

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

for i:=1 to 10 do

a[i]:=random(n); {n должно быть заранее задано}

4. Заполнение по формуле. Каждый элемент массива должен быть рассчитан по формуле (например аi = sini-cosi)

for i:=1 to 10 do

a[i]:=sin(i)-cos(i)

Примеры

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

Program example1;

Var a:array[1..100] of real;

i,n:integer;

s:real;    

begin

writeln(‘введите число элементов массива’);

readln(n);

s:=0;

for i:=1 to n do

Begin

Writeln(‘a[‘,i,’]=’);

Readln(a[i])

End;

for i:=1 to n do

S:=s+a[i];

writeln(‘s=’,s:5:2)

end.

2. Поиск минимального (максимального) элемента массива.

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

Program example2;

Var a:array[1..100] of integerl;

i,n,min, nmin:integer;

begin

writeln(‘введите число элементов массива’);

readln(n);

for i:=1 to n do

Begin

Writeln(‘a[‘,i,’]=’);

Readln(a[i])

End;

Min:=a[1]; {в качестве первого минимального элемента полагаем первый}

Nmin:=1;{ номер минимального элемента}

for i:=2 to n do

 if a[i]<min {если очередной элемент меньше минимального,}

  then begin

       min:=a[i]; {то он становится минимальным}

       nmin:=i;{запоминаем номер минимального элемента}

end;

writeln(‘Минимальный элемент a[’,nmin,’]=’,min);

writeln(‘Минимальный номер элемента=’, nmin);

end.

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

Program example3;

Var a:array[1..100] of real;

i,n,k: integer;

real;

begin

writeln(‘введите число элементов массива’);

readln(n);

for i:=1 to n do

Begin

Writeln(‘a[‘,i,’]=’);

Readln(a[i])

End;

for i:=1 to n-1 do begin

 if a[i]=a[i+1] {если соседние элементы равны}

  then k:=k+1 {количество равных соседних элементов}

end;

Writeln(‘k=’, k)

end.

4. Расположить элементы массива по убыванию(метод поплавка)

Program example4;

uses crt;

const n=15;

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

i,j,b:integer;

begin

clrscr;

writeln(' ввод массива');

for i:=1 to n do begin

a[i]:=random(50);

write(a[i]:4)    end;

writeln;

for i:=1 to n-1 do begin      { сортировка по убыванию}

for j:=1 to n-i do begin

if a[j]<a[j+1] then{сравнение рядом стоящих элементов}

        begin b:=a[j];{запоминание элемента}

                 a[j]:=a[j+1];{перестановка элементов}

                 a[j+1]:=b

          end

                   end;

for j:=1 to n do write(a[j]:4);

writeln

              end;

writeln('массив после сортировки');

for i:=1 to n do write(a[i]:4);

readln;

 end.

Упражнения

1. В массиве A(20) подсчитать среднее арифметическое отрицательных элементов, сумму квадратов четных элементов.

2. Вычислить где, - параметры, меняющиеся одновременно с номером элемента массива:  - от 0,2 с шагом 0,5; - от 1 с шагом 0,25.

3. Вычислить сумму: где:  - параметр, меняющийся одновременно с номером элемента массива от 0 с шагом 0,05.

4. В массиве В(100) подсчитать сумму каждого десятка элементов. Из найденных элементов сформировать отдельный массив.

5. В массиве В(20) найти элементы, кратные трем, их порядковые номера, количество и сумму. Из найденных элементов сформировать отдельный массив.

6. В массиве А(20) найти максимальное и минимальное значения среди элементов и их среднее арифметическое. Значения элементов массива задаются формулой: При делении на 0 значение элемента массива принять равным 1.

7. Для вектора (х12,………….,х20),имеющего положительные и отрицательные элементы. Вычислить
Среднее арифметическое положительных элементов массива. Сумму элементов, стоящих на четных местах

8. Составить программу для упорядочивания элементов вектора (х12,………….,х100),расположив их в порядке возрастания в том же массиве.

9.  Дан вектор М(20). Расположить элементы вектора по возрастанию.

10. В массиве С(100) найти количество элементов, лежачих в диапазоне от А до В.

11. В массиве M(100) найти максимальное и минимальное значения элементов и их порядковые номера. Элементы массива вычисляются по формуле
при делении на 0 значение элемента принять равным десяти.

12. Дан вектор А(20). Расположить элементы вектора по убыванию.

13. В массиве В(30) найти элементы, кратные двум, их порядковые номера, количество и сумму. Из найденных элементов сформировать отдельный массив.

14. Найти количество элементов массива, стоящих между максимальным и минимальным элементами.

15. Найти минимальный элемент массива В(20) среди четных элементов массива.

16. Написать программу, которая удаляет из массива В(10) элементы,меньше заданной величины и освободившиеся места заполняет нулями

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

А(20).

18. Найти сумму положительных элементов массива A(20), расположенных до максимального элемента.

19. Найти сумму элементов массива A(20), расположенных после первого встреченного нуля

Двумерные массивы



<== предыдущая лекция | следующая лекция ==>
Требования к представлению докладов. | Описание двумерного массива
Поделиться с друзьями:


Дата добавления: 2018-10-15; Мы поможем в написании ваших работ!; просмотров: 269 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Большинство людей упускают появившуюся возможность, потому что она бывает одета в комбинезон и с виду напоминает работу © Томас Эдисон
==> читать все изречения...

2768 - | 2421 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.017 с.