IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Closed TopicStart new topic
> стеки и очереди в паскале, Поомоогитее....
Palpalich
сообщение 08 Dec 2008, 16:31
Сообщение #21

Newbie
Сообщений: 31
Спасибо сказали: 0 раз




ребят, стек описывается вот так в паскале:
Program r;
Uses crt;
Type ss=^zveno;
Zveno=record
inf:integer;
next:ss;
End;
Var p,l1,r1,l2,r2:ss;
c,a,b,i,n:integer;
f:file of integer;
я саму программу при всём своём желании не напишу, т.к. в паскале не секу....sad.gif
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 08 Dec 2008, 21:55 (Сообщение отредактировал Chrono Syndrome - 08 Dec 2008, 21:59)
Сообщение #22

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата(Shaidar Haran @ 08 Dec 2008, 15:44)
Цитата(Лекции по Паскалю)
При программировании на Паскале стек чаще всего реализуется в виде однонаправленного списка. Каждый элемент структуры содержит указатель на следующий.
Это означает, что стек мы определяем следующим образом:
Код
Type
 EXST = ^ST;
 ST = record
      Data : integer;
      Next : EXST;
 end;
Var
 Stack : EXST; {Текущая переменная}

Это имхо FIFO, ибо он и заполняется от первой к последней, и читается от первой к последней (если мы, конечно, предусмотрительно сохранили где-то указатель на первую переменную. если не сохранили - стек потерян). Вот так вот)

Забавно. Вот только стек обычно используется для хранения вложенных данных, а потому первым оттуда читается последний параметр. Впрочем он и реализуется, если по нормальному, тупым указателем на позицию последней записи в заранее выделенный участок памяти. Остальное - как бы изврат).


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Palpalich
сообщение 12 Dec 2008, 11:43
Сообщение #23

Newbie
Сообщений: 31
Спасибо сказали: 0 раз




люди, напишите пожалуйста, хотя бы функцию, которая бы считала среднее арифмитическое, используя стек..
Go to the top of the pageAdd Nick
 
+Quote Post
Tervyn
сообщение 12 Dec 2008, 12:48 (Сообщение отредактировал Tervyn - 12 Dec 2008, 13:20)
Сообщение #24

Immortal
Сообщений: 523
Спасибо сказали: 35 раз




Мученик, блин. Так до сих пор и не сдал?
Код
program StackDemo;

{ Название файла с данными }
const
 AFileName = 'file.txt';

{ Описание стека }
type
 PIntStack = ^TIntStack;
 TIntStack = record
   Data: Integer;
   Next: PIntStack;
 end;

{ Инициализация стека }
procedure Init(var AStack: PIntStack);
begin
 AStack := nil;
end;

{ Завершение работы со стеком }
procedure Done(var AStack: PIntStack);
var
 P: PIntStack;
begin
 while (AStack <> nil) do
 begin
   P := AStack^.Next;
   Delete(AStack);
   AStack := P;
 end;
end;

{ Проталкивание элемента в стек }
procedure Push(AData: Integer;var AStack: PIntStack);
var
 P: PIntStack;
begin
 P := nil;
 New(P);
 if (P = nil) then Exit;
 P^.Data := AData;
 P^.Next := AStack;
 AStack := P;
end;

{ Выталкивание элемента из стека }
function Pop(var AData: Integer; var AStack: PIntStack): Boolean;
var
 P: PIntStack;
begin
 if (AStack = nil) then
 begin
   Pop := False;
   Exit;
 end;
 P := AStack^.Next;
 AData := AStack^.Data;
 Delete(AStack);
 AStack := P;
 Pop := True;
end;

var
 F: file of Integer; { переменная файла }
 S: Stack;           { переменная стека }
 X, Y, Z: Integer;   { временные переменные для работы }
begin
 { Привязка переменной к имени }
 Assign(F, AFileName);
 { Отключение встроенной проверки Паскаля }
 {$I-}
 { Открытие файла }
 Reset(F);
 { Включение встроенной проверки Паскаля }
 {$I+}
 { Проверка прошло ли открытие файла успешно }
 if (IOResult <> 0) then
 begin
   WriteLn('Не могу открыть файл!');
   Halt(0);
 end;
 { Создание пустого стека }
 Init(S);
 { Заталкивание элементов файла в стек }
 while not Eof(F) do
 begin
   Read(F, X);
   Push(X, S);    
 end;
 { Закрытие файла }
 Close(F);
 { Подсчет суммы и количества элементов в стеке }
 Z := 0;
 Y := 0;
 while Pop(X, S) do
 begin
   Y := Y + X;
   Z := Z + 1;
 end;
 { Собственно расчет среднего арифметического }
 { Считал в целочисленном варианте, хотя это не принципиально }
 X := Y div Z;
 WriteLn('Среднее арифметическое элементов файла: ', X);
 { Удаление стека }
 { Конкретно в этой проге это вобщем-то не нужно, }
 { Но на всякий случай - чтобы препод проперся:) }
 Done(S);
end.

Сразу же скажу - Паскалем не пользовался лет 7, ибо он хорош только для учебы. Искать ссылки на книжку и читать было влом. Потому писал по памяти
и могут быть ошибки синтаксиса. Или еще какие. Так что разбирайся сам -
комментариев я везде натыкал


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Shaidar Haran
сообщение 12 Dec 2008, 12:57
Сообщение #25

Оранжевый Канцлер Тьмы
Сообщений: 2 344
Спасибо сказали: 618 раз




Черта с два он это сдаст. Спорим, даже целочисленное деление на обыкновенное заменить не сможет?


--------------------
I am the fury in your eyes. I am reason, I am vice.
Careful what you say
You may regret it,
Careful what you wish
You just might get it.
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 12 Dec 2008, 13:14 (Сообщение отредактировал Chrono Syndrome - 12 Dec 2008, 15:35)
Сообщение #26

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата
люди, напишите пожалуйста, хотя бы функцию, которая бы считала среднее арифмитическое, используя стек..

Хех, у меня тут еще вариант родился:

Код
((
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
Stack average num demo (Win32FORTH).
Developed in 2008 by Chrono Syndrome.
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
))

\ Cреднее значение
: Average { \ SDepth -- }
Depth TO SDepth 0E
Begin Depth While S>F F+ Repeat
SDepth S>F F/
;

\ Приводим число к строчке.
: F>Z { \ $buf -- }
MAXSTRING LocalAlloc: $buf
$BUF (F.) $BUF Count ASCIIZ
;

: Create-Random-File { \ FHandle -- }
GENERIC_WRITE CREATE-FILE DROP to FHandle \ Создаем файл.
20 Random 10 + 0 DO \ Начинаем цикл.
30 Random 1+ SP@ CELL FHandle write-file 2DROP \ Вписываем случайные значения.
LOOP FHandle Close-File DROP \ Закрываем файл.
;

: ReadFile2Stack { \ FHandle -- }
GENERIC_READ OPEN-FILE DROP to FHandle \ Открываем файл
BEGIN FHANDLE file-position DROP FHANDLE File-Size DROP DU< WHILE \ Начинаем цикл.
0 SP@ CELL FHandle Read-file 2DROP \ Читаем значения прямо на стек.
REPEAT FHandle Close-File DROP \ Закрываем файл.
;

s" Random.dat" 2VALUE FName \ Временный файл с данными.
FName CReate-Random-File \ Вписываем числа.
NOSTACK FName ReadFile2Stack CHECKSTACK \ Читаем числа на стек.
FName DELETE-FILE DROP \ Удаляем временный файл.
Average \ Считаем среднее значение.
F>Z z" Average value:" 0 NULL MESSAGEBOX DROP \ Выдаем среднее значение.

...15 минут кодинга отсилы). И то, в основном, из-за глючного IDE да корявой документации.


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Palpalich
сообщение 12 Dec 2008, 16:28
Сообщение #27

Newbie
Сообщений: 31
Спасибо сказали: 0 раз




Tervyn огромное спасибо!!!!! единственный нормальный человек на форуме!!!!!!!! да так же Chrono Syndrome пасибо, ловите плюсы...
Отмодерировано
Go to the top of the pageAdd Nick
 
+Quote Post

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

 



Текстовая версия Сейчас: 2 December 2025 - 20:51
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика