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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2019, 20:46   #1
EgorEgor12
Новичок
Джуниор
 
Регистрация: 03.06.2019
Сообщений: 1
Печаль Проблемы с процедурой VAL

я выполнил задание "разработать проект для ввода двух массивов и для каждого умножить чётные элементы целочисленного массива на задаваемое пользователем число. Использовать динамические массивы и подпрограмму с открытым массивом для выполнения типового действия с массивами."
вот код:
Код:
unit massivLABA;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo2: TMemo;Button1: TButton;Label1: TLabel;Edit1: TEdit;Label2: TLabel;Label3: TLabel;Label4: TLabel;Label5: TLabel;Label6: TLabel;Label7: TLabel;Label8: TLabel;Label9: TLabel;Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses control;
{$R *.dfm}
procedure dodo(B:array of integer;tt:integer; var A: array of integer);
var q:byte;
begin
for q:=0 to high(B) do
if (B[q] mod 2=0)
then
A[q]:=B[q]*tt
else
A[q]:=B[q];
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
check2(Key,Edit1.Text);
end;
procedure TForm1.Button1Click(Sender: TObject);
var x,xx,x2,xx2:array of integer;
 k,V,err:integer;
  n,nn:byte;
   i:byte;
begin
Val(memo1.Lines.Text,V,err);
if err <> 0 then begin showmessage('синтаксическая ошибка');exit;end;
if check(edit1.Text)
then
begin
showmessage('нарушение синтаксиса одного из введенных вами значений');
exit;
end;
k:=strtoint(edit1.Text);
n:=memo1.lines.count;
 nn:=memo2.lines.count;
SetLength(x2,n);
SetLength(xx2,nn);
SetLength(xx,nn);
SetLength(x,n);
for i:=0 to high(x) do
begin x[i]:=StrToint(Memo1.Lines[i]);
dodo(x,k,x2);
label8.caption:=Label8.Caption+#13+FloatToStr(x2[i]);
end;
for i:=0 to high(xx) do
begin
xx[i]:=StrToint(Memo2.Lines[i]);
dodo(xx,k,xx2);
label9.caption:=Label9.Caption+#13+FloatToStr(xx2[i]);
end;
Setlength(x,0);
SetLength(x2,0);
SetLength(xx2,0);
SetLength(xx,0);
end;
end.
для проверки синтаксиса в едит1 у меня ещё отдельный юнит есть, но не суть.
Суть в том, что Вал выдает ошибку всегда, когда я нажимаю на кнопку, что бы ни было введено в мемы.... помогите... все нервы исчерпал... ничего не могу поделать с этим валом
EgorEgor12 вне форума Ответить с цитированием
Старый 03.06.2019, 21:15   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от EgorEgor12 Посмотреть сообщение
Val(memo1.Lines.Text,V,err);
так нельзя. Там же в Memo1 в общем случае куча строк может быть.
Плюс возможны пробелы, табуляция и прочая чепуха.
И зачем Вам Memo, если нужно задать ОДНО число? Вам Edit чем-то не подходит?

ну, если в Memo реально одно число и по другому никак нельзя, то попробуйте так:
Код:
var x,xx,x2,xx2:array of integer;
 k,V,err:integer;
  n,nn:byte;
   i:byte;
  s : string;
begin
if memo1.Lines.Count<1 then  
    begin showmessage('В Memo ничего нет. Ошибка!');exit;end;
s := Trim(memo1.Lines[0]);
if s='' then  
    begin showmessage('В Memo нет нужной информации/числа. Ошибка!');exit;end;
Val(s,V,err);
if err <> 0 then begin showmessage('синтаксическая ошибка!'#13' в строке '+s+' в позиции '+IntToStr(err)+' не число!');exit;end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.06.2019, 03:12   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от EgorEgor12 Посмотреть сообщение
Суть в том, что Вал выдает ошибку всегда
Val это отличная процедура реализованная отличными программистами.
Вот только она придумана и написана давно. Когда понятие "свойство" ещё не было придумано. Её параметрами могут быть только простые переменные, но никак не свойства типа Text.
northener вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что не так с процедурой? Aleksandraaa SQL, базы данных 4 29.05.2013 13:08
Проблемы с процедурой Nigadyai Общие вопросы Delphi 11 05.06.2010 14:15
проблемы с рекурсивной процедурой Xsires Паскаль, Turbo Pascal, PascalABC.NET 0 03.06.2010 00:40
Подскажите с процедурой KARUSHEV Помощь студентам 6 04.10.2009 20:37