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

Тема в разделе "Pascal and Delphi", создана пользователем Wefast, 25 дек 2009.

  1. Wefast

    Wefast Гость

    В общем это РГР. переводит из любой СС в любую. Присутствует еще графическая заставка. Так вот когда запускаешь заставку а потом возвращаешься в меню то там все съезжает куда то, букв каких то нет, просто абра кадабра какая то. Бывает так что и в паскаля самом непосредственно все заглючивает. А вот если перейти опять в оконый режим то все норм. Вот хоть убейте не пойму почему так. Если ставить текст мод, то буквы только слегка съезжают, но препода это не устраивает, всякие точки то там то тут появляются, некоторые цифры съезжат. В общем помогите плиз , скажите что исправить. И напишите какие и где пути надо указать? Ну как я понимаю в процедуре графа надо указать путь до папки с графом(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">
    Код (Text):
    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.
     
  2. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    Вот уж не знаю, чего она все ездит.. Мб глюки не проги а самого паскаля?
     
  3. Wefast

    Wefast Гость

    Нет. что то не так в проге
     
Загрузка...
Похожие Темы - [pascal] Имеется программа
  1. Малышk0
    Ответов:
    3
    Просмотров:
    1.363

Поделиться этой страницей