Структура программы. Описание типов данных. Любая программа,все равно на каком языке программирования, состоит из 2-х частей
Вид материала | Программа |
- Программа как формализованное описание процесса о бработки данных. Программное средство., 568.85kb.
- Структура программы. Скалярные типы данных. Выражения и присваивания цель: Изучить, 871.9kb.
- Программа как формализованное описание процесса обработки данных. Программное средство., 362.79kb.
- Структура программы в языке программирования С++. Обмен данными между функциями (параметры, 37.24kb.
- Xxvii. Народная библия библия, 71.72kb.
- Структура программы на языке Turbo Pascal, 26.15kb.
- Краткий курс лекций "Основы программирования на языке Паскаль", 291.49kb.
- Структура программы на Паскале Система программирования Турбо Паскаль, 145.34kb.
- Учебной программы дисциплины «Программирование на языке vba» для ооп «050100. 62 Педагогическое, 13.46kb.
- Лекция Языки и системы программирования. Структура данных, 436.98kb.
{ формула прямоугольников }
{ приближенное решение интеграла }
uses
WinCrt;
const
pi=0.785398;
a=0;
b=1;
label lend;
var
x,y:real;
d,c:real;
i,n:integer;
begin
lend:Writeln('укажите число делений отрезка b-a ');
readln(n);
if n<>0 then
c:=(b-a)/n; {шаг деления}
else
begin
writeln('n=0 ');
goto lend;
end;
x:=c/2;
y:=0;
for i:=1 to n do
begin
{ writeln('x= ',x:5:3); }
y:=y+1/(1+x*x);
{writeln('y= ',y:5:3); }
{ readkey; }
x:=x+c;
end;
y:=c*y;
d:=abs(y-pi);
writeln('интеграл равен = ',y:10:9);
writeln('ошибка в расчете ',d:10:9);
end.
{ формула трапеций }
{ приближенное решение интеграла }
uses
WinCrt;
const
pi=0.785398;
a=0;
b=1;
label lend,eend;
var
x,y,y1,y2:real;
d,c:real;
i,n:integer;
begin
Writeln('укажите число делений отрезка b-a ');
readln(n);
if n<>0 then
c:=(b-a)/n
else
begin
Writeln('n=0');
goto lend;
end;
x:=0;
y1:=1/(1+x*x);
x:=b;
y2:=1/(1+x*x);
x:=c;
for i:=1 to n-1 do
begin
{writeln('x= ',x:5:3); }
y:=y+1/(1+x*x);
{writeln('y= ',y:5:3); }
{ readkey; }
x:=x+c;
end;
y:=c*(y1/2+y2/2+y);
d:=abs(y-pi);
writeln('интеграл равен = ',y:10:9);
writeln('ошибка в расчете ',d:10:9);
goto eend;
lend: writeln('n равно 0');
eend:end.
{ формула симпсона }
{ приближенное решение интеграла }
uses
WinCrt;
const
pi=0.785398;
a=0;
b=1;
label lend,eend;
var
x,y,y1,y2,yy:real;
d,c:real;
i,n:integer;
begin
Writeln('укажите число делений отрезка b-a ');
readln(n);
if n<>0 then
c:=(b-a)/n
else
begn
Writeln('n=0 ');
goto lend;
end;
x:=0;
y1:=1/(1+x*x);
x:=b;
y2:=1/(1+x*x);
x:=c;
for i:=1 to n-1 do
begin
y:=y+1/(1+x*x);
x:=x+c;
end;
x:=c/2;
yy:=0;
for i:=1 to n do
begin
writeln('x= ',x:5:3);
yy:=yy+1/(1+x*x);
writeln('y= ',yy:5:3);
readkey;
x:=x+c;
end;
y:=(y1/2+y2/2+y)+2*yy;
y:=c*y/3;
d:=abs(y-pi);
writeln('ннтеграл равен = ',y:10:9);
writeln('ошибка в расчете ',d:10:9);
goto eend;
lend: writeln('n равно 0');
eend:end.
Лекция 10
Примеры составления программ для различных задач.
Программы для упражнений (типовые задачи для курсовых).
1.Вычислить ежемесячные выплаты по займу по формуле:
,
где г = р/100 – процент выплат,
n – число лет выплат по займу,
s - размер займа.
Для расчета общей прибыли используется формула: d=12mn-s.
Для расчета показательного выражения используются стандартные функции
exp(x) и ln (x) по формуле
.
Program Zaim;
Var m,s,p,r,n,d : real;
rub,kop : integer; {d- общая прибыль, - рубли, - копейки}
writeln(‘Введите s – заем, p - процент, n - число лет’);
writeln(‘нельзя n=0 или s=0!!’)
readln(s,p,n);
r:=p/100;
a:= exp(n*ln(1+r)); {см. Формулу для показательной степеии}
m:= (s*r*a)/(12*(a-1)); {}
m:= trunc(100*m+0.5)/100;
d := m*n*12-s;
rub:= round(s*100) div 100;
kop:=round(s*100) mod 100;
writeln(‘Взято’,rub,’руб. ‘, kop,’коп.’,’под ’,p:5;2,’% на ’,n:5:2,’ лет’);
writeln;
rub:=round(m*100) div 100;
kop:=round(m*100) mod 100;
writeln(‘Месячная выплата’,rub,’ руб. ‘, kop,’ коп’);
rub:=round(d*100) div 100;
kop:=round(d*100) mod 100;
writeln(‘Общая прибыль=’,rub,’ руб. ‘, kop,’ коп ’);
end.
Обращаю внимание на функции округления до целого:
trunc(x:real):longint round(x:real):longint.
-
2.Опеделение дня недели по дате.
program den_nedeli;
var den,mes,god:integer;
n:longint:
begin
writeln(‘’);
readln(den,mes,god);
if (m>=2) then m:=m+1 else
begin
m:=m+13;god:=god-1;
end;
n:=trunc(365.25*god)+trunc(30.6*mes)+den-621050;
n:=n-trunc(n/7)*7+1;
case n of
1: writeln(‘понедельник’);
2 : writeln(‘вторник’);
3: writeln(‘среда’);
4: writeln(‘четверг’);
5: writeln(‘пятница’);
6: writeln(‘суббота’);
7: writeln(‘воскресенье’);
end;
end.
3.Вычисление рядов с заданной погрешностью
;
Где ! означает факториал. Напр. 5!=1*2*3*4*5=120.
Программа вычисления косинуса с точностью до 10-7.
program mycosx
uses wincrt;
const eps=1e-7;
var x,s,u:real;
i:word;
begin
write(‘Укажите Х в градусах: ’);
readln(x);
x:=x*pi/180;
s:=1; u:=1; i:=0;
repeat
i:=i+2;
u:=-u*x*x/((i-1)*i);
s:=s+u;
until abs(u)<=eps;
writeln(‘cos(’ ,x*180/pi:6:2,’ = ‘,s:7:3);
end.
Вычислим синус по другому циклу с испольованием оператора while.
const eps=1e-7;
var x,s,u:real;
i:word;
begin
write(‘Укажите Х в градусах:’); readln(x);
x:=x*pi/180;
s:=x; u:=x; i:=1;
while abs(u)>eps do
begin
i:=i+2; u:=-u*x*x/((i-1)*i);
s:=s+u;
end;
writeln(‘sin(’ ,x*180/pi:6:2,’ = ‘,s:7:3);
end.
4.Вычисление определенного интеграла.
Искомая функция y=3x2 . Вычислить, применяя метод прямоугольника,
трапеций и Симпсона.
uses wincrt;
var a,b; real {выбор интервала}
h:real;
s1,s2,s3:real; {s1-для прямоугольника,s2- трапеция,s3-симпсон}
n:integer;
x1,x2: real;
i:integer;
begin
writeln(‘вычисляем интегралы’);
write(‘нижняя граница а=’); readln(a);
write(‘верхняя граница в=’); readln(b);
write(‘число разбиений п=’); readln(n);
h:=(b-a)/n;
x1:=a+h/2;
x2:=a;
s1:=3*x1*x1;
s2:=((3*x2*x2)+(3*b*b))/2;
for i:=1 to n-1 do
begin
x1:=x1+h; x2:=x2+h;
s1:=s1+(3*x1*x2); {для прямоугольника}
s2:=s2+(3*x2*x2); {для трапеции}
end;
s1:=h*s1;
s2:=h*s2;
s3:=(2*s1+s2)/3; {для симпсона}
writeln(‘для прямогольника’,s1:8:5);
writeln(‘для трапеции’,s2:8:5);
writeln(‘для симпсона’,s3:8:5);
end.
5.Программы обработки матриц и векторов.
а) транспонировать матрицу Aij.
uses wincrt;
const a:array[1..3,1..6] of integer=
((1,2,3,4,5,6),(7,8,9,10,11,12),(13,14,15,16,17,18));
var b:array[1..6,1..3] of integer;
i,j:integer;
begin
for j:=1 to 6 do
for i:=1 to 3 do
b[j,i]:=a[i,j];
for j:=1 to 6 do
begin
for i:=1 to 3 do
write(b[j,i],' ');
writeln
end;
end.
2) Умножение двух матриц.
Для умножения двух матриц используется следующая формула:
для к=1…r, i=1…m
где матрица, состоящая из m столбцов и n строк, т.е размерностью m*n;
матрица размерность n*r
При умножении матриц обязательно совпадение строк 1-ой матрицы
со столбцами 2-ой матрицы.
Progam Matrix1;
uses wincrt;
const a:array[1..3,1..6] of integer=
((1,2,3,4,5,6),(7,8,9,10,11,12),(13,14,15,16,17,18));
b:array[1..6,1..4] of integer=
((1,2,3,4),(7,8,9,10),(13,14,15,16),(1,2,3,4),(5,6,7,8),(1,2,3,4));
var c : array[1..3,1..4] of integer;
i,j,k : integer;
begin
for i:=1 to 3 do
for k:=1 to 4 do
begin
for j:=1 to 6 do
c[i,k]:=c[i,k]+a[i,j]*b[j,k]; { умножение матриц}
end;
begin
for i:=1 to 3 do
begin
for k:=1 to 4 do
write(c[i,k],' ');
writeln
end;
end;
end.
6.Процедуры и функции.
Вычислим среднеквадратическое отклонение для призвольной случайной последовательности.
Program sigma;
uses wincrt;
{const n:integer=1000;}
type e=array[1..1000] of real;
var a:e;
i,j,n,m:integer;
x1,x2:real;
procedure stochastic(var h:integer; var sigma,mat:real; var aa:e);
begin
mat:=0;
for i:=1 to h do
mat:=mat+a[i];
mat:=mat/h;
for i:=1 to h do
sigma:=(a[i]-mat)*(a[i]-mat);
sigma:=sqrt(sigma/(h-1));
end;
begin
randomize;
write('введите длину вектора '); readln(n);
write('введите число для датчика случайных чисел '); readln(m);
for i:=1 to n do
a[i]:=random(m);
stochastic (n, x1, x2, a);
writeln('мат.ожидание ',x1:5:2,' ср.кв.отклонение ',x2:6:3);
end.
Вычисление корня уравнения методом половинного деления.
Возьмем, например, уравнение:
Program halb;
function ff(x:real):real;
begin
ff:=4-exp(x)-2*x*x;
end;
var a,b,fa,fb,c,eps:real;
begin
write(‘границы интервала поиска корня - а,в ’); readln(a,b);
write(‘задайте погрешность ’); readln(eps);
fa:=f(a);
while b-a>eps do
begin
c:=(a+b)/2; fc:=f(c);
if fa*fc<=0 then b:=c else
begin
a:=c; fa:=fc;
end;
end;
writeln(‘f= ’,f(a):10:5,’ при x= ‘,a:10:5);
end.
7.Пример программы для типа запись (record).
Program schola;
uses wincrt;
type student = record
name : string[10];
surname : string[20];
university : string[50];
gruppa : string[10];
den: string[10];
end;
var school: array[1..10] of student;
i: 1..10;
c: byte;
procedure in_data ;
{ввод данных}
begin
writeln(‘введите сведения по № ’,i,’ : ’);
write(‘имя’); readln(school[i].name);
write(‘фамилия’); readln(school[i].surname);
write(‘вуз’); readln(school[i].university);
write(‘группа’); readln(school[i].gruppa);
write(‘день рождения’); readln(school[i].den);
writeln;
end;
procedure print_data;
{печать сведений о студентах}
begin
with school[i] do
begin
writeln(‘имя’,name);
writeln(‘фамилия’,surname);
writeln(‘вуз’,university);
writeln(‘группа’,gruppa);
writlen(‘день рождения’,den);
end;
end;
begin
for i:=1 to 10 do
in_data;
writeln;
writeln(‘данные о 5 студентах’);
writeln;
i:=5;
print_data;
write(‘задайте номер группы ’); readln(c);
for i:=1 to 10 do
if school[i].gruppa = c then
print_data
else
writeln(‘ нет такого студента’);
end.
8.Обработка файлов.
Приводим пример записи и считывания данных для типизированного
файла
program My_file;
uses wincrt;
type ff=file of real;
var f1:ff;
sum,mult,r:real;
begin
writeln(‘’);
{назначаем файл на диске и если его нет,то создаем заново}
Assign(f1,’data.txt’); rewrite(f1);
randomize;
for i:=1 to 100 do { ввод данных через датчик сл.чисел}
begin
r:=random(10,);
write(f1,r);
end;
seek(f1,0); { устанавливаем указатель на 1-ю запись можно reset(f1)}
sum:=0;
mult:=1;
while not eof(f1) do
read(f1,r); sum:=sum+r; mult:=mult*r;
end;
close(f1);
writeln(‘сумма= ’,sum:7:3,’произведение= ’,mult:7:3);
end.
Приложение.
Сообщения об ошибках Компилятора
Ошибка * Сообщение об ошибках
1 Недостаточно памяти
2 Требуется идентификатор
3 Неизвестный идентификатор
4 Двойной идентификатор
5 Ошибка синтаксиса
6 Ошибка в реальной константе
7 Ошибка в константе целого числа
8 превышение string
9 Слишком много вложенных файлов
10 Неожиданный конец файла
11 Выравнивают слишком долго
12 Требуется идентификатор типа
13 Слишком много открытых файлов
14 Недопустимое имя файла
15 Файл не найден
16 Полный диск
17 Недопустимая директива компилятора
18 Слишком много файлов
19 Неопределенный тип на определении указателя
20 Переменный требуется идентификатор
21 Ошибка в типе
22 Слишком большая структура
23 базовый тип множества вне границ дипазона
24 Компонентами файла не могут быть файлы или объекты
25 Недопустимая длина строки
26 неправильно указан Тип
27 порядковый тип вне границ диапазона
28 Нижняя граница больше верхней
29 нужен Порядковый тип
30 нужна константа целого числа
31 нужна Константа
32 Целое число или реальное для константы
33 нужен идентификатор для указателя
34 Недопустимый тип результата
35 нужен идентификатор метки
36 нет begin
37 нужен end
38 нужно выражение целого числа
39 нужно выражение Порядкового типа
40 Булевское ожидаемое выражение
41 Типы операнда не соответствуют оператору
42 Ошибка в выражении
43 Незаконное назначение
44 нужен идентификатор для в записи record
45 Слишком большой файл для объекта(.obj)
46 Неопределенная внешняя ссылка
47 Недопустимый Record для объекта
48 Слишком большй сегмент кода
49 Слишком большой сегмент данных
50 do нужен
51 Недопустимое pubic определение
52 Недопустимое EXTRN определение
53 Слишком много EXTRN определений
54 of нужен
55 нужна секция ИНТЕРФЕЙС
56 Недопустимая перемещаемая ссылка
57 нет then
58 else к ожидаемому to/DOWNTO
59 Недопустимая опережающая ссылка
61 Недопустимый преобразование типа
62 деление на нуль
63 Недопустимый тип файла
64 Нельзя read или write для переменных этого типа
65 нужна переменная для указателя
66 нужна строковая переменная
67 нужен тип строки
68 циклическая ссылка на модуль
69 Название(имя) модуля не соответствует
70 Версия модуля не соответствует
72 Ошибка формата файла модуля
73 нужна секция implementation
74 Константа и типы case не соответствуют
75 нужна переменная типа record
76 Константа вышла за границу диапазона
77 нужна переменная для файла
78 нужно выражение для типа указатель
79 выражение либо real / integer
80 Метка не в пределах текущего блока
81 Метка, уже определенa
82 Неопределенная метка
83 Недопустимый параметр
84 нужен unit
85 ";" требуется
86 ":" требуется
87 ,"" требуется
88 "(" требуется
89 ")" требуется
90 "=" требуется
91 ": = " требуется
92 "[" или " (. " требуется
93 "]" или ".) " требуется
94 "." требуется
95 ".." требуется
96 Слишком много переменных
97 Недопустимый for
98 Ожидаемая переменная integer
99 тип file здесь не допускается
100 несоответствие длины строки
101 Недопустимый порядок полей для const
102 нужна константа строкового типа
103 переменная либо integer, либо real
104 Порядковая ожидаемая переменная
105 inline ошибка
106 Символьное ожидаемое выражение
112 Константа case вне диапазона
113 Ошибка в утверждении(заявлении)
114 Не возможно вызвать процедуру обработки прерываний
116 Для компиляции нужен режим 8087 ($N+ директива)
117 адрес назначения не найден
118 Включаюмые файлы здесь не возможны (раздел операторов вне файла).
120 Требуется nil
121 Недопустимый квалификатор
122 Недопустимая переменная ссылка
123 Слишком много идентификаторов
124 Слишком большой раздел операторв
126 Файлы должны быть описаны в Var
127 Слишком много условных идентификаторов
128 пропущена условная директива
129 нет ENDIF (при компиляции)
130 Ошибка в начальных условных определениях
131 Заголовок не соответствует предыдущему определению процедуры/функции
132 невожможно вычислить выражение
133 Невозможно вычислить это выражение
136 Недопустимая косвенная ссылка
137 Структурированные переменные здесь недопустимы
140 Недопустимая операция с плавающей запятой
142 нужна переменная процедурного типа или типа функция
143 Недопустимая ссылка на процедуру или функцию
144 этот модуль не может использоваться в качестве оверлейного
145 очень большая вложенность
146 файла недоступен
147 нуен тип object
148 описание локальных объектных типов не разрешается
149 требуется Virtual
150 нужен идентификатор метода
151 Виртуальные конструкторы не позволяются
152 Ожидаемый идентификатор конструктора
153 Destructor ожидаемый идентификатор
154 Fail доускается только внутри конструкторов
155 Недопустимая комбинация кода операции и операндов
156 требуетс ссылка на памяти
157 Нельзя добавлять или вычетать перемещаемые идентификаторы
158 Недопустимое счетание регистра
159 инструкции процессоров 286/287 не допускаются
160 Недопустимая ссылка на идентификатор
161 Ошибка генерации кода
162 нужно ключвое сово ASM
163 Дублируется динамический индекс метода
164 Дублирование идентификатора ресурса
165 Двойной или недопустимый индекс экспорта
166 нужен идентификатор процедуры/функции
167 этот идентификатор нелья экспортировать
168 Дублирование экспортируемого имени