Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.073 c