Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2012, 10:25   #1
AnnaCripto
 
Регистрация: 29.04.2012
Сообщений: 7
По умолчанию обработчик исключительных ситуаций

Помогите пожалуйста создать собственный обработчик исключительной ситуации.При вводе в матрицу буквы вместо цифры должна автоматически создаваться дополнительная страница tabsheet с сообщением об ошибке.
Код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids, ComCtrls;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;

    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

Type
  Matrix=Array[0..9, 0..9] Of Real;
  Vektor=Array[0..9] Of Real;
  
var
  Form1: TForm1;
  F: Matrix;
  B: Vektor;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  i, j, N: Byte;
begin
  N:=StringGrid1.ColCount-1;
  Randomize;

  For i:=0 To N Do
    For j:=0 To N Do
      Begin
        F[i, j]:=Random(1000)-500+Random;
        StringGrid1.Cells[i, j]:=FloatToStr(F[i, j]);
      End;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
Var
  Sum: Real;
  i, j, N: Byte;
begin
  N:=StringGrid1.ColCount-1;

  For j:=1 To N Do
    Begin
      Sum:=0;
      For i:=0 To j-1 Do
        If (F[i, j]>0) Then Sum:=Sum+F[i, j];

      If (Sum=0) Then
        B[j-1]:=-1
      Else
        B[j-1]:=-Sum;

      StringGrid2.Cells[j-1, 0]:=FloatToStr(B[j-1]);
    End;

end;

end.
Здесь из матрицы надо получить вектор.Не могу понять,какой же класс исключительной ситуации использовать,пыталась EConvertError,но опять-таки ничего не вышло.
AnnaCripto вне форума Ответить с цитированием
Старый 01.05.2012, 10:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
При вводе в матрицу буквы вместо цифры
Моя не понимать: F[i, j]:=Random(1000)-500+Random; Это никогда не даст букву.
Букву даст только если что-то человек нашлепает на клавиатуре, и обрабатывать это нужно по хорошему так:
Код:
if not TryStrToFload(StringGrid1.Cells[i, j],dbl) then begin
 ShowMessage('Ошибка')
end else dbl содержит сконвертированное число
Где dbl - переменка типа double
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.05.2012, 10:55   #3
AnnaCripto
 
Регистрация: 29.04.2012
Сообщений: 7
По умолчанию

спасибо.разумеется ваш сарказм помог мне.
AnnaCripto вне форума Ответить с цитированием
Старый 01.05.2012, 11:18   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это не сарказм а непонимание. Ты говоришь о ошибке при вводе, однако такого рода ошибку твой код допустить физиологически не сможет. А ввод пользователя у тебя нигде не описан - кто знает как и откуда ты вводишь данные. На каждую разновидность ввода свои методы обработки.
В том числе не всегда рекомендуется генерировать именно исключение: представь что тебе нужно ввести автоматом из файла, набранного человеком, около триллиона значений. По чистой случайности эти значения скажем содержат вместо точки запятую, тогда код вроде
Код:
try
 ...:=StrToFloat(x); Где x - очередное значение из файла
except
 on e:Exception do ShowMessage('Неверное число. '+e.message);
end;
Заставит пользователя триллион раз получать окно сообщения о неверности, и столько же сидеть и клацать клавиатуру. Поверь мне я знаю о чем говорю - у меня на работе стоит такая программа, которую только из диспетчера снимать приходится если обработка данных падает на фейл.

Поэтому тебе и нужно уточнить - какого рода ввод данных должен быть в программе, какова их структура (даже в операционке есть настройка вида вещественных в локалях, где указывается разделитель, знак отрицания и т.д.), а ты попусту обижаешся.

Опять таки: Ты используешь грид. В него можно либо напрямую ввести значение в ячейку, либо через какую-то форму... Где проверка должна быть?
Подумай хорошенько прежде чем злиться на весь мир.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка исключительных ситуаций С++ Multiman Помощь студентам 2 06.04.2012 19:39
Обработка исключительных ситуаций Anubys Общие вопросы C/C++ 2 12.03.2012 12:09
Обработка исключительных ситуаций Anubys C++ Builder 3 11.03.2012 20:55
Робота исключительных ситуаций Rik_Igle Помощь студентам 0 08.12.2011 15:47
Обработка исключительных ситуаций Claster Общие вопросы по Java, Java SE, Kotlin 2 14.10.2009 14:24