Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
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; я саму программу при всём своём желании не напишу, т.к. в паскале не секу.... |
|
|
|
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
האם יש זמן לעצור ? |
|
|
|
12 Dec 2008, 11:43
Сообщение
#23
|
|
|
Newbie Сообщений: 31 Спасибо сказали: 0 раз |
люди, напишите пожалуйста, хотя бы функцию, которая бы считала среднее арифмитическое, используя стек..
|
|
|
|
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, ибо он хорош только для учебы. Искать ссылки на книжку и читать было влом. Потому писал по памяти и могут быть ошибки синтаксиса. Или еще какие. Так что разбирайся сам - комментариев я везде натыкал |
|
|
|
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. |
|
|
|
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
האם יש זמן לעצור ? |
|
|
|
12 Dec 2008, 16:28
Сообщение
#27
|
|
|
Newbie Сообщений: 31 Спасибо сказали: 0 раз |
Tervyn огромное спасибо!!!!! единственный нормальный человек на форуме!!!!!!!! да так же Chrono Syndrome пасибо, ловите плюсы...
Отмодерировано |
|
|
|
![]() ![]() |
| Текстовая версия | Сейчас: 2 December 2025 - 20:51 |
|
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |
|