birmaga.ru
добавить свой файл

1
Министерство образования и науки Российской Федерации


Брянский государственный технический университет

Кафедра

Информатики и Программного Обеспечения


Отчет

по практике за I курс

2004-2005 учебный год


Выполнил Колотовкин Д. С.

Студент группы 04-ПО3

Проверил Волков В. В.

Брянск 2005 г.
Задача №1

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

Дана функция :

Найти корень нелинейного уравнения на промежутке [1;9]

с точностью ε =0.02

Блок-схема программы







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


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


  1. Метод дихотомии (рис. 3)

  2. Метод Ньютона (рис. 4)

  3. Метод хорд (рис. 5)

  4. Метод хорд и касательных (рис. 6)

Результаты программы

Рис. 3 Рис. 4 Рис. 5 Рис. 6

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


Листинг программы:

Program graphiki;

uses crt,graph;

Var

eps,

a0,b0,a,b,

c,

x0,

xh,xk,

x,

otr,

yr, xr :real;

n:byte;

P1: pointer;

ckey : char;

texts: string;

i, gd,gm,y,nk ,sm,desx,size,ikey:integer;
Function selectm(name: string) : string;

begin

TextBackground(blue);

Textcolor(12);

write (name);

TextBackground(black);

Textcolor(white);

writeln;

end;

Function menu(sel : integer) : integer;

const n=6;

var names: array[1..n] of string;

key1, exit, o, s: integer;

chr: char;

begin
TextMode(CO80);

clrscr;

exit:=0;

names[1]:=' Œ¥â®¤ ¤¨å®â®¬¨¨ ';

names[2]:=' Œ¥â®¤ ìîâ®­  ';

names[3]:=' Œ¥â®¤ å®à¤ ';

names[4]:='Œ¥â®¤ å®à¤ ¨ ª á â¥«ì­ëå';

names[5]:=' Ž¯æ¨¨ ';

names[6]:=' ‚ë室 ';

key1:=0;

TextBackground(black);

Textcolor(white);

s:=sel;

repeat
clrscr;

if (key1=80) and (s
if (key1=72) and (s>1) then s:=s-1;

Textcolor(12);

gotoxy(20,2);


Writeln('ணࠬ¬  ¤«ï ¨§®¡à ¦¥­¨ï £à ä¨ª®¢');

gotoxy(30,3);

Writeln('§ ¤ ­­®© ä㭪樨');

Textcolor(white);

for i:=1 to n do

begin

gotoxy(25,6+i);

if s=i then selectm(names[i]) else writeln(names[i]);

end;

chr:=readkey;

key1:=Ord(chr);

if (key1=13) then

begin

exit:=1;

menu:=s;

end;

if (key1=27) then

begin
exit:=1;

menu:=6;

end;

until exit=1;

end;
Function f(x:real) : real;

begin

f:=3*x*x*x-6*x-5;

end;
Function f1(x:real) : real;

Begin

f1:=9*x*x-6;

End;
Function f2(x:real) : real;

Begin

f2:=18*x;

End;
Begin

clrscr;

a0:=1;

b0:=9;

eps:=0.2;

nk:=10;

sm:=1;
if f(a0)*f(b0)<0 then

begin

repeat

sm:=menu(sm);

gd:=Detect;

initgraph (gd,gm,'C:\programm\pascal\tp70\bgi');

cleardevice;

line(0,round(getmaxy/2),getmaxx,round(getmaxy/2));

line(round(getmaxx/2),0,round(getmaxx/2),getmaxy);

line(round(getmaxx/2),0,round(getmaxx/2-3),10);

line(round(getmaxx/2),0,round(getmaxx/2+3),10);

line(getmaxx,round(getmaxy/2),getmaxx-10,round(getmaxy/2)+3);

line(getmaxx,round(getmaxy/2),getmaxx-10,round(getmaxy/2)-3);

outtextxy(getmaxx-10,round(getmaxy/2+10),'X');

outtextxy(round(getmaxx/2)-15,5,'Y');

for i:=1 to 5 do

begin

line(round(getmaxx/2-(getmaxx/12)*i),round(getmaxy/2+5),round(getmaxx/2-(getmaxx/12)*i),round(getmaxy/2-5));

line(round(getmaxx/2+(getmaxx/12)*i),round(getmaxy/2+5),round(getmaxx/2+(getmaxx/12)*i),round(getmaxy/2-5));

line(round(getmaxx/2+5),round(getmaxy/2+(getmaxy/12)*i),round(getmaxx/2-5),round(getmaxy/2+(getmaxy/12)*i));


line(round(getmaxx/2+5),round(getmaxy/2-(getmaxy/12)*i),round(getmaxx/2-5),round(getmaxy/2-(getmaxy/12)*i));

Str(i*round(getmaxy/12),texts);

outtextxy(round(getmaxx/2+10),round(getmaxy/2-(getmaxy/12)*i)-3,texts);

outtextxy(round(getmaxx/2+10),round(getmaxy/2+(getmaxy/12)*i)-3,'-'+texts);

Str(round(((nk/12))+(i-1)),texts);

outtextxy(round(getmaxx/2-(getmaxx/12)*i)-3,round(getmaxy/2+10),'-'+texts);

outtextxy(round(getmaxx/2+(getmaxx/12)*i)+3,round(getmaxy/2+10),texts);

end;

Setcolor(white);

moveto(ROUND((nk/getmaxx)-10),ROUND( (getmaxy/2)));

for i:=0 to getmaxx do

begin

xr:= ((nk/getmaxx)*i-(nk/2));

yr:=f(xr);

y:=round(getmaxy/2-yr);

lineto(i,y);

moveto(i,y);

end;

SetColor(Blue);

case sm of

1 : begin

n:=0; a:=a0; b:=b0;

repeat

inc(n);

c:=(a+b)/2;
if f(b)*f(c)<0 then a:=c else b:=c;

line(round((c+(nk/2))/(nk/getmaxx)),round(getmaxy/2+15),

round((c+(nk/2))/(nk/getmaxx)),round(getmaxy/2-15));

str(n,texts);

outtextxy(round((c+(nk/2))/(nk/getmaxx))-5,round(getmaxy/2-25),texts);

until abs(b-a)<=eps;

str(((a+b)/2):3:3,texts);

outtextxy(round((c+(nk/2))/(nk/getmaxx))-5,round(getmaxy/2+25),texts);

readkey;

end;

2 : begin

if f1(a0)*f2(a0)>0 then x0:=b0 else x0:=a0;

n:=0;

repeat

yr:=round(f(x0));

MoveTo(round((x0+(nk/2))*getmaxx/nk),round(getmaxy-(yr+getmaxy/2)));

c:=x0-f(x0)/f1(x0);

LineTo(round((c+(nk/2))*getmaxx/nk),round(getmaxy/2));

otr:=abs(c-x0);

x0:=c;

inc(n);

Until otr <= Eps;
readkey;

end;

3 : begin

if f1(a0)*f2(a0)>0 then

begin

x0:=a0;

x:=b0

end

else

begin

x0:=b0;

x:=a0

end;

n:=0;

repeat

yr:=round(f(x));

MoveTo(round((x+(nk/2))*getmaxx/nk),round(getmaxy-(yr+getmaxy/2)));

yr:=round(f(x0));

LineTo(round((x0+(nk/2))*getmaxx/nk),round(getmaxy-(yr+getmaxy/2)));

c:=x0-f(x0)*(x-x0)/(f(x)-f(x0));

otr:=abs(c-x0);

x0:=c;

inc(n);

until otr<=Eps;

readkey;

end;

4 : begin

if f1(a0)*f2(a0)>0 then

begin

xh:=a0; xk:=b0;

end

else

begin

xh:=b0; xk:=a0

end;

n:=0;

repeat

SetColor(blue);

yr:=round(f(xh));

MoveTo(round((xh+(nk/2))*getmaxx/nk),round(getmaxy-(yr+getmaxy/2)));

yr:=round(f(xk));

LineTo(round((xk+(nk/2))*getmaxx/nk),round(getmaxy-(yr+getmaxy/2)));

SetColor(magenta);

yr:=round(f(xk));

MoveTo(round((xk+(nk/2))*getmaxx/nk),round(getmaxy-(yr+getmaxy/2)));

xk:=xk-f(xk)/f1(xk);

LineTo(round((xk+(nk/2))*getmaxx/nk),round(getmaxy/2));

xh:=xh-f(xh)*(xk-xh)/(f(xk)-f(xh));

inc(n);

Until abs(xk-xh)<= Eps;

readkey;

end;

5: begin

repeat

cleardevice;

closegraph;

textcolor(yellow);

writeln('¢¢¥¤¨â¥ ­ ç «® ¯à®¬¥¦ã⪠');

readln(a0);

writeln('¢¢¥¤¨â¥ ª®­¥æ ¯à®¬¥¦ã⪠');

readln(b0);

writeln('¢¢¥¤¨â¥ â®ç­®áâì');

readln(eps);

Until ikey<>1;

end;

End;

{closegraph; }

until sm=6;

end

else

writeln('  ®â४¥ [',a0:5:2,';',b0:5:2,'] ª®à­¥© ­¥â!');

End.

Задача №2

Написать программу, работающую с записями


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

Программа учета автомобилей.

Блок-схема программы



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



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

Когда пользователь вводит не правильную информацию программа выводит соответствующее сообщение :



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

После чего пользователь возвращается в главное меню программы.

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

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



В случае правильного ввода информации :

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

Пользователю нужно ввести фамилию того призывника, который стоит на учете в местном военкомате:

Новая информация заменяет старую и обновляет записи:


При выборе пункта Показать список всех призывников на дисплее пользователя отображается список всех призывников записанных в базу данных.

Информацию о которых пользователь может получить использую пункт №1 главного меню.
Ну и Выход из программы осуществляет закрывает программу.

Программа реализуется с помощью нескольких стандартных(crt, graph), и 2 самостоятельно написанных модуля.

Реализацию каждого модуля вы можете посмотреть здесь:


  1. Модуль bd.tpu

  2. Модуль menu1.tpu

Процедуры и функции, используемые в программе:

  1. Процедура опций pmenu_4

  2. Функция добавления_1 Dobavlenie1

  3. Функция добавления_2 Dobavlenie2
  4. Функция добавления_3 Dobavlenie3


  5. Функция добавления_4 Dobavlenie4

  6. Функция удаления Udalenie


Листинг программы

Program Guatir;

Uses bd,crt,graph,menu1;

type b_d = record

marka:string[10];

god_v:string[10];

tsvet:string[10];

vladelets:string[10];

end;

var f,i,j,b,key,str,x,y,key1,sch:integer;

c:real;

ch,ch1:char;

size:word;

p:pointer;

st:string;

a: array [1..100] of b_d;
Procedure p_menu4;

begin

repeat

cleardevice;

ch1:=chr(2);

setcolor(13);

setTextStyle(10,0,2);

outTextXY(150,150,'Programma B&D prednaznachena dlya raboti ');

outTextXY(150,170,'nad basoi dannih ob avtomobilyah g.Bryanska ');

outTextXY(150,190,'Avtor programmi: Kolotovkin D.S.');

outTextXY(150,210,'Gog vipuska: 2005 god. ');

outTextXY(280,350,ch1);

outTextXY(310,350,ch1);

outTextXY(340,350,ch1);

ch1:=readkey;

f:=ord(ch1);

until (f=27);

end;
Begin

b:=0;

Initgraph(b,f,'c:\programm\pascal\tp70\bgi');

sch:=1;

f:=0;

y:=0;

repeat

Cleardevice;

SetTextStyle(7,0,1);

OutTextXY(180,30,'VAS PIVETSTVUET B&D ');

SetTextStyle(6,0,1);

OutTextXY(100,150,'Vvedite parol dlya vhoda: ');

rectangle(100,180,170,200);

gotoxy(100,100);

readln(st);

if ((st<>'Dima') and (y>0)) then OutTextXY(100,200,'nevernii parol ');

inc(y);

until (st='Dima');
str:=1;

repeat

begin

cleardevice;

menu(str);

textcolor(4);

setcolor(14);

SetTextStyle(7,0,1);

OutTextXY(0,450,'Viberete nuzhnii punct');


{size:=imagesize(10,60,120,140);

Getmem(p,size);

getimage(10,60,120,140,p^);

x:=0;

while x<900 do begin

putimage(500,400,p^,0);

delay(40);

putimage(500,400,p^,0);

inc(x);

end;}
ch:=readkey;

key:=ord(ch);

if ((key=80) and (str<=5)) then begin sound(10000);delay(200);nosound;menu(str);inc(str) end;

if str=6 then begin str:=1; menu(str) end;

if ((key=72) and (str>=1)) then begin sound(5000);delay(200);nosound;menu(str);dec(str) end;

if str=0 then begin str:=5; menu(str) end;

case str of

1: if (key=13) then

begin

cleardevice;

OutTextXY(180,10,'VAS PIVETSTVUET B&D ');

repeat

if (sch=1) then

begin

setcolor(4);

settextstyle(4,0,7);

outtextxy(150,200,'Basa pusta');

end

else begin

setcolor(6);

outtextxy(0,50,'MARKA');

outtextxy(150,50,'GOD VIPUSKA');

outtextxy(350,50,'TSVET');

outtextxy(500,50,'VLADELETS');

end;

for i:=1 to sch do

begin

setcolor(2);

outtextxy(0,70+i*20,a[i].marka);

outtextxy(150,70+i*20,a[i].god_v);

outtextxy(350,70+i*20,a[i].tsvet);

outtextxy(500,70+i*20,a[i].vladelets);

end;

ch:=readkey;

key:=ord(ch);

until key=27;

end;

2:begin

if (key=13) then

begin

settextstyle(2,0,7);

a[sch].marka:=Dobavlenie1(sch);

a[sch].god_v:=Dobavlenie2(sch);

a[sch].tsvet:=Dobavlenie3(sch);

a[sch].vladelets:=Dobavlenie4(sch);

sch:=sch+1;

end;

end;

3:begin

if (key=13) then

begin

if sch<>1 then

begin

cleardevice;


OutTextXY(180,30,'POISK I UDALENIE ');

setcolor(9);

settextstyle(8,0,3);

OutTextXY(50,50,'Vvedite kategoriu poiska: ');

OutTextXY(50,70,'marka,god_vipuska,tsvet ili vladelets');

readln(st);

if st='marka' then

begin

cleardevice;

OutTextXY(180,30,'POISK I UDALENIE ');

OutTextXY(180,50,'vvedite iskomoe slovo');

readln(st);

for i:=1 to sch do

if st=a[i].marka then

begin

b:=i;

f:=1;

cleardevice;

outtextxy(0,150,a[b].marka);

outtextxy(150,150,a[b].god_v);

outtextxy(300,150,a[b].tsvet);

outtextxy(450,150,a[b].vladelets);

OutTextXY(70,50,'budete li vi udalyat zapis: da ili net ?');

readln(st);

if st='da' then

begin

a[b].god_v:='';

a[b].vladelets:='';

a[b].marka:='';

a[b].tsvet:='';

end

end;

if f=0 then

begin

cleardevice;

outtextxy(150,150,'Takoi zapisi ne suschestvuet');

readln;

end;

end;
if st='god_vipuska' then

begin

cleardevice;

OutTextXY(180,30,'POISK I UDALENIE ');

OutTextXY(180,50,'vvedite iskomoe slovo');

readln(st);

for i:=1 to sch do

if st=a[i].god_v then

begin

b:=i;

f:=1;

cleardevice;

outtextxy(0,150,a[b].marka);

outtextxy(150,150,a[b].god_v);

outtextxy(300,150,a[b].tsvet);

outtextxy(450,150,a[b].vladelets);

OutTextXY(70,50,'budete li vi udalyat zapis: da ili net ?');

readln(st);

if st='da' then

begin

a[b].god_v:='';

a[b].vladelets:='';

a[b].marka:='';

a[b].tsvet:='';

end

end;


if f=0 then

begin

cleardevice;

outtextxy(150,150,'Takoi zapisi ne suschestvuet');

readln;

end;

end;
if st='tsvet' then

begin

cleardevice;

OutTextXY(180,30,'POISK I UDALENIE ');

OutTextXY(180,50,'vvedite iskomoe slovo');

readln(st);

for i:=1 to sch do

if st=a[i].tsvet then

begin

b:=i;

f:=1;

cleardevice;

outtextxy(0,150,a[b].marka);

outtextxy(150,150,a[b].god_v);

outtextxy(300,150,a[b].tsvet);

outtextxy(450,150,a[b].vladelets);

OutTextXY(70,50,'budete li vi udalyat zapis: da ili net ?');

readln(st);

if st='da' then

begin

a[b].god_v:='';

a[b].vladelets:='';

a[b].marka:='';

a[b].tsvet:='';

end

end;

if f=0 then

begin

cleardevice;

outtextxy(150,150,'Takoi zapisi ne suschestvuet');

readln;

end;

end;
if st='vladelets' then

begin

cleardevice;

OutTextXY(180,30,'POISK I UDALENIE ');

OutTextXY(180,50,'vvedite iskomoe slovo');

readln(st);

for i:=1 to sch do

if st=a[i].vladelets then

begin

b:=i;

f:=1;

cleardevice;

outtextxy(0,150,a[b].marka);

outtextxy(150,150,a[b].god_v);

outtextxy(300,150,a[b].tsvet);

outtextxy(450,150,a[b].vladelets);

OutTextXY(70,50,'budete li vi udalyat zapis: da ili net ?');

readln(st);

if st='da' then

begin

a[b].god_v:='';

a[b].vladelets:='';

a[b].marka:='';

a[b].tsvet:='';

end

end;

if f=0 then

begin

cleardevice;

outtextxy(150,150,'Takoi zapisi ne suschestvuet');


readln;

end;

end;
end;

if sch=1 then

begin

cleardevice;

setcolor(4);

settextstyle(4,0,7);

outtextxy(150,200,'Basa pusta');

readkey;

end;
end;

end;

4:begin if (key=13) then p_menu4; end;

5:if (key=13) then key:=3; {enter - 13 , esc - 27}
End;

end;

until (key=3);

closegraph;

end.

Модуль bd:

Unit BD;

interface

uses graph,crt,menu1;

Function Dobavlenie1(sch: integer):string;

Function Dobavlenie2(sch: integer):string;

Function Dobavlenie3(sch: integer):string;

Function Dobavlenie4(sch: integer):string;

Function Udalenie(str : string ):string;

Implementation

type b_d = record

marka:string[30];

god_v:string[30];

tsvet:string[30];

vladelets:string[30];

end;

var b,key,sch,i:integer;

ch : char;

a: array [1..100] of b_d;
Function Dobavlenie1;

begin

cleardevice;

Outtextxy(45,45,'vvedite marku avtomobilya');

readln(a[sch].marka);

Dobavlenie1:= a[sch].marka;

end;

Function Dobavlenie2;

begin

cleardevice;

Outtextxy(45,45,'vvedite god vipuska avtomobilya');

readln(a[sch].god_v);

Dobavlenie2:= a[sch].god_v;

end;

Function Dobavlenie3;

begin

cleardevice;

Outtextxy(45,45,'vvedite tsvet avtomobilya');

readln(a[sch].tsvet);

Dobavlenie3:= a[sch].tsvet;

end;

Function Dobavlenie4;

begin

cleardevice;

Outtextxy(45,45,'vvedite vladeltsa');

readln(a[sch].vladelets);

Dobavlenie4:= a[sch].vladelets;

end;

Function Udalenie;

begin

end;

BEGIN

b:=0;

Initgraph(b,i,'c:\programm\pascal\tp70\bgi');

END.

Модуль menu1:

Unit menu1;

interface

uses graph,crt;

function menu(str:integer):integer;

Implementation

var a,b,key:integer;

ch : char;

Function menu(str:integer):integer;

const n=6;

var s: array[1..n] of string;

begin

s[1]:='* Basa Dannih';

s[2]:='* Dobavlenie zapisi';

s[3]:='* Poisk i udalenie';

s[4]:='* O programme';

s[5]:='* Vihod';

setcolor(6);

Rectangle(245,125+str*20,380,143+str*20);

setcolor(12);

SetTextStyle(7,0,3);

OutTextXY(0,10,'SVEDENIYA O AVTOMOBILYAH GORODA BRYANSKA');

OutTextXY(270,40,'B&D');

setcolor(11);

SetTextStyle(10,0,2);

OutTextXY(230,150,s[1]);

OutTextXY(230,170,s[2]);

OutTextXY(230,190,s[3]);

OutTextXY(230,210,s[4]);

OutTextXY(230,230,s[5]);

end;

BEGIN

b:=0;

Initgraph(b,a,'c:\programm\pascal\tp70\bgi');

END.