Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Delphi 7: маленькая ошибка, StringGrid и массив  (Прочитано 8578 раз)
0 Пользователей и 1 Гость смотрят эту тему.
СвоЕобразнаЯ
Участник

ru
Offline Offline

« : 04-03-2010 11:10 » 

Здравствуйте.
Ниже приведен текст программы поиска в массиве целых чисел. Перебор элементов массива осуществляет оператором 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.
Записан
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #1 : 04-03-2010 11:36 » 

StrToIntDef
Записан
baldr
Команда клуба

ru
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #2 : 04-03-2010 11:40 » 

Мне кажется, что в строке 'a:=StrToInt(StringGrid1.Cells[J,1]);' неправильный итератор стоит - переменная J у тебя нигде не инициализирована.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
СвоЕобразнаЯ
Участник

ru
Offline Offline

« Ответ #3 : 04-03-2010 11:42 » 

zubr,
Всё заработало:) Где на этом форуме кнопочка "Спасибо"? Ага
Записан
СвоЕобразнаЯ
Участник

ru
Offline Offline

« Ответ #4 : 04-03-2010 11:44 » 

baldr, тогда бы наверное ошибка выдалась в момент компиляции, а не в окошке с красным крестиком, хотя утверждать не берусь, я дилетант:)
Записан
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #5 : 04-03-2010 11:46 » 

Первокурсница, хорошо, что заработало, но ты проверь правильно ли работает. baldr, правильно заметил - не понятно где у тебя j инициализируется.
Записан
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #6 : 04-03-2010 11:48 » 

Компилятор как раз проглотит - ему пофигу, инициализирована переменная или нет.
Записан
СвоЕобразнаЯ
Участник

ru
Offline Offline

« Ответ #7 : 04-03-2010 11:51 » 

Да, действительно... работает если только вводится 1,2,3 и так далее сколько элементов массива, а если ввожу 45,56,85 то выдаёт "заданный элемент не найден."
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines