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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2012, 14:44   #1
артем111
Пользователь
 
Регистрация: 01.05.2012
Сообщений: 13
По умолчанию перевести из дэлфи в паскаль!

ребята помогите перевести прогу
не могу разобратся как кнопки в дэлфи реализовать в паскале

ЛАБА 4
Код:
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

const
  N = 5;  //кол-во элементов в начальном списке-стоянке

type
  TItemPtr = ^TItem;    //указатель на элемент записи
  TItem = record        //объявление типа записи
    index: integer;     //информационная часть
    next: TItemPtr;     //указатель на следующий элемент
  end;

  TStack = class (TObject)              //объявление типа класса
    Start,Start2: TItemPtr;             //указатели на начала списков
    constructor Create;                 //конструктор
    destructor Destroy; virtual;        //деструктор
    procedure AddItem;                  //добавление элементов со значением index из окна edNumber
    procedure DelItem(Index: integer);  //удаление элемента с заданным значением поля index
    procedure Show;                     //показать список
  end;

  TMainForm = class(TForm)
    edStack: TEdit;
    btShow: TButton;
    lbStack: TLabel;
    lbNumber: TLabel;
    edNumber: TEdit;
    btAddAuto: TButton;
    btDelAuto: TButton;
    procedure btShowClick(Sender: TObject);
    procedure btAddAutoClick(Sender: TObject);
    procedure btDelAutoClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;
  Stack: TStack;      //объект класса

implementation

{$R *.dfm}

{ TStack }

procedure TStack.AddItem;
var
  tmp1,tmp2: TItemPtr;  //вспомогательные переменные
  ind: integer;
begin
  if Assigned(Start) then  //если указатель на начало списка не равен Nil
  begin
    tmp1:= Start;
    ind:=StrtoInt(MainForm.edNumber.Text); //инициализируем информационную переменную
    while tmp1<>Nil do                     //цикл по всем элементам списка до первого нулевого указателя
    begin
      if ind=tmp1.index then               //если в списке нашелся элемент,уже содержащий новый индек, то
      begin
        ShowMessage('Авто с таким номером уже есть!!!');    //ругаем юзера
        Exit;                                               //и выходим из процедуры
      end;
      tmp1:=tmp1.next;                                      //присваиваем указатель на следующий элемент
    end;
    tmp1:=start;                                            //копируем указатель на начало главного списка
    while tmp1.next<>Nil do                                 //пробегаемся по гл.списку до конца
      tmp1:=tmp1.next;                                      //но после выхода из цикла tmp1 указывает на последний элемент
    new(tmp2);                  //выделяем память под новый элемент
    tmp2.index:=ind;            //записываем туда информацию
    tmp2.next:=Nil;             //указатель на след элемент - нулевой
    tmp1.next:=tmp2;            //в предыдущий элемент записываем указатель на текущий элемент
  end
  else                         //сюда, если указатель на начало списка равен Nil
  begin
    new(start);                //создаем етот указатель
    start.index:=StrtoInt(MainForm.edNumber.Text);    //записываем инфу в него
    start.next:=Nil;                                  //а в указатель - нолик
  end;
  Show;                                               //показываем новый список
end;

constructor TStack.Create;
var
  i: integer;
  tmp1,tmp2: TItemPtr;
begin
  inherited Create;       //вызываем конструктор родительского класса (так надо ;-))
  new(Start);             //создаем указатель на начало списка
  Start.index := 1;       //пишем туда информацию
  tmp2:=Start;            //копируем указатель
  for i:=2 to N do        //цикл для создания N элементов
  begin
    new(tmp1);
    tmp1.index:=i;
    tmp2.next:=tmp1;
    tmp2:=tmp1;
  end;
  tmp2.next := Nil;
  Start2:=Nil;             //указатель на начало вспомогательного списка - в ноль
end;

Последний раз редактировалось Stilet; 05.05.2012 в 11:41.
артем111 вне форума Ответить с цитированием
Старый 01.05.2012, 14:45   #2
артем111
Пользователь
 
Регистрация: 01.05.2012
Сообщений: 13
По умолчанию

Код:
procedure TStack.DelItem(Index: integer);
var
  tmp1,tmp2,tmp3,tmpDel: TItemPtr;
  count,i,j: integer;
begin
  //ищем элемент с заданным индексом
  count:=0;
  tmp1:=Start;
  while tmp1<>Nil do
  begin
    count:=count+1;
    if tmp1.index=index then     //если нашли элемент, то выходим из цикла
      Break;                     //при этом count сохранит его порядковый номер
    tmp1:=tmp1.next;
  end;
  if tmp1 = Nil then            //если не нашли
  begin
    ShowMessage('Авто с таким номером на стоянке нет!!!');
    Exit;
  end;

  //если нашли, то все элементы до него переносим в новый список
  tmp1:=Start;
  for i:=1 to count-1 do     //проходим по всем элементам до найденного
  begin
    new(tmp3);               //создаем новый элемент
    if not Assigned(Start2) then    //если вспомогательного списка еще нет
    begin
      tmp3:=tmp1;
      Start2:=tmp1;                 //созданный элемент будет первым
      tmp2:=tmp3;
    end
    else            //если список уже есть, то дописываем в конец
    begin
      tmp2.next:=tmp3;
      tmp3^:=tmp1^;
      tmp2:=tmp3;
    end;
    tmp1:=tmp1.next;
  end;
  tmp2.next:=Nil;

  //теперь удаляем первый элемент, которым должен оказаться найденный нами
  tmpDel:=tmp1;
  tmp1:=tmp1.next;
  Start:=tmp1;
  Dispose(tmpDel);

  //в начало оставшегося списка дописывает элементы из второго списка (начиная с последнего)
  for i:=1 to count-1 do
  begin
    tmp1:=start2;
    for j:=1 to count-i-1 do
      tmp1:=tmp1.next;
        new(tmp3);
    tmp3^:=tmp1^;
    tmp3.next:=start;
    start:=tmp3;
  end;

  //удаляем второй (вспомогательный) список
  tmp1:=start2;
  while tmp1<>Nil do
  begin
    tmp2:=tmp1.next;
    Dispose(tmp1);
    tmp1:=tmp2;
  end;
  tmp1:=Nil;
  tmp2:=Nil;
  tmp3:=Nil;
  tmpDel:=Nil;
  start2:=Nil;
  Show;
end;
destructor TStack.Destroy;
var
  tmp1,tmp2: TItemPtr;
begin
  tmp1 := Start;
  while tmp1 <> Nil do     //опять по всему списку
  begin
    tmp2 := tmp1.next;
    Dispose(tmp1);         //удаляем все элементы
    tmp1 := tmp2;
  end;
  inherited Destroy;
end;

procedure TStack.Show;
var
  tmp1: TItemPtr;
begin
  if Assigned(Start) then     //если список есть, то
  begin
    tmp1 := Start;             //копируем начальный указатель
    MainForm.edStack.Text:=''; //очищаем поле для вывода
    while tmp1<>Nil do
    begin
      MainForm.edStack.Text := MainForm.edStack.Text+'<'+InttoStr(tmp1.index)+'>'; //выводим каждый элемент
      tmp1 := tmp1.next;
    end;
  end
  else
    MainForm.edStack.Text:='';  //если списка нет, то очищаем поле вывода
end;

procedure TMainForm.btShowClick(Sender: TObject);
begin
  Stack.Show;
end;

procedure TMainForm.btAddAutoClick(Sender: TObject);
begin
  if length(edNumber.Text)<>0 then
    Stack.AddItem;
end;

procedure TMainForm.btDelAutoClick(Sender: TObject);
begin
  if length(edNumber.Text)<>0 then
    Stack.DelItem(StrtoInt(edNumber.Text));
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  Stack := TStack.Create;
end;
end.

Последний раз редактировалось Stilet; 05.05.2012 в 11:40.
артем111 вне форума Ответить с цитированием
Старый 01.05.2012, 14:53   #3
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
не могу разобратся как кнопки в дэлфи реализовать в паскале
Теоретически, это возможно, но практически... вы не сможете этого добиться.
Вам пртдётся писать кучу библиотек/модулей/компонентов...

Видимо, кто-то вас дезинформировал...
Вадим Мошев вне форума Ответить с цитированием
Старый 01.05.2012, 21:14   #4
артем111
Пользователь
 
Регистрация: 01.05.2012
Сообщений: 13
По умолчанию

мне в принципе эти кнопки в паскале не нужны!
мне просто нужна эта прога в паскале только с оператором data!
помогите если кто может
хотя бы начало
дальше сам рыть буду)

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
Теоретически, это возможно, но практически... вы не сможете этого добиться.
Вам пртдётся писать кучу библиотек/модулей/компонентов...

Видимо, кто-то вас дезинформировал...
помоги пожалуйста)))

Последний раз редактировалось Stilet; 05.05.2012 в 11:43.
артем111 вне форума Ответить с цитированием
Старый 01.05.2012, 22:29   #5
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от артем111 Посмотреть сообщение
мне в принципе эти кнопки в паскале не нужны!
мне просто нужна эта прога в паскале
Вообще-то прога уже написана на Паскале.
Цитата:
только с оператором data!
А что за оператор такой в Паскале?
В Фортране такой есть, а в Паскале - не слышал.
Цитата:
помогите если кто может
хотя бы начало
дальше сам рыть буду)
Так начало уже есть.
s-andriano вне форума Ответить с цитированием
Старый 02.05.2012, 00:09   #6
артем111
Пользователь
 
Регистрация: 01.05.2012
Сообщений: 13
По умолчанию

DATA в бейсике заносит в память числовые и строковые константы, которые считываются оператором READ а вот в паскале я не знаю как это реализовать!
помогите убрать кнопки TButton! как вот этот кусок в паскаль перевести?
Код:
  TMainForm = class(TForm)
    edStack: TEdit;
    btShow: TButton;
    lbStack: TLabel;
    lbNumber: TLabel;
    edNumber: TEdit;
    btAddAuto: TButton;
    btDelAuto: TButton;
    procedure btShowClick(Sender: TObject);
    procedure btAddAutoClick(Sender: TObject);
    procedure btDelAutoClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;
  Stack: TStack;      //объект класса
Цитата:
Сообщение от s-andriano Посмотреть сообщение
Вообще-то прога уже написана на Паскале.А что за оператор такой в Паскале?
В Фортране такой есть, а в Паскале - не слышал.
Так начало уже есть.
она на делфи написана вообще то))

Последний раз редактировалось Stilet; 05.05.2012 в 11:56.
артем111 вне форума Ответить с цитированием
Старый 02.05.2012, 13:26   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Делфи - среда разработки, в качестве языка программирования использующая Объектный Паскаль.
s-andriano вне форума Ответить с цитированием
Старый 02.05.2012, 14:37   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Делфи - среда разработки, в качестве языка программирования использующая Объектный Паскаль.
Вы формально правы, но фактически - ошибаетесь...

цитирую с википедии - Delphi (язык программирования):
Цитата:
Delphi (язык программирования)
Материал из Википедии — свободной энциклопедии
У этого термина существуют и другие значения, см. Delphi.
Эта статья — о языке программирования. Об интегрированной среде разработки см. Delphi (среда разработки).
Delphi
Класс языка: императивный, структурированный, объектно-ориентированный
Появился в: 1995; посл. выпуск 2011
Автор(ы): Андерс Хейлсберг
Расширение файлов: .pas,.dpr,.dpk,.pp
Релиз: Delphi XE2 (2011)
Типизация данных: статическая, сильная, безопасная (англ. Type safety)
Основные реализации:
Borland/Inprise/Codegear/Embarcadero Delphi; Borland Kylix; FreePascal
Испытал влияние: Object Pascal, C++
Сайт: Официальный сайт

Delphi (Де́лфи, произносится /ˈdɛlˌfi:/[1]) — императивный, структурированный, объектно-ориентированный язык программирования, диалект Object Pascal[2]. Начиная со среды разработки Delphi 7.0[3], в официальных документах Borland стала использовать название Delphi для обозначения языка Object Pascal. Начиная с 2007 года уже язык Delphi (производный от Object Pascal) начал жить своей самостоятельной жизнью и претерпевал различные изменения, связанные с современными тенденциями (например, с развитием платформы .NET) развития языков программирования: появились class helpers, перегрузки операторов и другое.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.05.2012, 15:42   #9
артем111
Пользователь
 
Регистрация: 01.05.2012
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы формально правы, но фактически - ошибаетесь...

цитирую с википедии - Delphi (язык программирования):
совет на счёт этой проги кто нибудь даст?
артем111 вне форума Ответить с цитированием
Старый 02.05.2012, 16:31   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а что тут советовать - берите исходники на Delphi - "вырывайте" оттуда нужные куски кода и вставляйте в свою программу на Pascal.

Вы спросите - что значит "нужные куски кода" ? Отвечаю, те куски кода, которые решают поставленную Вам задачу (Вы про задачу ничего не пишете, а угадывать я не собираюсь).
Вы спросите - а куда их вставлять в программу на Паскаль? Отвечаю, эти кусочки кода надо вставлять туда, где они будут в нужные моменты времени вызываться.


прошу не считать мой пост издевательством - какой вопрос, такой и ответ (точнее совет!)

Вы бы лучше рассказали, что делает программа на Delphi, что должна делать программа на Pascal (и как выглядеть), выложите исходники проекта на Delphi в виде архива, тогда можно будет о чём то более конкретном поговорить.
А пока это всё только слова, слова, слова...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевести с С++ на Паскаль xakkkkker Паскаль, Turbo Pascal, PascalABC.NET 0 15.05.2011 18:58
Перевести из С++ в паскаль Ver-Mishel Помощь студентам 0 15.02.2011 20:52
Графика на Дэлфи и Паскаль MQAG Помощь студентам 1 24.01.2011 09:23
Перевести С++ в Паскаль alphadog900 Помощь студентам 6 11.12.2010 18:41