|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
|  | 
|  | Опции темы | Поиск в этой теме | Опции просмотра | 
| 
			 
			#1  
			
			
			
			
		 | ||||
| 
 | ||||
|  Delphi 7: маленькая ошибка, StringGrid и массив Здравствуйте. Ниже приведен текст программы поиска в массиве целых чисел. Перебор элементов массива осуществляет оператором 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  
			
			
			
			
		 | ||||
| 
 | ||||
|   Вот полный код... Цитата: 
 | 
| 
			 
			#7  
			
			
			
			
		 | ||||
| 
 | ||||
|   Спасибо... но к сожалению это не помогло, всё та же ошибка. | 
| 
			 
			#8  
			
			
			
			
		 | ||||
| 
 | ||||
|   Не может быть...этот код прогнал у себя...все работает... Что и куда ты вводишь??? Edit1 - это количество столбцов и размер массива Edit2 - это искомое число По коду так Вводить надо во 2-ю строку StringGrid, начиная со 2-ой ячейки... т.к. нумерация начинается с нуля, то адрес 2-ой ячейки 2-ой строки будет 1,1. Еще проще, если ты дашь весь исхоник все исправлю))) Первокурсница ))) Вот мой вариант... | 
| 
			 
			#9  
			
			
			
			
		 | ||||
| 
 | ||||
|   Препод велел шапку из таблицы удалить, потому и не работало   | 
| 
			 
			#10  
			
			
			
			
		 | ||||
| 
 | ||||
|   Теперь работает??? Ну и хорошо!!! | 
| 
			 
			#11  
			
			
			
			
		 | ||||
| 
 | ||||
|   Как тебя отблагодарить?  Кнопка Спасибо или смс обычно на форумах бывает... | 
| 
			 
			#12  
			
			
			
			
		 | ||||
| 
 | ||||
|   Пожалуйста, обращайся))) | 
| 
			 
			#13  
			
			
			
			
		 | ||||
| 
 | ||||
|   Репутацию повысила на сколько смогла  ещё раз ОГРОМНОЕ спасибо  |