Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2010, 16:34   #1
fredwriter
Форумчанин
 
Регистрация: 06.10.2009
Сообщений: 121
По умолчанию компилятор проскакивает строчку

Компилятор при пошаговом исполнении компилятор проскакивает строчку в коде
Вот код: проскакиваемую строчку выделил жирным
Код:
program Polska_Zapic1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
type
  Polka = ^TPolka;
  TPolka = record
    Zapic_elem: Char;
    Next_elem: Polka;
  end;
var
  i, a: integer;
  Head_elem, Dest_elem: Polka;
  Sign_elem: Polka;
  Arithm_exp: string;
  Lex, Sign: char;
  Pr, Pr1: Byte;
  Head: Polka;


Procedure Prioritet(Lex_p: char; var Pr_p:Byte);
begin
  If (Lex_p = '+') or (Lex_p = '-') then
    Pr_p := 1;
  if (Lex_p = '*') or (Lex_p = '/') then
    Pr_p := 2;
end;

begin
  Writeln('               WRITE ARITHMETIC EXPRESSION ');
  Writeln('------------------------------------------------------');
  Readln(Arithm_exp);
  head := nil;
  Head_elem := nil;
  Sign_elem := nil;
  Sign_elem^.Zapic_elem := '#';
  a :=  length(Arithm_exp);
  for i := 1 to a do
  begin
    Lex := Arithm_exp[i];
    if (lex = '+') or (lex = '-') or (lex = '*') or (lex = '/') then
    begin
      Prioritet(Lex, Pr);
      Prioritet(Sign_elem^.Zapic_elem, Pr1);
      while (Sign_elem <> nil) and (Pr >= Pr1) do
      begin
        Sign := Sign_elem^.Zapic_elem;
        new(Dest_elem);
        Dest_elem^.Zapic_elem := Sign_elem^.Zapic_elem;
        Dest_elem^.Next_elem := Head_elem;
        Head_elem := Dest_elem;
        Sign_elem := Sign_elem^.Next_elem;
      end;
      New(Sign_elem);
      Sign_elem^.Zapic_elem := Lex;
      Sign_elem^.Next_elem := head;
      Head := Sign_elem;
    end
    else
    begin
      case lex of
      '0'..'9':
      begin
        New(Dest_elem);
        Dest_elem^.Zapic_elem := Lex;
        Dest_elem^.Next_elem := Head_elem;
        Head_elem := Dest_elem;
      end;
    end;
  end;
  while Sign_elem <> nil do
  begin
    Sign := Sign_elem^.Zapic_elem;
    new(Dest_elem);
    Dest_elem^.Zapic_elem := Sign_elem^.Zapic_elem;
    Dest_elem^.Next_elem := Head_elem;
    Head_elem := Dest_elem;
    Sign_elem := Sign_elem^.Next_elem;
  end;
end;
end.
Не понятки. Подскажите, что за чудо.
Ищущий да обрящет
fredwriter вне форума Ответить с цитированием
Старый 05.10.2010, 16:41   #2
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Оптимизация.
Переменная 'a' дальше не используется, так зачем компилятору тратить драгоценное процессорное время на бесполезные вещи?
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 05.10.2010, 16:44   #3
fredwriter
Форумчанин
 
Регистрация: 06.10.2009
Сообщений: 121
По умолчанию

У меня цикл с параметром до а, вообще сначала цикл у меня выглядел так:
for i := 1 to length(Arithm_exp) do, но тогда этот цикл не делал ни одного шага, хотя строку я вводил на 9 символов. Непонятки
Ищущий да обрящет
fredwriter вне форума Ответить с цитированием
Старый 05.10.2010, 16:46   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Окружи код директивами {$o-}...{$o+} чтоб отключить оптимизацию. Иногда помогает
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.10.2010, 16:48   #5
fredwriter
Форумчанин
 
Регистрация: 06.10.2009
Сообщений: 121
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Окружи код директивами {$o-}...{$o+} чтоб отключить оптимизацию. Иногда помогает
Не помогло
Ищущий да обрящет
fredwriter вне форума Ответить с цитированием
Старый 05.10.2010, 17:07   #6
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

У тебя какая-то проблема вот с этим куском кода

Код:
{
  head := nil;
  Head_elem := nil;
  Sign_elem := nil;
  Sign_elem^.Zapic_elem := '#';}
Если его забить комментом, то вычисляется и пер. а и цикл начинает работать... Хотя а тут совсем не нужна...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 05.10.2010, 17:12   #7
fredwriter
Форумчанин
 
Регистрация: 06.10.2009
Сообщений: 121
По умолчанию

Цитата:
Сообщение от Grag Посмотреть сообщение
У тебя какая-то проблема вот с этим куском кода

Код:
{
  head := nil;
  Head_elem := nil;
  Sign_elem := nil;
  Sign_elem^.Zapic_elem := '#';}
Если его забить комментом, то вычисляется и пер. а и цикл начинает работать... Хотя а тут совсем не нужна...
Я это тоже подозревал, но не понятно, какая же проблема, возможно, что я не выделив память под Sign_elem пытаюсь присвоить его полю значение?
Ищущий да обрящет
fredwriter вне форума Ответить с цитированием
Старый 05.10.2010, 17:13   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1)
самый простой способ бороться с оптимизацией - это выводить переменную куда нибудь (в файл, на экран или куда угодно)
например:
a := length(Arithm_exp);
WriteLn('a=',a);

2) проблема у Вас тут:
Sign_elem := nil;
Sign_elem^.Zapic_elem := '#';
Это куда это вы присваиваете?! В NIL ?! Так сразу Access и получаете...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.10.2010, 17:20   #9
fredwriter
Форумчанин
 
Регистрация: 06.10.2009
Сообщений: 121
По умолчанию

Спасибо за помощь
Ищущий да обрящет
fredwriter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Порезать строчку KoBRaAndrey Общие вопросы Delphi 3 30.04.2010 11:27
слои в строчку 1div HTML и CSS 7 19.12.2008 16:36
Рразъясните строчку. Amen Помощь студентам 11 30.08.2008 02:45
Как с поиощью hiew вставить в файл строчку, "раздвинуть" файл и вставить туда строчку? barand Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 28.06.2008 10:58