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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2011, 21:48   #1
Donim
Пользователь
 
Регистрация: 22.05.2011
Сообщений: 10
По умолчанию Не могу понять в почему ошибка

Решил задачку про стек, как мне показалось(((

Условие: Даны два непустых стека из элементов типа byte. Организовать перемещение элементов из первого стека во второй, пока значение вершины первого стека не станет четным (перемещенные элементы первого стека будут располагаться во втором стеке в порядке, обратном исходному). Если в первом стеке нет элементов с четными значениями, то переместить из первого стека во второй все элементы.

Код:
program Lab_9_2;

type
  Stack = ^TStackItem;
  TStackItem = record { Элемент стека }
    Value: byte; { Значение элемента }
    Next: Stack; { указатель на следующий }
  end;

///Добавляет элемент в стек
procedure Push(var head: Stack; Value: byte);
var
  tmp: Stack;
begin
  new(tmp);
  tmp^.Value := Value;
  tmp^.Next := head;
  head := tmp;
end;

	///Забирает элемент из стека
function Pop(var head: Stack ): byte;
var
  tmp: Stack;
begin
  if (head <> nil) then begin
    tmp := head;
    head := head^.Next;
    Pop := tmp^.Value;
    Dispose(tmp);
  end
  else
    Pop := 0;
end;

	///Проверяет стек на пустоту
function IsEmpty(head: Stack): boolean;
begin
  IsEmpty := (head = nil);
end;

///показывает верхний элемент стека
function Top(s: Stack): byte;
begin
  Assert(not IsEmpty(s));
  result := s^.Value;
end;

///Заполняет оба стека случайными числами
procedure Zap(var s, s1: Stack; n: byte);
var
  i: byte;
begin
  for i := 1 to n do
  begin
    //Randomize;
    Push(s, random(255));
    Push(s1, random(255));
  end;
end;

///Перемещает элементы стека
procedure Peremest(var s, s1: Stack);
var
  mas: array of byte;
  i: byte;
begin
  i := 1;
  while IsEmpty(s) = false do
  begin
    if Top(s) mod 2 <> 0 then
    begin
      setlength(mas, i);
      mas[i - 1] := Pop(s);
      Pop(s1);
    end
    else
      break;
  end;
  
  if mas.Length = 0 then    //ERROR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  writeln('Не удачные данные ')
  else
  for i := 0 to mas.Length - 1 do
    Push(s1, mas[i]);
end;

///Выводит стек на экран
procedure Vivod(s: Stack);

var
  mas: array of byte;
  i: byte;

begin
  i := 1;
  while IsEmpty(s) = false do
  begin
    setlength(mas, i);
    mas[i - 1] := Pop(s);
    inc(i);
  end;
  
  for i := 0 to mas.Length - 1 do
    writeln(mas[i]);
end;


var
  s, s1: Stack;
  n: byte;

begin
  write('Введите количество элементов в стеках: '); readln(n);
  s:=nil; s1:=nil;
  Zap(s, s1, n);
  writeln('Первый стек ');Vivod(s);
  writeln('Второй стек ');Vivod(s1);
  
  Peremest(s, s1);
  
  writeln('Полученный стек ');Vivod(s1);
end.

Последний раз редактировалось Donim; 08.06.2011 в 22:33.
Donim вне форума Ответить с цитированием
Старый 08.06.2011, 21:50   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А проблема-то в чем или где примерно?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 08.06.2011, 21:56   #3
Donim
Пользователь
 
Регистрация: 22.05.2011
Сообщений: 10
По умолчанию

строка в которой ошибка прокоментирована, процедура Peremest, там восклицательных знаков много
Donim вне форума Ответить с цитированием
Старый 08.06.2011, 22:40   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
mas.Length
А разве в Паскале допустим такой синтаксис?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 08.06.2011, 22:54   #5
Donim
Пользователь
 
Регистрация: 22.05.2011
Сообщений: 10
По умолчанию

программа написа под паскаль ABC.NET
Donim вне форума Ответить с цитированием
Старый 08.06.2011, 23:07   #6
Donim
Пользователь
 
Регистрация: 22.05.2011
Сообщений: 10
По умолчанию

Теперь вроде бы всенюансы рассмотрены, будет ли конструктивная критика?
Donim вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять почему не работает микрофон Stilet Компьютерное железо 8 08.10.2010 16:54
Почему не работает...хм....понять не могу! Артур Иваныч Microsoft Office Excel 9 01.12.2009 17:58
Не могу понять почему блокируется папка Paul Hindenburg Общие вопросы Delphi 4 07.05.2009 10:47
Не могу понять почему вылетает 3 процедурка, помогите Taisja Помощь студентам 2 04.06.2008 21:28