|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
Репутацию повысила на сколько смогла ещё раз ОГРОМНОЕ спасибо
|