IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> стэк для символов, переделать
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 111
Пол: Мужской
Реальное имя: Рома

Репутация: -  0  +


переделывали в инсте стэк, но я забыл его скачать, сам никак не могу вспомнить, пожалста переделайте ентот пас, чтоб стэк работал для символов, для задачи оч надо на завтра

Сообщение отредактировано: kr3v3tkus -


Прикрепленные файлы
Прикрепленный файл  MyStack.pas ( 1.16 килобайт ) Кол-во скачиваний: 303


--------------------
Цитата
          .     .
           \__/
          (**)
(>:=:=:~~ 
  ^ ^ ^ ^ 

Креветка присваивания :DDD
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Если то, что ты выложил, работало с Integer, то вот это будет работать с Char:


Прикрепленные файлы
Прикрепленный файл  myclasses.pas ( 968 байт ) Кол-во скачиваний: 284
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 111
Пол: Мужской
Реальное имя: Рома

Репутация: -  0  +


volvo пасиба большое smile.gif 3 месяца тут уже небыл, но снова Выручаете мну smile.gif
зы ну я и дефект ;) тут
procedure Push(Value:T);
procedure Pop(var Value: T);
забыл изменить на чар блин ;)))) и думаю - чёж не работает ;)))

Сообщение отредактировано: kr3v3tkus -


--------------------
Цитата
          .     .
           \__/
          (**)
(>:=:=:~~ 
  ^ ^ ^ ^ 

Креветка присваивания :DDD
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 111
Пол: Мужской
Реальное имя: Рома

Репутация: -  0  +


если можно, то ещё вопросик, просто ваще первый раз за дельфя сел unsure.gif
как правильно написать: нужно подсчитать все строки мемо1 до строчки с символом ";"
чёто я нагородил тут rolleyes.gif
Код
  while flag = true do
    if Memo1.Lines.Text(i) <> ";" then inc(f) else flag:=false;



--------------------
Цитата
          .     .
           \__/
          (**)
(>:=:=:~~ 
  ^ ^ ^ ^ 

Креветка присваивания :DDD
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
до строчки с символом ";"
имеется в виду, что строка содержит ТОЛЬКО ";" или все, что угодно, включая этот символ?

По первому варианту:
  i := 0;
while (i < memo1.Lines.Count) and (Memo1.Lines[i] <> ';') do inc(i);

по второму:
  i := 0;
while (i < memo1.Lines.Count) and (pos(';', Memo1.Lines[i]) = 0) do inc(i);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 111
Пол: Мужской
Реальное имя: Рома

Репутация: -  0  +


По первому smile.gif
Правда всё равно ничё не могу никак сделать с этим стэком ((( Ужасть как фигово иметь препода из другого города, который считает что нас на родине чемуто учат blink.gif
если ещё совсем не надоел wacko.gif , то глобальный вопрос sad.gif) - нужно стеком поменять первую половину строк с символами со второй местами, тоесть
a c
b d
c a
d b
;
На форме 2 мемо и кнопка
я ваще какуюто черноту накатал( ето для второй половины)
Код

  i:=0;
  while (i<memo1.Lines.Count)and(Memo1.Lines[i]<>';') do inc(i);
  q:=(i div 2);
  if (i mod 2)<>0 then inc(q);

  while (q<>0) do
    begin
    l.Pop(q);
    p.Push(q);
    Memo2.Lines.Add(IntToStr(q));
    dec(q);
    end;

Вот когда мы уже запустили программу и вводим вручную символы, как засунуть их в стэк?
мож там на евент Onchange ставить пуш? sad.gif кароче ваще плыву wacko.gif

Сообщение отредактировано: kr3v3tkus -


--------------------
Цитата
          .     .
           \__/
          (**)
(>:=:=:~~ 
  ^ ^ ^ ^ 

Креветка присваивания :DDD
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


можно и так.
но тогда у человека не будет возможности исправить, если что-то не то ввел (или надо проверять - если нажат бэкспейс или делит - удалять элемент).
я бы предложила дать возможность ввести все, а потом нажать на кнопку типа "готово".


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 111
Пол: Мужской
Реальное имя: Рома

Репутация: -  0  +


ващето да, ток я ваще тут понапутал всё и поп и пуш ваще через левую какуюто переменную(я по примеру с цифрами смотрел и напутал видать с типами). Эээх пойду спать, завтра бить будут ;))) надо готовиться ;)))


--------------------
Цитата
          .     .
           \__/
          (**)
(>:=:=:~~ 
  ^ ^ ^ ^ 

Креветка присваивания :DDD
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


интересный подход...
откуда ж мы можем знать, где и что ты напутал при использовании готовых методов?..


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 111
Пол: Мужской
Реальное имя: Рома

Репутация: -  0  +


А не могли бы Вы на примере показать - программа запущена, в неё введены символы(например 4) и ";", как занести в стек эти 4 символа с помошью вот этого
Код
procedure TStack.Push (Value:Char);
var P:PNode;
begin
   new(P);
   P.Next:=FNode;
   FNode:=P;
   P.Info:=Value;
end;

если можно, то с варом, а то я просто ужасть как путаюсь с переменными, тем более с использованием этих готовых методов


--------------------
Цитата
          .     .
           \__/
          (**)
(>:=:=:~~ 
  ^ ^ ^ ^ 

Креветка присваивания :DDD
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


не совсем поняла, что ты от меня хочешь....
думаю, примерно этого:
первая переменная, которая нам понадобится - это сам стэк.
var Stack : TStack;

Под нее нужно выделить место, то есть сделать
Stack:=TStack.Create;


примерно такое я бы запихнула в обработчик события нажатие на кнопку "все готово":
var ch: char; //символ, с которым будем работать
i: integer; //текущая строка
begin
i:=1;
ch:=Memo1.Lines[0][1]; //считываем символ из нулевой строки
while ch<>';' do //пока не дошли до конца
begin
Stack.Push(ch);
ch:=Memo1.Lines[i][1];
inc(i);
end;
end;

Если точки с запятой не будет - получится фигня. Если есть вероятность такого события - добавь проверку, не превышает ли i количество строк в Memo1.

После того, как ты сделал все, что хотел, обязательно очисти память при помощи destroy.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






тенк ю smile.gif буду мучить ща smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Пионер
**

Группа: Пользователи
Сообщений: 111
Пол: Мужской
Реальное имя: Рома

Репутация: -  0  +


фуф smile.gif отмучил :D
мисс_граффити ууу пасиба smile.gif терь после наглядного примера усё стало по полкам smile.gif
Код
  q:=0;
  i:=1;
  ch:=Memo1.Lines[0][1];
  while ch<>';' do
    begin
    l.Push(ch);
    ch:=Memo1.Lines[i][1];
    inc(q);
    inc(i);
    end;

  q:=(i div 2);
  {howmessage(inttostr(q));}

  for i := q+1 to 2*q do
    begin
    l.Pop(ch);
    t.Push(ch);
    end;
  for i := q+1 to 2*q do
    begin
    t.Pop(ch);
    p.Push(ch);
    Memo2.Lines.Add(ch);
    end;
   while (not l.Empty) do
     begin
     l.Pop(ch);
     t.Push(ch);
     end;
   while (not t.Empty) do
     begin
     t.Pop(ch);
     p.Push(ch);
     Memo2.Lines.Add(ch);
     end;

ток пришлося 3 стэка делать, чтоб перевернуть усё это гадство как надо ;)))
ща буду ещё очередь отмучивать smile.gif

Сообщение отредактировано: kr3v3tkus -


--------------------
Цитата
          .     .
           \__/
          (**)
(>:=:=:~~ 
  ^ ^ ^ ^ 

Креветка присваивания :DDD
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Кошмар какой-то.
3 стэка?! Зачем?
надо 2 указателя поменять местами, а не все элементы переставлять!!!! Это ж динамическая структура.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Пионер
**

Группа: Пользователи
Сообщений: 111
Пол: Мужской
Реальное имя: Рома

Репутация: -  0  +


эмм 2 указателя? smile.gif препод на уроке делал вот таким вот перелопачиванием unsure.gif


--------------------
Цитата
          .     .
           \__/
          (**)
(>:=:=:~~ 
  ^ ^ ^ ^ 

Креветка присваивания :DDD
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


извращенцы.
ну ради чего это?
ладно, дело твое.....
но я бы просто переставила указатель Head (начало стэка) на первый элемент второй половины; указатель из поля Next последнего элемента (оно было нуль-указателем) на бывший первый элемент; поле Next последнего элемента первой половины - изменить на нуль-указатель. только ввести доп. указатель, чтобы ничего не потерять.
это ведь намного проще, затраты по памяти и времени несравнимы.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Пионер
**

Группа: Пользователи
Сообщений: 111
Пол: Мужской
Реальное имя: Рома

Репутация: -  0  +


что извращенцы - так это точна wink.gif
ну просто хоть и второй курс - а специальность у нас наполовину экономическая, поэтому наверна не хотят грузить. На самом деле из 20 с чем то человек хоть что-то понимают человек 10 от силы ;)
а насчёт перестановки указателей - крута smile.gif действительно куча времени и памяти съэкономицца, но я и с этим то путался, да и не поймёт он меня, если после тупняка принести ему такое решение lol.gif


--------------------
Цитата
          .     .
           \__/
          (**)
(>:=:=:~~ 
  ^ ^ ^ ^ 

Креветка присваивания :DDD
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


оно же и алгоритмически проще smile.gif)
хочешь, нарисую картинку, чтобы было яснее?
думаю, если ты ему покажешь, что сам это дело понимаешь - никаких проблем со сдачей не возникнет. +всегда можно принести два варианта и с наивным взглядом сказать: "мне кажется, это решение красивее...."

ОФФ. У нас специальность абсолютно не экономическая, чистое ПО - из 23 человек первую лабораторку (ну что-то вроде вот этой твоей - у кого стек, у кого очередь, у кого дек), заданную на первой лекции (начало сентября) сделало 5 человек.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Пионер
**

Группа: Пользователи
Сообщений: 111
Пол: Мужской
Реальное имя: Рома

Репутация: -  0  +


не, саму теорию я понял, единственное про дополнительный указатель не совсем smile.gif...
...а вот как на практике сделать smile.gif это делать надо не в самом юните, а в тех методах готовых? unsure.gif
ЗЫ сила smile.gif еслиб у нас бы дали прям в аудитории решать чёнить, то я ваще сомневаюсь, чтобы ктото решил smile.gif + грузят нас чёт по математике, а профилирующие нифига ( програмирование - раз в 2 недели 1-2 пары ()


--------------------
Цитата
          .     .
           \__/
          (**)
(>:=:=:~~ 
  ^ ^ ^ ^ 

Креветка присваивания :DDD
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


в самом модуле, разумеется.
вместо твоего "перелопачивания"
Head - указатель на начало стека, pt и pt1 - указатели, под которые выделено место, но в него пока ничего не засунуто.
pt:=Head;
pt1:=Head;
//пролистываем циклом до середины массива, то есть q-1 раз (или q? проверь....) делаем:
pt:=pt^.Next;
//имеем указатель на первый элемент первой половины и последний элемент первой половины.
Head:=pt^.Next; //теперь первым в стеке будет первый элемент второй половины
pt^.Next:=nil; //а последний элемент первой половины станет совсем последним
pt:=Head; //иначе не сможем листать, т.к. наткнемся на нуль-указатель
//пролистываем до конца стека (можешь опять же посчитать, а можешь цикл while), делая
pt:=pt^.Next;
//для последнего элемента:
pt^.Next:=pt1; //теперь он указывает на первый элемент первой половины.


примерно так.
не проверяла, но вроде проблем не должно быть.....
если интересно - экспериментируй smile.gif


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.03.2024 11:39
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name