Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.058 c
9-1187772000
homm
2007-08-22 12:40
2010.08.27
Полноэкранный антиалайсинг.


2-1270489278
Dr. Genius
2010-04-05 21:41
2010.08.27
Проблема с компонентом мониторинга ShellNotify


15-1273264199
Юрий
2010-05-08 00:29
2010.08.27
С днем рождения ! 8 мая 2010 суббота


4-1231600539
Nucer
2009-01-10 18:15
2010.08.27
LSP (Layered Service Provider)


15-1266870707
Pavia
2010-02-22 23:31
2010.08.27
Поисковые алгоритмы.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский