
- •«Колледж бизнеса и права»
- •Введение
- •Программа практики
- •1.1 Цели и задачи практики
- •1.2 Календарный график работы
- •Реализация индивидуального задания на практике
- •2.2 Инструменты разработки
- •2.4 Программирование на языке Object Pascal в среде Delphi
- •Литература
- •Приложение а (обязательное) Текст программы
- •Листинг а.14 - Программа обработки базы данных на языке Pascal
- •Листинг а.14.1 - Программа обработки базы данных(модуль а) на языке Pascal
- •Приложение б (обязательное) Блок схемы
Литература
Багласова Т.Г. Методические указания по оформлению курсовых и дипломных работ. - Мн.: ТБП, 2006
Грибанов В.П. и др. Основы алгоритмизации и программирование. - М.: Бином, 1999
Культин Н.Б. Программирование в Turbo Pascal и Delphi. 2-ое изд. переработанное и дополненное. - С-Пб: БХВ-Петербург, 2008
Леонтьев В.П. Новейшая энциклопедия персонального компьютера. - М.: ОЛМА-ПРЕСС, 2002
Фаронов В.В. Delphi. Программирование на языке высокого уровня. - С-Пб: Питер, 2005
ГОСТ 2.106-96. ЕСКД. Текстовые документы
ГОСТ 19.401-2000. ЕСПД. Текст программы
ГОСТ 19.701-90. ЕСПД. Схемы алгоритмов, программ, данных и систем
Приложение а (обязательное) Текст программы
Листинг А.1 – Линейные алгоритмы
var a:real;
x:real;
z:real;
y:real;
lnn:real;
koren:real;
stepen:real;
znamenatel:real;
begin
repeat {Программа выполняет цикл. Если значения x,y,z будут равны 0, то программа начнется заново}
writeln('Введите значение x');{ вводим значение х}
readln(x);
writeln(Введите значение y');{ вводим значение y}
readln(y);
writeln('Введите значение z'); { вводим значение z}
readln(z);
if (x=0) or (y=0) or (z=0) then
writeln(' введенные значения равны 0, прошу ввести новые значения');
until { повтор программы до нужных условий ( не равных 0)}
(x<>0) and (y<>0) and (z<>0);
begin
lnn:=exp(ln(1+exp(x))*5);
koren:=sqrt(abs(x+y+z));
stepen:=(x-y-z)*(x-y-z)*(x-y-z);
znamenatel:=ln(2)*(sin(2)/cos(2))/ln(2);
a:=(lnn+koren-stepen)/znamenatel;
writeln('a=', a:4:3);
end;
end.
Листинг А.2 – Использование процедур и функций.
var a:real;
x:real;
z:real;
y:real;
lnn:real;
koren:real;
stepen:real;
znamenatel:real;
procedure schet_ln; {процедура счета натурального логарифма}
begin
lnn:=exp(ln(1+exp(x))*5); {формула}
writeln('ln=',lnn);
end;
procedure schet_koren; {процедура счета корня}
begin
koren:=sqrt(abs(x+y+z));
writeln('koren=',koren);
end;
procedure schet_stepen; {процедура возведения в степень}
begin
stepen:=(x-y-z)*(x-y-z)*(x-y-z); {формула}
writeln('stepen=',stepen);
end;
procedure schet_znamenatel; {процедура счета знаменателя}
begin
znamenatel:=ln(2)*(sin(2)/cos(2))/ln(2); {формула}
writeln('znamenatel=',znamenatel);
end;
procedure schet_otvet; {процедура счета ответа}
begin
a:=(lnn+koren-stepen)/znamenatel; {формула}
writeln('a=', a:4:3);
end;
begin { основная программа}
writeln('vvedite chisla');
readln(x,y,z);
schet_znamenatel; {вызов процедур}
schet_koren;
schet_stepen;
schet_ln;
schet_otvet;
end.
Листинг А.3 – Использование массивов
const n=5;
var a:array[1..n, 1..n] of integer ;{задаем двумерный массив}
j,i, sumgl,sumpb:integer;
begin
randomize;{задаем случайные значения массива}
sumgl:=0;
sumpb:=0;
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:= random (8) + 1 ; {к рандомному значению(8) +1)
write (a[i,j] : 2);
if i=j then sumgl:= sumgl +a[i,j]; {формула для вычисления главной диагонали}
if i +j = n+1 then sumpb:= sumpb + a[i,j]{формула для вычисления побочной диагонали}
end;
writeln
end;
writeln('summa glavnoy diagonali =', sumgl);
writeln('summa pobochnoy diagonali =', sumpb);
readln
end.
Листинг А.4 – Использование строк
uses crt;
var
a:string;
i:integer;
begin
write('введите строку:');
read(a);
writeln;
for i:=1 to length (a) do begin { определение длинны строки}
if a[i] in ['a'..'z'] then a[i]:=upcase (a[i]); { если буквы будут прописными в массиве, тогда сделать их заглавными}
end;
writeln('Измененная строка :',a);
readln;
readln;
end.
Листинг А.5 – Использование записей
Uses Crt;
Type StFIO=string[20];
StTELEPHONE=string[10];
STNAZVANIE_GAZETY=string[20];
RecBook=record
FIO: STFIO;
TELEPHONE:STTELEPHONE;
NAZVANIE_GAZETY:STNAZVANIE_GAZETY;
End;
Var BookFile:file of RecBook;
Work:RecBook;
Vid:byte;
End_Menu:boolean;
Name:String[12];
Procedure Name_File;
Begin
Write('vvedite imya dannih spiska gazetchikov');
Readln(Name);
End;
Procedure AddRec;
Begin
Writeln('vvod zapisi ', FilePos(BookFile)+1);
With Work do
Begin
Write('Vvedite FIO ');
Readln(FIO);
Write('vvedite TEPELHONE ');
readln(telephone);
write('vvedite NAZVANIE GAZETY');
readln(nazvanie_gazety);
Write(BookFile,Work);
End;
End;
Procedure Create_Book_Phone;
Var Ind,Count:integer;
Begin
Name_File;
Assign(BookFile,'d:\slv.txt');
Rewrite(BookFile);
Writeln('sozdanie zapicey ','d:\slv.txt' );
Write('vvedite chislo zapicey');
Readln(Count);
For Ind:=1 to Count do
AddRec;
Writeln('sozdano');
Writeln('fail dannih imeet' , FileSize(BookFile),' zapici');
Close(BookFile);
End;
Procedure OutputRec;
Begin
Read(BookFile,Work);
With Work do
Begin
Write('zapic' ,FilePos(BookFile),':');
Writeln('FIO:' ,FIO, 'TELEPHONE' , TELEPHONE , 'NAZVANIE_GAZETY' , NAZVANIE_GAZETY);
End;
End;
Procedure OutputAllRec;
Begin
Name_File;
Assign(BookFile,'d:\slv.txt');
Reset(BookFile);
if IOResult=0 then
begin
Seek(BookFile,0);
Writeln('vivod spiska','d:\slv.txt' );
While (not EOF(BookFile)) do
OutPutRec;
End
Else Writeln('faila s imenem ' +'d:\slv.txt'+' na diske net');
End;
Procedure UpdateRec;
Var NumRec: LongInt;
Begin
Name_File;
Assign(BookFile,'d:\slv.txt');
Reset(BookFile);
if IOResult=0 then
begin
Write('ukashite nomer izmenyaemoy zapici');
Readln(NumRec);
Seek(BookFile,NumRec-1);
Writeln('staroe znachenie zapicy:');
OutputRec;
Seek(BookFile,NumRec-1);
Writeln('zadaem novoe znachenie ', NumRec, 'zapicy');
AddRec;
Close(BookFile);
End
Else Writeln('faila c '+'d:\slv.txt'+' na diske net');
end;
Procedure AddRecToEnd;
Begin
Name_File;
Assign(BookFile,'d:\slv.txt');
Reset(BookFile);
if IOResult=0 then
begin
Seek(BookFile,FileSize(BookFile));
AddRec;
Writeln('izmenenni fail dannih imeet' ,FileSize(BookFile), 'imya');
Close (BookFile);
End
Else
Writeln('faila c imenem '+'d:\slv.txt'+' na diske net');
End;
Procedure FindFio;
Var
BookFile:file of RecBook;
Work:RecBook;
Maska: STTELEPHONE;
Rez_Find:boolean;
CountRec:integer;
Begin
name_file;
Assign(BookFile,'d:\slv.txt');
Reset(BookFile);
if IOResult=0 then
begin
Write('vvedite NOMER i NAZVANIE GAZETY dlya poiska');
Readln(Maska);
Rez_Find:=False;
CountRec:=0;
While(not Eof(BookFile)) do
Begin
Read(BookFile,Work);
With Work do
If Pos(Maska,TELEPHONE) <>0 then
Begin
Rez_Find:=True;
Inc(CountRec);
Writeln('FIO:' , FIO , 'TELEPHONE' ,TELEPHONE, 'NAZVANIE_GAZETY' , NAZVANIE_GAZETY);
End;
End;
If Rez_Find then Writeln('chislo zapicey dlya ', Maska,'=',CountRec)
Else
Writeln('v spiske ludey s takim nomerov net', Maska);
Close(BookFile);
End
Else
Writeln('faila c imenem '+'slv.txt'+' na diske net');
End;
Begin
ClrScr;
End_Menu:=False;
Repeat
Writeln('spisok ');
Writeln('vibirite vid raboty ');
Writeln('1-sozdanie faila ');
Writeln('2-prosmotr spiska');
Writeln('3-izmenenie');
Writeln('4-dopolnenie spiska');
Writeln('5-posik cheloveka ');
Writeln('0-zavershenie ');
Write('vash vibor');
Readln(Vid);
Case Vid of
1: Create_Book_Phone;
2:OutPutAllRec;
3:UpdateRec;
4:AddRecToEnd;
5:FindFio;
0:End_Menu:=True;
end;
Writeln('nashmite enter Enter');
Readln;
ClrScr;
Until End_Menu;
End.
Листинг А.6 – Оформление и подключение модуля
unit yp; { Создание модуля}
interface
const nmax=20;
var
a:array [1..nmax] of integer;
procedure schet_otveta(var x,s,y,p,n:integer); { процедура для счета ответа и для создания модуля}
implementation
procedure schet_otveta(var x,s,y,p,n:integer);
var
j,i:integer;
begin
write('razmer massiva do ',nmax,'n=');
read(n);
x:=0;
s:=0;
y:=0;
p:=1;
for i:=1 to n do
begin
write('a[',i,']=');
read(a[i]);
end;
writeln('ishodni massiv:');
for i:=1 to n do
write(a[i],' ');
writeln;
for i:=1 to n do
begin
if a[i]<0 then { счет отрицательных элементов массива}
begin
y:=y+1;
p:=p*a[i]
end
else if a[i]>0 then { счет положительных элементов массива}
begin
x:=x+1;
s:=a[i]+s
end
end;
writeln('Summa poloshitelnih = ',s, 'ih kol-vo = ',x);
writeln('proizvedenie otricatelnyh = ',p,' ih kol-vo = ',y);
end;
end.
Листинг А.6.1 – Программа вызова модуля
uses crt,yp;
var
n,x,s,y,p:integer;
begin
clrscr;
schet_otveta(x,s,y,p,n);
end.
Листинг А.7 – Использование прямой и косвенной рекурсии
function f(n:integer):extended;
begin
if n=1 then f:=0
else if n=1 then f:=0.7
else f:=((n-1)/2)+(3/4*(n-2)) {формула}
end;
var n:integer; {основная программа}
begin
repeat {повторения условия, пока оно не будет выполнено}
write('vvedite n>2 n=');
readln(n);
until n>2; {условие повторения}
write ('x=',f(n):2:1);
readln
end.
Листинг А.8 – Использование бинарного поиска
const n=10;
var a:array [1..n] of integer;
i,k,s,l,r:integer;
begin
randomize;
writeln('Isxodnii massiv: ');
for i:=1 to n do
begin
a[i]:=random(20)-5; {заполняет массив случайными числами}
write(a[i]:3);
end;
writeln;
for i:=1 to n+1 do {Формула для сортировки}
for k:=i+1 to n do {Формула для сортировки}
if a[k]<a[i] then {Если массив k меньше массива i}
begin
s:=a[i]; {сумма равна ассиву I}
a[i]:=a[k];
a[k]:=s; { массив к=сумме}
end;
writeln('sortirovanny massiv: ');
for i:=1 to n do
begin
write(a[i]:3);
writeln;
if a[i]>0 then s:=s+a[i]; {подсчет сумму элементов массива}
end;
write('summa poloshitelnih elementov massiva: ',s);
writeln;
end.
Листинг А.9 – Программа сортировки включением
const n=4;
k=5;
var i,j,s,l,m:integer;
a:array[1..n] of integer;
c:array[1..k] of integer;
b:array[1..k+n] of integer;
begin
randomize;
j:=1;
for i:=1 to n do
begin
a[i]:=random(20)-5; {Заполняет массив случайными числами}
b[i]:=a[i];
inc(j); {приращение j}
end;
writeln;
for i:=1 to k do
begin
c[i]:=random(20)-5; {заполняет массив}
b[j]:=c[i];
inc(j); {приращение j}
end;
writeln;
writeln('Massiv B=A+C:'); {вывод суммированных массивов}
for i:=1 to n+k do write (b[i]:4) {суммированный массив};
writeln;
for i:=2 to n+k do {суммированный массив}
begin
s:=i-1;
l:=b[i];
while (s>0) and (l<=b[i]) do begin{если сумма больше нуля и массив меньше массив b>1}
b[s+1]:=b[s]; {массив B |сумма+1| равна суммированному массиву}
dec(s);
end;
b[s+1]:=l;
end;
write('vvedite M: ');
readln(m);
j:=0;
writeln('sorterovanny massiv: ');
for i:=1 to k+n do
begin
write(b[i]:4);
if b[i]<m then inc(j); { если массив B < числа для сравнения, тогда приращение J}
end;
writeln;
writeln('elementi <M:',j:4);
readln;
end.
Листинг А.10 – Использование обменной сортировки
uses crt;
const max=100;
procedure massiv;
var a,c:array[1..max] of integer;
n,k,i,j,s:byte;
x:integer;
begin
clrscr;
randomize;
repeat {повторение условия}
write('Razmer massiva ot A do ',max div 20,' n=');
readln(n);
until n in [1..max div 2]; {Условие повторения}
writeln('Ishodni massiv A:');
for i:=1 to n do
begin
a[i]:=random(20)-5; {заполнение массива A}
write(a[i]:3);
end;
begin
writeln;
repeat {повторение условия}
write('Razmer massiva C do ',max div 20,' k=');
readln(k);
until k in [1..max div 2]; {Условие повторения}
writeln('ishodni massiv C:');
for i:=1 to k do
begin
c[i]:=random(20)-5; {заполнение массива C}
write(c[i]:3);
end;
writeln;
for i:=1 to k do
begin
procedure obedenenie;
n:=n+1;
a[n]:=c[i]; {объеденение массива}
end;
writeln('Obedenenni massiv A+C');
for i:=1 to n do
write(a[i]:3);
writeln;
writeln;
for i:=1 to n-1 do {сортировка}
for j:=i+1 to n do {сортировка}
if a[i]>a[j] then
begin
x:=a[i];
a[i]:=a[j];
a[j]:=x;
end;
writeln('otsortirovanni massiv:');
for i:=1 to n do
write(a[i]:3);
writeln;
begin
if a[i]>0 then s:=s+a[i]; {суммирует положительные элементы массива}
end;
begin
write('summa poloshitelnix elementov massiva:',s); {выводит ответ}
writeln;
end;
begin {вызов процедур}
massiv;
obedenenie;
end.
Листинг А.11- Использование сортировки разделением
uses crt;
var a,x:array [1..100] of integer;
n,m,i,j,k,b,s:integer;
begin
procedure massiv_a_and_x; { процедура заполнения массива}
begin
clrscr;
randomize;
write('n=');
readln(n);
write('m=');
readln(m);
writeln('Ishodni massiv A:');
for i:=1 to n do
begin
a[i]:=random(50)-50; {заполнение массива отрицательными числами}
write(a[i]:4);
end;
writeln;
writeln('Massiv X:');
for i:=1 to m do
begin
x[i]:=random(50); {заполнение массива положительными числами}
write(x[i]:4);
end;
Procedure obedenenie; {процедура объединения массива}
begin
writeln;
for i:=1 to m do
begin
n:=n+1;
a[n]:=x[i]; {объединение массива а и х}
end;
writeln('Obedenenni massiv:');
for i:=1 to n do
write(a[i]:4);
writeln;
for i:=2 to n do
begin
procedure sort_razdel; {процедура сортировки разделением}
begin
b:=a[i];
j:=1;
while b>a[j] do {цикл с предусловием}
inc(j);
for k:=i-1 downto j do {сама сортировка}
a[k+1]:=a[k];
a[j]:=b;
end;
writeln('otsortirovanni massiv:');
s:=0;
for i:=1 to n do
begin
Procedure summa; {процедура суммы положительных элементов}
begin
if a[i]>0 then s:=s+a[i]; {формула суммы положительных элементов}
write(a[i]:4);
end;
writeln;
write('Summa poloshitelnih elementov=',s);
readln
end;
begin
summa;
obedenenie;
sort_razdel;
massiv_a_and_x;
end.
Листинг А.12 – Программа использования динамических массивов
var
b:array[1..10]of integer;
p1,p2:^integer;
i,j:integer;
begin
procedure massiv; {процедура создания массива}
begin
writeln('Ishodny massiv');
for i:=1 to 10 do begin b[i]:=random(100); {заполнение массива случайными числами}
write(b[i]:4);
end;
procedure chet; {процедура создания массива с четными элементами}
begin
writeln;
p1:=addr(b[1]); {вывод первого элемента массива}
for i:=1 to 10 do
if qwe[i] mod 2=0 then {сортировка по четным элеменам}
writeln('chetni element=',b[i]:4,'');
writeln;
end;
procedure element_massiv;
p2:=addr(b[8]); {вывод 8 елемента}
writeln('8 element =',p2^);
p2^:=84/4; {уменьшение элемента в 4 раза}
writeln('new 8 element =',p2^);
write('Poluchenny massiv');
for i:=1 to 10 do write(b[i]:4); {вывод нового массива с измененным элементами}
writeln;
readln
end;
begin
massiv;
chet;
element_massiv;
end.
Листинг А.13 – Программа использования списков
Uses Crt;
Type
NameStr = String [20];
Link = ^auto;
Auto = record
Name : NameStr; {Название газеты}
Kod: String; {Индекс газеты}
Next : Link;
Cen:real; {Цена газеты}
end;
Var P,First : Link;
NamFind : NameStr;
V : 0..4;
EndMenu : boolean;
Function FindName(FN:NameStr) : Link; {функция поиска по названию газеты}
Var Curr : Link;
begin
Curr:=First;
while Curr <> Nil do
if Curr^.Name=FN then
begin
FindName:=Curr;
Exit;
end
else Curr:=Curr^ .Next;
FindName:=Nil;
end;
procedure AddFirst(A:Link); {процедура добавления первой записи}
begin
A^. Next:=First;
First:=A;
end;
procedure DelFirst(var A:Link); {процедура удаления первой записи}
begin
A:=First;
First:=First^. Next;
end;
procedure DelAfter(Old:Link; var A:Link);{процедура удаления записи после первой}
begin
A:=Old^.Next;
Old^.Next:=Old^.Next^.Next;
end;
procedure InpAvto; {процедура описания}
begin
P:=New(Link);
Writeln('Vedite nazvanie gazety: ');
Readln(P^.Name) ;
Writeln('Vvedite index gazety : ');
Readln(P^.Kod);
writeln('Vvedite ceny gazety: ');
readln(P^.Cen);
AddFirst(P);
end;
procedure MyList; {процедура вывода списка}
var Curr : Link;
begin
Curr:=First;
while Curr <> Nil do
begin
Writeln('Nazvanie gazety: ' , Curr^. Name);
writeln('Index gazety: ', Curr^. kod) ;
writeln('Cena gazety ', Curr^. cen:0:0);
Curr:=Curr^.Next;
end ;
Write('Vivod spiska okonchen. Nashmite Enter');
Readln;
end;
Begin
New(P);
EndMenu:=False ; {меню}
repeat
ClrScr;
Writeln('Vibirite shelaemoe deistvie: ');
Writeln('1. Zapis v pervy spisok');
Writeln('2. Ydalenie pervogo obekta iz spiska');
WriteLn('3. Prosmort spiska') ;
Writeln('4. Ydalenie obekta ') ;
WriteLn('0. Konec programmi');
Readln(V) ;
Case V of
1 : InpAvto;
2 : DelFirst(P);
3 : MyList;
4 : begin
Write('Vvedite naimenovanie zapici, sledyushaya za ney :');
Readln(NamFind) ;
DelAfter(FindName(NamFind),P);
FindName(NamFind)
end
else EndMenu:=True;
end;
until EndMenu;
Dispose(p);
readln;
end.