Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> глюк в Турбо Паскаль 
:(
    Опции темы
AlexP11223
Дата 21.5.2012, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 11.10.2011

Репутация: нет
Всего: нет



Некроманты есть тут? Никто не сталкивался с такой проблемой: http://dl.dropbox.com/u/17976179/K%28X%29.rar —программа на турбо паскале с ч0тким меню на консольной графике (clrscr, readkey и прочие радости), вторая процедура (в меню) почему-то кроме нужной строки выводит еще кучу всякого мусора. С меню без графики все ок.
исходник: 
Код

program razd1;
 
uses
    crt, strpr;
 
const
    Norm = $17; { Цвет невыделенного пункта}
    sel = $70;  {Цвет выделенного пункта }
    N = 3;
 
var
    menu: array[1..n] of string[12];
    punkt: Integer; { Номер выделенного пункта}
    ch: char;  { Введенный символ}
    x, y: integer; {Координаты первой строки меню}
{==================================================================}
procedure Punkt1;
begin
    Clrscr;
    writeln('Процедура чтения строки из файла');
    ReadString;
    writeln('Нажмите <Enter> для продолжения.');
    readln;
end;
{===================================================================}
procedure Punkt2;
begin
    ClrScr;
    writeln('Процедура преобразования строки');
    ProcessString;
    Writeln('Нажмите <Enter> для продолжения.');
    readln;
end;
{===================================================================}
procedure MenuToScr;{Вывод меню на экран}
var
    i: integer;
begin
    ClrScr;
    for i := 1 to 3 do
    begin
        gotoxy(x, y + i - 1);
        write(Menu[i]);
    end;
    TextAttr := sel;
    gotoxy(x, y + punkt - 1);
    write(Menu[punkt]); {Выделим строку меню }
    TextAttr := norm;
end;
{=================================================================}
begin{ Основная программа}
    menu[1] := 'Прочитать строку из файла';
    menu[2] := 'Преобразовать строку';
    menu[3] := 'Выход      ';
    punkt := 1;
    x := 35;
    y := 10;
    TextAttr := Norm;
    MenuToScr;
    repeat
        ch := ReadKey;
        if ch = chr(0) then
        begin
            ch := ReadKey;
            case ch of
                chr(80): {Стрелка вниз }
                    if punkt < n then
                    begin
                        gotoxy(x, y + punkt - 1);
                        write(menu[punkt]);
                        punkt := punkt + 1;
                        TextAttr := sel;
                        gotoxy(x, y + punkt - 1);
                        write(menu[punkt]);
                        TextAttr := norm;
                    end;
                chr(72): {Стрелка вверх }
                    if punkt > 1 then
                    begin
                        gotoxy(x, y + punkt - 1);
                        write(menu[punkt]);
                        punkt := punkt - 1;
                        TextAttr := Sel;
                        gotoxy(x, y + punkt - 1);
                        write(menu[punkt]);
                        TextAttr := Norm;
                    end;
            end;
        end
           else
        if ch = chr(13) then { Нажата клавиша <Enter>}
        begin
            case punkt of
                1: punkt1;
                2: punkt2;
                3: ch := chr(27);{Выход}
            end;
            MenuToScr;
        end;
    until ch = chr(27); {Нажата клавиша ESC}
end.
 
 
// *************************
// модуль с обработкой (и выводом) строки
// *************************
unit StrPr;
 
interface
 
uses
    crt;
 
procedure ReadString;
procedure ProcessString;
procedure WriteString;
 
 
implementation
 
var
    s: string;
 
{ Процедура, читающая строку текстового файла }
procedure ReadString;
var
    f: text;
begin
    Assign(f, 'string.txt');
    Reset(f);
    Readln(f, s);
    Close(f);
    writeln('Прочитанная строка:');
    WriteString;
end;
 
 
 
 
 
{ преобразовывает строку str (каждая  подстрока, состоящая  из  нескольких
 вхождений одного и того же символа,  меняется  на текст K(X),
 где Х - символ, а K - строка, являющаяся  записью числа вхождений символа
 Х в исходную последовательность) и выводит результат на экран }
procedure ProcessString;
var
    c: char;
    b: boolean;
    pred, i: byte;
    s2: string;
    
    procedure Replace(n, count: byte);
    var
        ch: char;
        sp: string;
    begin
        ch := s[n];
        str(count, sp);
        s2 := s2 + sp + '(' + ch + ')';
    end;
 
begin
    pred := 1;
    c := s[1];
    b := false;
    for i := 2 to length(s) do
        if s[i] = c then
            b := true
        else
        begin
            if b then
                replace(pred, i - pred)
            else
                s2 := s2 + c;
            pred := i;
            c := s[i];
            b := false;
        end;
    if b then
        replace(pred, length(s) + 1 - pred)
    else
        s2 := s2 + c;
    s := s2;
    WriteString;
end;
 
 
{ Процедура, выводящая строку str на экран }
procedure WriteString;
begin
    writeln(s);
end;
 
end.


Это сообщение отредактировал(а) Omfgnoob123 - 22.5.2012, 09:51
PM WWW Skype   Вверх
ФедосеевПавел
Дата 22.5.2012, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 2
Всего: 10



Если это не коммерческая тайна, выложи и исходник модуля "SrtPr". Потому как чужой exe запускать не хоцца, да и вопрос у тебя по исходникам.
PM   Вверх
AlexP11223
Дата 22.5.2012, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 11.10.2011

Репутация: нет
Всего: нет



Он выложен.
Вот отдельно:
Код

unit StrPr;
 
interface
 
uses
    crt;
 
procedure ReadString;
procedure ProcessString;
procedure WriteString;
 
 
implementation
 
var
    s: string;
 
{ Процедура, читающая строку текстового файла }
procedure ReadString;
var
    f: text;
begin
    Assign(f, 'string.txt');
    Reset(f);
    Readln(f, s);
    Close(f);
    writeln('Прочитанная строка:');
    WriteString;
end;
 
 
 
 
 
{ преобразовывает строку str (каждая  подстрока, состоящая  из  нескольких
 вхождений одного и того же символа,  меняется  на текст K(X),
 где Х - символ, а K - строка, являющаяся  записью числа вхождений символа
 Х в исходную последовательность) и выводит результат на экран }
procedure ProcessString;
var
    c: char;
    b: boolean;
    pred, i: byte;
    s2: string;
    
    procedure Replace(n, count: byte);
    var
        ch: char;
        sp: string;
    begin
        ch := s[n];
        str(count, sp);
        s2 := s2 + sp + '(' + ch + ')';
    end;
 
begin
    pred := 1;
    c := s[1];
    b := false;
    for i := 2 to length(s) do
        if s[i] = c then
            b := true
        else
        begin
            if b then
                replace(pred, i - pred)
            else
                s2 := s2 + c;
            pred := i;
            c := s[i];
            b := false;
        end;
    if b then
        replace(pred, length(s) + 1 - pred)
    else
        s2 := s2 + c;
    s := s2;
    WriteString;
end;
 
 
{ Процедура, выводящая строку str на экран }
procedure WriteString;
begin
    writeln(s);
end;
 
end.


Это сообщение отредактировал(а) Omfgnoob123 - 22.5.2012, 18:51
PM WWW Skype   Вверх
ФедосеевПавел
Дата 22.5.2012, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 2
Всего: 10



Sorry, невнимательно осмотрел код.
В процедуре ProcessString не инициализируется s2, а ведь в ней изначально "мусор".
PM   Вверх
AlexP11223
Дата 22.5.2012, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 11.10.2011

Репутация: нет
Всего: нет



Ох, точно.  Спасибо)
PM WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0443 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.