Автор Тема: Проблемы с Паскалем  (Прочитано 11229 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Dieter

  • Гость
Проблемы с Паскалем
« : 16.11.06, 19:51:47 »
Почему Turbo Pascal говорит, что эта прога написана неправильно? ???


ЗЫ  Как копиравать из доса не знаю, пришлось делать скрин


Anton R.

  • Гость
Re: Проблемы с Паскалем
« Ответ #41 : 08.03.07, 18:16:38 »
Ммм=) Молодой человек, воспользуйтесь любой доступной литературой по Дельфи. Иначе скоро совсем жутко станет =)
Нету у меня литературы по делфи, есть тока краткий справочник.
Ну а вам чо, трудно подсказать?

Оффлайн 007

  • Старожил
  • ****
  • Сообщений: 907
  • Карма: 383
  • Пол: Мужской
    • Просмотр профиля
Re: Проблемы с Паскалем
« Ответ #42 : 08.03.07, 18:28:54 »
Раздел с var - это объявление переменных, которые будут использоваться далее в программе. :)
P.S. Вообще-то такие элементарные вещи должны быть описаны в любом справочнике для начинающих.

Оффлайн LEND

  • Пользователь
  • **
  • Сообщений: 95
  • Карма: 155
  • Истина как всегда где-то рядом
    • Просмотр профиля
Re: Проблемы с Паскалем
« Ответ #43 : 08.03.07, 19:37:42 »
Anton R.

Faust правильно сказал
<<ПыСы. в блоке Interface разберись что должно быть >>

Ну кто в интерфейсной части пишет конструкцию begin-end;
В интерфейсной части содержатся объявления всех глобальных объектов модуля
(типов, констант, переменных и блоков), которые должны стать доступными основной программе и/или другим модулям.
При объявлении глобальных блоков в интерфейсной части указываются только их заголовок.

Сначала ВЫ правильно поставили
s:real; { Присвоили переменной s вещественный тип}

Тут же ВЫ объявили переменную s:=5
Получается s - переменная и в то же время константа.
Так не делают.
Если ВЫ хотите чтобы переменная s объвлена в этой части и ей было присвоено
значение 5,
то надо написать
 const s=5;
 или
 const
 s=5;
Теперь если Вы захотите ее вывести(т.е. s) на экран то она выведется как
целое число 5
Поэтому надо ставить
 const s=5.00;
 или
 const
 s=5.00
В расчете такая константа так и будет участвовать
      если s=5.0 то и будет 5.0, если s=5.00 то и будет 5.00
      s=5.12 то и будет 5.12

     
Но можно сделать типизированную константу т.е. совместить объявление типа и значение переменной.
Тогда это будет выглядеть так:
  CONST
  s:real=5
  или
  CONST s:real=5
Вот тогда при выводе она может быть и 5.0 и 5.00 и нули необязательно ставить самому.

Если ВЫ хотите чтобы переменная потом при работе получила значение 5, то надо указать
var
s:real;   

Подумайте, что ВЫ хотите поставить в этот раздел - переменную или константу.
======================================
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }

         {Сюда могут помещаться объявления переменных, функций и
          процедур, включаемых в класс формы, но не доступных для
          других модулей}

  public
    { Public declarations }

       {Сюда могут помещаться объявления переменных, функций и
        процедур, включаемых в класс формы и доступных для
        других модулей}

  end;


  { Сюда могут помещаться объявления типов, констант,
    переменных, функций и процедур, к которым будет доступ
    из других модулей, но которые не включаются в класс
    формы }


var  m:real;       {Если m просто переменная вещественного типа}   
const s=5;        {Если s просто константа}
const r=5.00;    {Если r просто константа с 2 нулями}
const k:real=5;  {Если k типизированная константа}


implementation
var st:string;          {Если st просто переменная типа string}

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage ('qqq')
end;

end.

=============================================

Вот тогда будет правильно.
Вот теперь все объявленные константы и переменные будут доступны для других
модулей и частей программы.
Но вы можете использовать объявления переменных и констант в разделе
реализации implementation, но они уже не будут доступны для других модулей
и частей программы - PRIVATE;
Пробуйте и все получится.
LEND
« Последнее редактирование: 28.03.07, 21:41:14 от LEND »
В мире временном, сущность которого - тлен,
Не сдавайся вещам несущественным в плен. © О.Х.

Anton R.

  • Гость
Re: Проблемы с Паскалем
« Ответ #44 : 08.03.07, 20:32:12 »
ОГРОМЕНОЕ СПАСИБО, LEND!!
с меня +сики

Оффлайн Faust

  • Ветеран
  • *****
  • Сообщений: 4302
  • Карма: 107
  • Пол: Мужской
  • Bla-bla-bla, mr. Freeman...
    • Просмотр профиля
Re: Проблемы с Паскалем
« Ответ #45 : 08.03.07, 21:04:38 »
ОГРОМЕНОЕ СПАСИБО, LEND!!
с меня +сики
А мне "сики"(с) вот за это мона? :)))))))

Anton R.

  • Гость
Re: Проблемы с Паскалем
« Ответ #46 : 08.03.07, 21:18:58 »
ОГРОМЕНОЕ СПАСИБО, LEND!!
с меня +сики
А мне "сики"(с) вот за это мона? :)))))))
Мона))

C. C. Catch

  • Гость
Re: Проблемы с Паскалем
« Ответ #47 : 11.03.07, 18:54:30 »
Ув. программеры. подскажите, плиз, как связать Button и Edit

Оффлайн Faust

  • Ветеран
  • *****
  • Сообщений: 4302
  • Карма: 107
  • Пол: Мужской
  • Bla-bla-bla, mr. Freeman...
    • Просмотр профиля
Re: Проблемы с Паскалем
« Ответ #48 : 11.03.07, 18:56:38 »
А какой результат в итоге должен быть? И что значит связать?

C. C. Catch

  • Гость
Re: Проблемы с Паскалем
« Ответ #49 : 11.03.07, 19:07:01 »
А какой результат в итоге должен быть? И что значит связать?
Ну, т. е. я ввожу что-нибудь в Edit, жму кнопку, и в результате какая-нибудь переменная получила значение.

Оффлайн Gendalf

  • Старожил
  • ****
  • Сообщений: 367
  • Карма: -45
  • Пол: Мужской
    • Просмотр профиля
Re: Проблемы с Паскалем
« Ответ #50 : 11.03.07, 20:33:17 »
Цитировать
Ну, т. е. я ввожу что-нибудь в Edit, жму кнопку, и в результате какая-нибудь переменная получила значение.
Edit1.text - здесь содержится информация, введённая в однострочном редакторе Edit1 типа String
s := Edit1.Text; (s : String)

если нужны цыфровые данные, то что-то вроде
 a := StrToInt(Edit1.Text); (a : Integer)
Что такое? Что не нравится??? А???=)

Оффлайн Egen

  • Старожил
  • ****
  • Сообщений: 287
  • Карма: 30
  • Пол: Мужской
    • Просмотр профиля
Re: Проблемы с Паскалем
« Ответ #51 : 11.03.07, 20:38:15 »
Ммм=) Молодой человек, воспользуйтесь любой доступной литературой по Дельфи. Иначе скоро совсем жутко станет =)
Нету у меня литературы по делфи, есть тока краткий справочник.
Ну а вам чо, трудно подсказать?
Если тебя еще интересует вопрос о доступной литературе, то у меня в DC++, в папке справочники огромная папка по Delphi. Там и справочники, и примеры с исходниками разными, дополнительные компоненты есть, и русифицированная контекстная справка есть, и учебники всякие. Бери не жалко пользуйся! Сам с этого начинал.
Дай мне боже все самому уметь, да не все самому делать.

C. C. Catch

  • Гость
Re: Проблемы с Паскалем
« Ответ #52 : 24.03.07, 14:26:36 »
Цитировать
Ну, т. е. я ввожу что-нибудь в Edit, жму кнопку, и в результате какая-нибудь переменная получила значение.
Edit1.text - здесь содержится информация, введённая в однострочном редакторе Edit1 типа String
s := Edit1.Text; (s : String)

если нужны цыфровые данные, то что-то вроде
 a := StrToInt(Edit1.Text); (a : Integer)
А это писать в обработчик кнопки или Edit?

Оффлайн RAleх

  • Постоялец
  • ***
  • Сообщений: 231
  • Карма: 402
  • Пол: Мужской
    • Просмотр профиля
Re: Проблемы с Паскалем
« Ответ #53 : 24.03.07, 14:33:54 »
Цитировать
Ну, т. е. я ввожу что-нибудь в Edit, жму кнопку, и в результате какая-нибудь переменная получила значение.
Edit1.text - здесь содержится информация, введённая в однострочном редакторе Edit1 типа String
s := Edit1.Text; (s : String)

если нужны цыфровые данные, то что-то вроде
 a := StrToInt(Edit1.Text); (a : Integer)
А это писать в обработчик кнопки или Edit?

Если надо, чтобы после нажатия кнопки "какая-нибудь переменная получила значение" то в обработчик кнопки

Anton R.

  • Гость
Re: Проблемы с Паскалем
« Ответ #54 : 24.03.07, 19:47:15 »
А как готовую прогу сохранить с расширением *.exe ?

Оффлайн RAleх

  • Постоялец
  • ***
  • Сообщений: 231
  • Карма: 402
  • Пол: Мужской
    • Просмотр профиля
Re: Проблемы с Паскалем
« Ответ #55 : 24.03.07, 22:08:48 »
А как готовую прогу сохранить с расширением *.exe ?

Сохрани проект
Потом при компиляции .exe создастся автоматически(в папке, где находится проект)

Оффлайн LEND

  • Пользователь
  • **
  • Сообщений: 95
  • Карма: 155
  • Истина как всегда где-то рядом
    • Просмотр профиля
Re: Проблемы с Паскалем
« Ответ #56 : 25.03.07, 00:24:52 »
Вот нет времени поставить DELPHI - лень.
<<А это писать в обработчик кнопки или Edit?>>
Пишу с головы:
Возьмем предыдущий модуль.
I вариант
Если ВЫ хотите установить переменные s и a в самой процедуре, то они и будут работать только в самой процедуре т.е. участвовать при инициализации самой процедуры. При этом данные они будут брать из объекта окна редактирования Edit c name Edit1

procedure TForm1.Button1Click(Sender: TObject);
var
 s:string;
 a:integer;
begin
s : = Edit1.Text;
a : = StrToInt(Edit1.Text);
{Здесь ВЫ можете проделывать с ними разные операции}
  ShowMessage(s);
(*ShowMessage ('qqq')*)
end;


II вариант
Если переменные s и a установлены в разделе interface, то они могут участвовать и за пределами этой процедуры и других процедур этого модуля(формы), а также в других идущих за ним по порядку (модулях формах). Они также будут брать данные из объекта окна редактирования Edit c name Edit1
Тогда их необязательно ставить в тело самой процедуры.

procedure TForm1.Button1Click(Sender: TObject);
begin
s : = Edit1.Text;
a : = StrToInt(Edit1.Text);
{Здесь ВЫ можете проделывать с ними разные операции}
ShowMessage(s);
(*ShowMessage ('qqq')*)
end;


III вариант
Если s и a установлены в разделе implementation, то они могут работать во всех указанных процедурах только этого модуля и формы:
Допустим в форме есть еще объект кнопка - Button2Click

type
  TForm1 = class(TForm)
    Button2: TButton;
    procedure Button2Click(Sender: TObject);


{----------------------------------------------}
Мы хотим с помощью этой кнопки вывести СТРОКУ st, тогда в разделе implementation устанавливаем
var
 s:string;
 a:integer;

А процедуры будут выглядеть так :

procedure TForm1.Button1Click(Sender: TObject);
begin
s : = Edit1.Text;
a : = StrToInt(Edit1.Text);
 {Здесь ВЫ можете проделывать с ними разные операции}
 ShowMessage(s);
 (*ShowMessage ('qqq')*)
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 st:string;
begin
  st=s;
 ShowMessage(st);
 (*ShowMessage ('qqq')*)
end;


Просто надо уяснить куда эти переменые пойдут при внесении данных в окно редактирования Edit

Насчет
<А как готовую прогу сохранить с расширением *.exe ?>
Ralex правильно указал
<Сохрани проект
 Потом при компиляции .exe создастся автоматически(в папке, где находится проект)>

С уважением
LEND
« Последнее редактирование: 28.03.07, 21:42:09 от LEND »
В мире временном, сущность которого - тлен,
Не сдавайся вещам несущественным в плен. © О.Х.

Anton R.

  • Гость
Re: Проблемы с Паскалем
« Ответ #57 : 26.03.07, 18:08:49 »
Подскажите плиз, почему не запускается прога??

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

const

P = 0.08;
Discount = 0.16; 

var
M :=integer;   
A :=integer;
Sum := real;

begin

M := (Edit1.Text) ;
B := (Edit2.Text) ;
Sum :=M*P

if (B=6) or (B=7)
then Sum = Sum * Discount



label3.caption:='К оплате '

+ FloatToStr(Sum) + 'руб.';
end;


end.

disdis

  • Гость
Re: Проблемы с Паскалем
« Ответ #58 : 26.03.07, 18:17:33 »
Anton R., читать код не пробовал сам-то?
тут косяк на косяке  :o
юзаешь необъявленные переменные, объявляешь через присваивание (":=" это присваивание, объявление ":"), присваиваешь целочисленным переменным строковые значения.. молчу про мелочь в виде опущенной ; для закрытия строки.

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

************
не вдаваясь в смысл тока подправил синтаксис.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

const

P = 0.08;
Discount = 0.16; 

var
M :  integer;
A : integer;
Sum : real;

begin
M := StrToInt(Edit1.Text) ;
A := StrToInt(Edit2.Text) ;
Sum :=M*P;

if (A=6) or (A=7)
then Sum := Sum * Discount;

label1.caption:='к оплате ' + FloatToStr(Sum) + 'руб.';
end;
end.
« Последнее редактирование: 26.03.07, 18:26:19 от disdis »

Anton R.

  • Гость
Re: Проблемы с Паскалем
« Ответ #59 : 08.08.07, 14:00:55 »
Подскажите, плиз, как в Delphi можно присобачить на форму свою кнопку, нарисованную в фотошопе.

Alexion

  • Гость
Re: Проблемы с Паскалем
« Ответ #60 : 08.08.07, 14:02:26 »
Подскажите, плиз, как в Delphi можно присобачить на форму свою кнопку, нарисованную в фотошопе.
Помести ее на форму как картинку, компонент image че то там...