[pascal] Имеется программа, работает не коректно

  • Автор темы Wefast
  • Дата начала
W

Wefast

#1
В общем это РГР. переводит из любой СС в любую. Присутствует еще графическая заставка. Так вот когда запускаешь заставку а потом возвращаешься в меню то там все съезжает куда то, букв каких то нет, просто абра кадабра какая то. Бывает так что и в паскаля самом непосредственно все заглючивает. А вот если перейти опять в оконый режим то все норм. Вот хоть убейте не пойму почему так. Если ставить текст мод, то буквы только слегка съезжают, но препода это не устраивает, всякие точки то там то тут появляются, некоторые цифры съезжат. В общем помогите плиз , скажите что исправить. И напишите какие и где пути надо указать? Ну как я понимаю в процедуре графа надо указать путь до папки с графом(BGI)/ и в directories в поле unit до папки UNITS. И все вроде бы

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Текст проги</div></div><div class="sp-body"><div class="sp-content">
Код:
program rgr;
uses crt,graph;
var
operat,option:char;
rez,ch1,ch2:real;
l:integer;
label lb1;

{-----------Заставка---------}
procedure zastavka;
var
x,y:integer;

grDriver: integer;
grMode:integer;
ErrCode:integer;
res:integer;
begin
grDriver:=detect;
InitGraph (grDriver, grMode, 'h:\tp\bgi');
ErrCode:=GraphResult;
if ErrCode = grOk then
begin
x:=150;
y:=150;

SetFillStyle (SolidFill,White);
Bar (x,y,x+30,y+150);
SetFillStyle (SolidFill,White);
Bar(x+30,y,x+80,y+30);
SetFillStyle (SolidFill,White);
Bar(x+80,y+30,x+65,y+65);
SetFillStyle (SolidFill,White);
Bar(x+80,y+100,x+30,y+65);

SetFillStyle (SolidFill,Blue);
Bar (x+110,y,x+140,y+150);
SetFillStyle (SolidFill,Blue);
Bar(x+110,y,x+190,y+30);

SetFillStyle (SolidFill,Red);
Bar (x+220,y,x+250,y+150);
SetFillStyle (SolidFill,Red);
Bar(x+250,y,x+300,y+30);
SetFillStyle (SolidFill,REd);
Bar(x+300,y+30,x+285,y+75);
SetFillStyle (SolidFill,Red);
Bar(x+300,y+100,x+250,y+75);
end;
readln;
CloseGraph;
end;
{-----------Помощь------------------------}

procedure help2;
begin
clrscr;
textcolor (white);
writeln('Пример:');
writeln('Преобразовать целое число (125)"10" в "2"');
writeln('125:2=62	 1');
writeln('62 :2=31	 0');
writeln('31 :2=15	 1');
writeln('15 :2=7	 1');
writeln('7 :2=3	 1');
writeln('3 :2=1	 1');
writeln('1 :2=0	 1');
writeln('(125)"10"=(1111101)"2"');
writeln('Для перевода правильной дроби "10" в систему с основанием b(2) необходимо последовательно умножать исх');
writeln('одную дробь и дробные части получающихся произведений на b(2). Искомые цифры искомого представления 10');
writeln('-чного числа есть последовательность целых частей произведений, причем первая из них даёт старшую цифр');
writeln('у a(1)');
writeln('Пример:');
writeln('Преобразовать правильную дробь (0.567)"10" в 8-ную систему счисления');
writeln('0.567  0.536  0.288  0.304  0.432  0.456');
writeln('*  8  *  8  *  8  *  8  *  8  *  8');
writeln('4.536  4.288  2.304  0.432  3.456  3.648');
writeln('(0.567)"10"=(0.442033)"8"');
readln;
end;

{----------Помошь-------------------------------------}

procedure help1;
begin
clrscr;
textcolor (white);
writeln('Преобразование чисел из одной системы счисления в другую.');
writeln('Пусть N - число в системе с основанием b(1), которое требуется представить в системе с основанием b(2)');
writeln('Так как легко оперировать только с десятичными числами,то преобразование осущес');
writeln('твляется через промежуточную систему счисления:десятичную. Условно это выглядит так: b(1)=>10=>b(2)');
writeln('1)Перевод из b(1) а 10-чную систему');
writeln('Метод преобразования состоит в представлении числа N в виде многочлена по степен');
writeln('ям b(1) и вычислении этого многочлена с помощью десятичной арифметики');
writeln('Пример:');
writeln('Преобразуем число (571.31) из "8" в число в системе с основанием 10');
writeln('(571.31)"8"=5*8^2+7*8^1+1*8^0+3*8^-1+1*8^-2=(377.390625)"10"');
writeln('2)Перевод из 10 в b(2)');
writeln('Для перевода целого числа N по основанию 10 в систему с основанием b(2) необход');
writeln('имо последовательно делить исходное число N и образующиеся частные на b(2) до ');
writeln('получения частного,равного 0. Искомое представление числа N по основанию b(2) есть последовательность ');
writeln('остатков от операций деления,причём первый остаток даёт младшую цифру');
readln;
help2;
end;
{---------------Титульный лист-----------------}
procedure titul;
begin
clrscr;
textcolor(white);
gotoxy (14,2);writeln('Саратовский государственный технический университет.');
gotoxy (18,3);writeln('Министерство образования Российской Федерации');
gotoxy (12,5);writeln('Кафедра программного обеспечения вычислительной техники');
gotoxy (25,6);writeln('и информационных систем.');

gotoxy (20,9);writeln('Расчетно-графическая работа по дисциплине');
gotoxy (30,10);writeln('"Информатика"');
gotoxy (35,12);writeln('Тема:');
gotoxy (10,13);writeln('"Перевод чисел из любой системы счисления(СС) в любую СС."');
gotoxy (50,16);writeln('Выполнил:');
gotoxy (50,17);writeln('Студент ФЭТиП, СГТУ, ПВС-11');
gotoxy (50,18);writeln('Командровский В.С.');
gotoxy (50,20);writeln('Проверила: профессор кафедры');
gotoxy (50,21);writeln('Матвеева И.А.');
gotoxy (35,25);writeln('Саратов 2009.');
readkey
end;
{-------Перевод из любой степени в 10-ю--------------------------}
function step1 (b1:integer; num1:string):string;
var k,i,n:longint;
err:integer;
num2,weight:real;

begin
k:=-1;
num2:=0;
if (num1[1]='-') then	{Если есть - то удаляем его и запоминаем}
begin
Delete(num1,1,1);
l:=1;
for i:=1 to length(num1) do
if (num1[i]='.') then break else k:=k+1;
weight:=1;
for i:=1 to k do
weight:=weight*b1;
for i:=1 to length(num1) do begin
val(num1[i],n,err); {Преобразование строки в число}
if (n>=b1) then
begin
writeln('Ошибка ввода:число должно быть с основанием выбраной вами СС');
break
end
else begin if (num1[i]<>'.') then
begin
if (num1[i]>='0') and (num1[i]<='9') then
val(num1[i],n,err) else n:=ord(num1[i])-55; {порядковое значение выражения.}
num2:=num2+n*weight;
weight:=weight/b1;
end;end;end;
str(num2:20:10, num1); {Число в строку}
step1:=num1;
end
else
begin	 {Если "-" не было тогда}
for i:=1 to length(num1) do
if (num1[i]='.') then break else k:=k+1;
weight:=1;
for i:=1 to k do
weight:=weight*b1;
for i:=1 to length(num1) do begin
val(num1[i],n,err);
if (n>=b1) then
begin
writeln('Ошибка:число должно быть с основанием выбраной вами СС ',b1);
break
end
else begin if (num1[i]<>'.') then
begin
if (num1[i]>='0') and (num1[i]<='9') then
val(num1[i],n,err) else n:=ord(num1[i])-55;
num2:=num2+n*weight;
weight:=weight/b1;
end;end;end;
str(num2:20:10, num1);
step1:=num1;
end;
end;
{-------------------Перевод из 10-й в любую--------------}
procedure step2 (b2:integer; number1:string);
var num,fraction,next:real;
int_part, ost,i,n:longint;
err:integer;
str1:char;
begin
val(number1, num, err);
int_part:=trunc(num); {вещественное в целое}
fraction:=num-int_part;
number1:='';
while (int_part<>0) do
begin
ost:=int_part mod b2;
if (ost>=10) then str1:=chr(ost+55)
else str1:=chr(ost+48);
int_part:=int_part div b2;
number1:=str1+number1;
end;
if (fraction<>0) then number1:=number1+'.';
for i:=1 to 10 do
begin
next:=fraction*b2;
if (next<>0) then
begin
n:=trunc(next);
if (n>=10) then str1:=chr(n+55)
else str1:=chr(n+48);
fraction:=next - trunc(next);
number1:=number1+str1;
end
else break
end;
if l=1 then
begin
Insert('-',number1,1);
writeln(number1);
end
else
writeln(number1);
end;
procedure main;
var b1,b2:integer;
number1:string[50];
begin
clrscr;
writeln('Введите СС из которой вы будете переводить число');
readln(b1);
writeln('_____________________________________________________');
writeln('Введите число с учетом выбраной вами СС');
readln(number1);
writeln('_____________________________________________________');
writeln('Введите СС в которую вы хотите перевести число');
readln(b2);
writeln('_____________________________________________________');
if (b1=b2)
then writeln('Ответ:', number1)
else
if (b1>0) and (b2>0) then
begin
number1:=step1(b1,number1);
step2(b2,number1);
end
else writeln('Ошибка, основание системы счисления должно быть больше 0');
readln;
end;



{-----------------------------------------}
begin
lb1:
clrscr;
begin
textcolor (white);
gotoxy(9,1); writeln('Перевод чисел из любой СС в любую СС.');
gotoxy(9,5); writeln('1. Заставка.');
gotoxy(9,6); writeln('2. Титульный лист.');
gotoxy(9,7); writeln('3. Запустить Программу.');
gotoxy(9,8); writeln('4. Справка.');
gotoxy(9,9); writeln('0. Выход.');
gotoxy(9,11); writeln('Выберите действие: ');
gotoxy(58,11); readln(option);
end;
case option of
'1': begin zastavka;goto lb1;end;
'2': begin titul; goto lb1; end;
'3': begin main; goto lb1; end;
'4': begin help1; goto lb1; end;
'0': exit;
end;
readkey
end.
 

vital

Больной Компом Детектед
29.01.2006
2 432
33
#2
Вот уж не знаю, чего она все ездит.. Мб глюки не проги а самого паскаля?