Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Delphi 7: маленькая ошибка, StringGrid и массив   Найти похожие ветки 

 
Первокурсница ©   (2010-03-04 14:13) [0]

Здравствуйте.
Ниже приведен текст программы поиска в массиве целых чисел. Перебор элементов массива осуществляет оператором repeat, в теле которой оператор if сравнивает текущий элемент массива с заданным и присваивает переменной found значение true, если текущий элемент и заданный равны. Цикл завершается, если в массиве обнаружен искомый элемент, (found=true), или если проверены все элементы массива. По завершении цикла, проверив значение переменной found, можно определить, успешен поиск или нет.
Проблема возникла в том, что кажется я неправильно заполняю массив значениями которые ввожу в StringGrid. Возникает окно с ошибкой:
with message """is not a valid integer value". Хотелось бы от этой ошибки избавиться.

unit Unit11Filin;

interface

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

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

var
 Form1: TForm1;
 I,J: integer;
implementation

{$R *.dfm}
{Function GetSubStr(st:string; n: integer) :string;
    var
p, i:integer;
begin
for i:=1 to n-1 do
begin
p:=pos(" ",st);
st:=copy(st,p+1,Length(st)-p);
//если в начале оставшейся части строки
//есть пробелы, то они удаляются
while (pos(" ",st)=1) and (length(st)>0) do
        delete(st,1,1);
end;
p:=pos(" ",st);
if p <> 0
       then result:=copy(st,1,p-1) else result:=st;
end;}
procedure TForm1.Edit1Change(Sender: TObject);
begin
StringGrid1.ColCount:=StrToInt(Edit1.Text);
end;
procedure TForm1.Button1Click(Sender: TObject);
const
SIZE=20;
var
a: array[1..SIZE] of integer;
n: integer;
found: boolean;
i,m: integer;
begin
{ввод числа элементов массива n<20}
n:=StrToInt(Edit1.text);
{ввод массива }
for i:=1 to n do
a[i]:=StrToInt(StringGrid1.Cells[J,1]);
{ввод искомого элемента массива}
m:=StrToInt(Edit2.text);
{процедура поиска в массиве}
found:=false;
i:=1;
repeat
if a[i]=m then found:=true
else i:=i+1;
           until (i>n)or(found = true);
if found=true
then ShowMessage("Совпадение с элементом номер "
+IntToStr(i)+#13+"Поиск успешно завершен")
else ShowMessage("Заданный элемент не найден!");
end;
end.


 
123   (2010-03-04 14:23) [1]


> message """is not a valid integer value

генирится оператором StrToInt
надо поставить там брейкпойнт и смотреть почему туда приходит not a valid integer value


 
Ega23 ©   (2010-03-04 14:23) [2]

a[i]:=StrToInt(StringGrid1.Cells[J,1]);

var
 v, Code : Integer;
begin
  .......

 Val(StringGrid1.Cells[J,1], v, Code);
 if (Code > 0) then
 begin
   ShowMessage("Фигня, а не число");
   Exit;
 end;
 a[i] := StrToInt(v);
 .....
 


 
Первокурсница ©   (2010-03-04 14:28) [3]

Ega23, спасибо большое, сейчас попробую


 
Игорь Шевченко ©   (2010-03-04 14:38) [4]

Ega23 ©   (04.03.10 14:23) [2]


>  Val


TryStrToInt


 
Игорь Шевченко ©   (2010-03-04 14:38) [5]

Автор, форматируй код.


 
Ega23 ©   (2010-03-04 14:45) [6]


> Игорь Шевченко ©   (04.03.10 14:38) [4]
>
> TryStrToInt



function TryStrToInt(const S: string; out Value: Integer): Boolean;
var
 E: Integer;
begin
 Val(S, Value, E);
 Result := E = 0;
end;


 
Первокурсница ©   (2010-03-04 14:47) [7]

Ega23, помогло! Ты гений!


 
Игорь Шевченко ©   (2010-03-04 14:51) [8]

Ega23 ©   (04.03.10 14:45) [6]

И че ?


 
Ega23 ©   (2010-03-04 14:52) [9]


> И че ?


Те же яйца, только сбоку. Предпочитаю изначальный Val. Ну а дальше - кому как нравится.


 
Игорь Шевченко ©   (2010-03-04 14:56) [10]

Ega23 ©   (04.03.10 14:52) [9]

Ну если пальцы из нержавеющей стали, тогда конечно, отчего бы не пообъявлять лишних мусорных переменных :)


 
KilkennyCat ©   (2010-03-05 02:00) [11]


> Игорь Шевченко ©   (04.03.10 14:56) [10]

не спорь с гением
:)


 
Ega23 ©   (2010-03-05 11:17) [12]


> Ну если пальцы из нержавеющей стали, тогда конечно, отчего
> бы не пообъявлять лишних мусорных переменных :)


В пятёрке этого не было, а поскольку на D7 перещёл всего лет 5 назад, то до этого выработалась устойчивая привычка. Я уже даже не задумываюсь.


> не спорь с гением


+1    :)


 
Игорь Шевченко ©   (2010-03-05 11:52) [13]

Ega23 ©   (05.03.10 11:17) [12]


> В пятёрке этого не было, а поскольку на D7 перещёл всего
> лет 5 назад, то до этого выработалась устойчивая привычка.
>  Я уже даже не задумываюсь.


Прекрасно понимаю. Вопрос только - хорошо это или плохо.

Я до сих пор иногда пользуюсь самописным HSObjectList, наследник класса TList, который подчищает за собой объекты, написанный еще до TObjectList в Delphi.

Набор возможностей языка от версии к версии обычно расширяется, более того, обычно в лучшую сторону. Набор функций в стандартных юнитах - тоже. Борланды, они конечно способствуют частично переходу, ставя модификатор deprecated,но не всегда и не везде :)


 
Ega23 ©   (2010-03-05 12:37) [14]


> Прекрасно понимаю. Вопрос только - хорошо это или плохо.


Ну вот в данном очень конкретном случае с TryStrToInt лично я особого выигрыша или удобства не вижу.



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.053 c
15-1274432547
boriskb
2010-05-21 13:02
2010.08.27
Можно не всё сразу а выборочно?


2-1274633322
Nathan
2010-05-23 20:48
2010.08.27
Место положение .exe


15-1268843922
Aston
2010-03-17 19:38
2010.08.27
Подскажите хорошую книгу по PHP


2-1271443216
fiascko
2010-04-16 22:40
2010.08.27
invalid floating point operation


15-1259160570
Игорь Шевченко
2009-11-25 17:49
2010.08.27
Желающие поговорить о лженауке - милости прошу