![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Здравствуйте.
Ниже приведен текст программы поиска в массиве целых чисел. Перебор элементов массива осуществляет оператором 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. |
|
#2
|
||||
|
||||
|
Ну так заполняйте stringgrid правильно! Какой вы вообще ответ ожидаете услышать? На какой строке хоть ошибка вылетает?
|
|
#3
|
||||
|
||||
|
Код:
procedure TForm1.GenMas(size: integer);
var i: integer;
begin
Randomize;
StringGrid1.ColCount:=size;
For i:=0 to size-1 do
StringGrid1.Cells[i,0]:=IntToStr(Random(50)+1);
end;
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; b: boolean;
begin
b:=false;
GenMas(StrToInt(Edit1.Text));
For i:=0 to StringGrid1.ColCount-1 do
if StringGrid1.Cells[i,0]=Edit2.Text then begin
b:=true; break;
end;
if b then ShowMessage('Искомый элемент найден под номером '+IntToStr(i+1))
else ShowMessage('Искомый элемент не найден');
end;Вот это попробуй, делает то что тебе надо Последний раз редактировалось W1ndow, 04.03.2010 в 15:01. |
|
#4
|
||||
|
||||
|
a[i]:=StrToIntDef(StringGrid1.Cells[J,1],i);
сделала так, ошибка исчезла. Но программа работает правильно только если вводить 1,2,3,4,5 и так далее сколько элементов в массиве. А если пишу 45,12,96,102 то выдаёт "заданный элемент не найден" |
|
#5
|
||||
|
||||
|
Попробуй так)))
Цитата:
|
|
#6
|
||||
|
||||
|
Вот полный код...
Цитата:
|