Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет_УП 22 итоговый.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.15 Mб
Скачать

Литература

  1. Багласова Т.Г. Методические указания по оформлению курсовых и дипломных работ. - Мн.: ТБП, 2006

  2. Грибанов В.П. и др. Основы алгоритмизации и программирование. - М.: Бином, 1999

  3. Культин Н.Б. Программирование в Turbo Pascal и Delphi. 2-ое изд. переработанное и дополненное. - С-Пб: БХВ-Петербург, 2008

  4. Леонтьев В.П. Новейшая энциклопедия персонального компьютера. - М.: ОЛМА-ПРЕСС, 2002

  5. Фаронов В.В. Delphi. Программирование на языке высокого уровня. - С-Пб: Питер, 2005

  6. ГОСТ 2.106-96. ЕСКД. Текстовые документы

  7. ГОСТ 19.401-2000. ЕСПД. Текст программы

  8. ГОСТ 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]