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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2011, 05:19   #1
Rebel666
Пользователь
 
Регистрация: 18.10.2011
Сообщений: 10
Злость Калькулятор на Паскале (проблемы на Linux)

Доброго времени суток! С заданием проблем нет, проблема с компиляцией на Lunix'е! Выдает ошибку в последнем FOR'е...может напортачил, но на XPюшке всё путем идет...но сдавать мне надо именно на линуксе))
Вот задание на всякий: Строка текста содержит целые цифры и символы + и -. Пробелы игнорируются. Получить арифметическое значение выражения. Пример: "9+5-3=11". Вывести исходный текст и результат.
Помогите пожалуйста! Очень срочно надо!

Код:
program calc;
uses crt;
var
   s : string;
   ar : array [1..100] of integer;
   op : array [1..100] of char;
   i, n, kar, kop : integer;
   f : boolean;
 
{Beret chislo}
Procedure Chislo;
var d, a, p, j : integer;
    b : boolean;
begin
  b := false;
  p := 0;
  for j := i to n do begin
    a := Ord(s[j]);
    if (a > 47) and (a < 58)
    then begin
      a := a - 48;
      p := p*10 + a;
      b := true;
      inc(i);
    end
    else begin
      dec(i);break;
    end;
  end;
 
  if b
  then begin
    inc(kar);
    ar[kar] := p;
  end;
end;
 
{Sdvig massivov}
Procedure Sdvig(b : integer);
var i : integer;
begin
  for i := b to kop do begin
    ar[i+1] := ar[i+2];
    op[i] := op[i+1];
  end;
  kop := kop - 1;
  kar := kar - 1;
 
  for i := 1 to kar do
    write(ar[i], op[i]);
  writeln;
end;
 
 
begin
     clrscr;
     writeln('Vvedite primer dlya resheniya:');
     Readln(s);
     n := length(s);
     i := 1;
     f := false;
 
     while (i <= n) do begin
       Chislo;
 
       inc(i);
       if i > n
       then break;
       if (s[i] = '+') or (s[i] = '-')
       then begin
         inc(kop);
         op[kop] := s[i];
       end
       else
         if s[i] <> ' '
         then begin
           f := true;
           break;
         end;
 
       inc(i);
     end;
 
     write('Numerics : ');
     For i := 1 to kar do
       write(ar[i], ' ');
 
     writeln;
     write('Operations : ');
     For i := 1 to kop do
       write(op[i], ' ');
     writeln;
 
     if f
     then Writeln('Error')
     else
     {Vipolnenie operaciy}
     begin
       {+ -}
       for i := 1 to kop do
         if (op[i] = '+') or (op[i] = '-')
         then begin
 
           if op[i] = '+'
           then ar[i] := ar[i] + ar[i+1];
 
           if op[i] = '-'
           then ar[i] := ar[i] - ar[i+1];
 
           Sdvig(i);
           i := i - 1;
         end;
 
       Writeln('Result = ', ar[1]);
     end;
 
     Readln;
end.
Rebel666 вне форума Ответить с цитированием
Старый 13.12.2011, 09:16   #2
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

ну хотя бы текст ошибки в студию
fbus вне форума Ответить с цитированием
Старый 13.12.2011, 14:11   #3
Rebel666
Пользователь
 
Регистрация: 18.10.2011
Сообщений: 10
По умолчанию

(111,22) Error: Illegal assignment to for-loop variable "i"
Вот ошибка...и честно говоря хз как её исправить...пробовал переделывать цикл FOR в REPEAT-UNTIL, но тогда работает не правильно
Rebel666 вне форума Ответить с цитированием
Старый 13.12.2011, 15:56   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Правильно ругает (а может и нет ). Нельзя изменять значение счётчика цикла FOR. Вобщем правильно что менял, но лучше менять на while, чтобы не допускать лишних итераций. Примерно так.
Код:
     begin
       {+ -}
       i:=0;
       while i < kop do begin//for i := 1 to kop do
         inc(i);//i := i + 1;
         if (op[i] = '+') or (op[i] = '-')
         then begin
 
           if op[i] = '+'
           then ar[i] := ar[i] + ar[i+1];
 
           if op[i] = '-'
           then ar[i] := ar[i] - ar[i+1];
 
           Sdvig(i);
           i := i - 1;
         end;
       end;//while
 
       Writeln('Result = ', ar[1]);
     end;
eoln вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
калькулятор на Паскале Свежий Помощь студентам 1 13.05.2011 19:50
Калькулятор на паскале ne4kin Паскаль, Turbo Pascal, PascalABC.NET 21 06.12.2010 19:05
Калькулятор на паскале Buratino Помощь студентам 14 10.10.2010 13:18
Калькулятор на паскале, продолжение действия tabber Помощь студентам 1 28.09.2010 18:33
Калькулятор на паскале Nastya55555 Помощь студентам 1 05.05.2010 22:37