Курсовая работа: Работа с текстовыми строками, двумерными массивами, файловыми структурами данных
for
g:=1 to k do
begin
write(third,slova[g]);
if
g<k then write(third,' ');
end;
Здесь
осуществляется переход на следующую строчку.
writeln(third,'');
end;
Выбираем в каком из
файлов больше строк и переписываем оставшиеся без изменений.
if
m1<>m2 then
begin
if
m1>m2 then for L:=m to m1 do
begin
readln(first,S1);
writeln(third,S1);
end
else
for
L:=m to m2 do
begin
readln(second,S2);
Writeln(third,S2);
end;
end;
closing;
writeln('Operacia
zavershena');
end
else
Если первые два
файла не прошли проверку, то программа скажет, какой именно из файлов пустой.
begin
if
flag1=true then writeln('Pervii fail pustoi');
if
flag2=true then writeln('Vtoroi fail pustoi');
end;
end
else
begin
Если файл не прошел
первую проверку, то программа скажет, имя какого из файлов введено неверно или
совсем не было введено.
if
pf=false then writeln('Ne vvedeno imja pervogo faila');
if
vf=false then writeln('Ne vvedeno imja vtorogo faila');
if
tf=false then writeln('Ne vvedeno imja tretego faila');
end;
end;
else
writeln('Neizvestnaya
komanda');
end;
end;
end.
Процедура
правильности проверки ввода имени файлов.
function
check1(x:string):boolean;
begin
В данном случае
проверяется пустой ввод, и имя файла, начинающееся с пробела.
if
length(x)>0 then begin
if
x[1]<>' ' then
check1:=true;
end;
end;
Процедура привязки
и открытия файлов.
procedure
filepr;
begin
assign(first,p);
assign(second,v);
assign(third,t);
reset(first);
reset(second);
rewrite(third);
end;
Процедура проверки количества
строк в файлах.
procedure chmax;
begin
Сбрасываем счетчик
строк.
m1:=0;
m2:=0;
И пока не конец
файла перебираем строки и прибавляем по единице к счетчику.
while
not eof(first) do
begin
readln(first,S1);
m1:=m1+1;
end;
Пока не конец файла
перебираем строки и прибавляем по единице к счетчику.
while
not eof(second) do
Begin
readln(second,S2);
m2:=m2+1;
end;
И присваиваем
минимальное значение для переменной m.
if
m1<m2 then m:=m1 else m:=m2;
Заново закрываем и
открываем файлы.
close(first);
reset(first);
close(second);
reset(second);
end;
Процедура разбития
строки на слова и перемещение их в массив.
Procedure
slv;
var
i,j:integer;
begin
Считываем первую
строчку из обоих файлов и добавляем пробел вначале и в конце строки.
Readln(first,S1);
readln(second,S2);
S1:='
'+S1+' ';
S2:='
'+S2+' ';
Сбрасываем счетчик количества
слов.
k1:=0;
k2:=0;
Начинаем перебор
элементов до тех пор, пока не найдем пробел. Далее смотрим, если след элемент
после пробела, тоже пробел, то пропускаем первый. Если же мы получаем слово, то
копируем его в одну из ячеек массива.
for
i:=1 to length(S1) do
begin
if
s1[i]=' ' then
begin
for
j:=i+1 to length(s1) do
if
s1[i+1]<>' ' then
if
s1[j]=' ' then begin
k1:=k1+1;
slova1[k1]:=copy(s1,i+1,j-i-1);
break;
end;
end;
end;
for
i:=1 to length(S2) do
begin
if
s2[i]=' ' then
begin
for
j:=i+1 to length(s2) do
if
s2[i+1]<>' ' then
if
s2[j]=' ' then begin
k2:=k2+1;
slova2[k2]:=copy(s2,i+1,j-i-1);
break;
end;
end;
end;
end;
Процедура отсортировки
слов.
procedure
obrslov(a,b:arr;na,nb:integer; var c:arr; var nc:integer);
var
i,j,k:integer;
begin
nc:=0;
Делаем несколько
циклов, среди которых перебираем элементы первого массива и сравниваем их со
вторым. Затем элементы вторго с элементами первого и оставшиеся заносятся в
новый массив.
for
i:=1 to na do
begin
k:=0;
for
j:=1 to nb do
if
a[i]=b[j] then k:=1;
if
k=0 then
begin
nc:=nc+1;
c[nc]:=a[i];
end;
end;
for
i:=1 to nb do
begin
k:=0;
for
j:=1 to na do
if
b[i]=a[j] then k:=1;
if
k=0 then
begin
nc:=nc+1;
c[nc]:=b[i];
end;
end;
end;
Функция проверки
файлов на информацию.
function check2:boolean;
begin
В данному случае мы
смотри, не находится ли конец файла на первом месте, и если хоть один файл
пустой, то функции присваивается значение False.
if
eof(first)=true then flag1:=true else flag1:=false;
if
eof(second)=true then flag2:=true else flag2:=false;
if
(flag1=false)and(flag2=false) then check2:=false else check2:=true;
end;
Процедура закрытия
всех файлов.
procedure
closing;
begin
close(first);
close(second);
close(third);
end;
4
Задание №4.
На экране построить
семейство кривых (Гипоциклоида), заданных функцией:
X=A∙cos(t)+D∙cos(A∙t); [0<=t<=2∙pi]
X=A∙sin(t)+D∙sin(A∙t);
Группа параметров
A,D для построения семейства дана в текстовом файле.
Begin
Присваиваем
начальное значение t, и флаг работы программы.
t:=0;
menu;
cont:=true;
while
cont do
begin
Вводим команду в
появившееся меню, показанное на рисунке 3.

Рисунок 3 – меню
программы 4.
Writeln('Vvedite komady:
');
Readln(command);
case
command of
'0':cont:=false;
'1':
begin
writeln;
Вводится имя файла. Имя проходит проверку, если проверка успешна, то из него
читаются два значения (А и D) и файл сразу же
закрывается.
writeln('Vvedite
imja faila: ');
Readln(name);
if
check1 = true then begin
namef:=true;
read(fileg,a);
read(fileg,d);
close(fileg);
end
else namef:=false;
end;
'2':
Begin
Если из файла
успешно считали информацию, программа переходит к построению графика, а именно:
-Очистака окна.
-Изменению
разрешения.
-Построению
графика.
-Завершению
выполнения программы.
if namef=false then
writeln('Ne
Vvedeno imja faila')
else
begin
clearwindow;
SetWindowSize(800,600);
mnoj;
graf;
cont:=false;
end;
end;
end;
end;
Следующая функция
не дает изменять график до функции ReDraw.
lockdrawing;
OnResize
же позволяет делать определенные процедуры при изменение размера окна.
OnResize:=resize;
end.
Функция У
function
Yfunc(i: real): real;
begin
result:=A*sin(i)-D*sin(A*t);
end;
Функция Х
function
Xfunc(i:real):real;
begin
Xfunc:=A*cos(i)+D*cos(A*i);
end;
Процедура
нахождения максимального значения функции, а заодно и множителя.
procedure mnoj;
begin
t:=0;
Задаем цикл и ищем
максимальное значение.
while
t <= 2*pi do
begin
xx:=trunc(Xfunc(t));
ifabs(xx)>
maxx then maxx:=abs(xx);
yy:=trunc(Yfunc(t));
if
abs(yy)> maxy then maxy:=abs(yy);
Здесь изменяем
точность поиска.
t:=t+0.001;
end;
После чего ищем
коэффициент координат. Он зависит от нескольких переменных: ширина, высота, и
максимальной координаты.
if
WindowWidth<WindowHeight then
if
maxy>maxx then k:=(WindowHeight/2)/maxy else k:=(windowWidth/2)/maxx else
If
maxx>maxy then k:=(windowheight/2)/maxx else k:=(windowWidth/2)/maxy;
end;
Функция проверки
файла на правильность ввода имени и на нахождения в нем данных.
function
check1:boolean;
begin
Проверка длинны имени
файла.
if
length(name)>0 then
begin
assign(fileg,
name);
reset(fileg);
if
eof(fileg)=false then check1:= true else check1:=false;
end;
end;
Процедура
построения графика.
procedure graf;
begin
Уменьшаем наш
коэффициент, чтобы уместились обозначения системы координат.
k:=k-k*0.1;
Далее чертим ровно
по центру оси Х и У. Стрелочки, показывающее направление. Все данные берутся в
зависимости от размера экрана, для удобства просмотра как при маленьком, так и
при большом разрешение.
moveto(1,
windowHeight div 2);
lineto(WindowWidth,
WindowHeight div 2);
moveto(WindowWidth
div 2, 1);
lineto(WindowWidth
div 2, WindowHeight);
moveto(trunc((WindowWidth
div 2)*0.98),trunc(0.04*WindowHeight));
Lineto((Windowwidth
div 2),1);
lineto(trunc((windowWidth
div 2)*1.02),trunc(0.04*windowHeight));
moveto(trunc(windowwidth*0.96),trunc(0.98*(windowheight
div 2)));
lineto(windowwidth,windowheight
div 2);
lineto(trunc(windowwidth*0.96),trunc(1.02*(windowheight
div 2)));
T:=0;
Вычисляем стартовые
координаты и перемещаем туда курсор, для дальнейшего построения.
xx:=(WindowWidth
div 2)+trunc(k*Xfunc(t));
yy:=(WindowHeight
div 2)+trunc(k*Yfunc(t));
moveto(xx,yy);
Задаем цикл, в
котором программа сама будет высчитывать значения, и рисовать график.
while
t<=2*pi do
Страницы: 1, 2, 3, 4, 5, 6, 7 |