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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2010, 21:02   #1
Kurai
Пользователь
 
Регистрация: 16.03.2010
Сообщений: 27
Стрелка предусмотреть исключительные ситуации в с массивами

Задание для Delphi
Изначально было задание "Для матрицы А N*M, получить массив B, присвоив его k-му элементу значение 1, если k-я строка матрицы А симметрична, и значение 0 в противном"

Текст программы я написала, и все работает

Код:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Grids, StdCtrls;
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  const
  Nmax=10;                     // Максимальный размер массива
Type
Mas2 = array[1..Nmax,1..Nmax] of extended;         // Объявление типа
                                             //двухмерного массива размерностью Nmax
Mas1 = array[1..Nmax] of extended;               // Объявление типа
                                           //одномерного массива размерностью Nmax
var
 Form1: TForm1;
 A:Mas2;                        // Объявление двухмерного массива
 B:Mas1;                        // Объявление одномерных массивов
 N, M, i, j : integer;

 implementation
 {$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);  // Изменить размер таблицы                                                                 // таблицы
begin
n:=strtoint(edit1.Text);
m:=strtoint(edit2.text);
{Задание числа строк и столбцов в таблицах}
stringgrid1.ColCount:=n+1;
stringgrid1.RowCount:=m+1;
stringgrid2.rowcount:=m+1;
{Заполнение верхнего и левого столбцов поясняющими подписями}
for i:=1 to m do stringgrid1.cells[0,i]:='i='+inttostr(i);
for j:=1 to n do stringgrid1.cells[j,0]:='j='+inttostr(j);
   end;

procedure TForm1.Button2Click(Sender: TObject);
var k:extended;
begin
{Заполнение массива А элементами из таблицы StringGrid1}
for i:=1 to m do
for j:=1 to n do
A[i,j]:=strtofloat(stringgrid1.cells[j,i]);
{Выясняем, какое число ставится в массив B}
for i:=1 to m do begin
k := 1;
for j:=1 to n div 2 do begin
A[i,j]:=strtofloat(stringgrid1.cells[j,i]);
if A[i,j]<>A[i,n-j+1] then begin
k:=0;
break;
end;
end;
{Вывод результата в таблицу StringGrid2}
stringgrid2.cells[0,i]:=floattostrF(k,fffixed,6,0);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
n:=3;        // Число строк в массиве
edit1.Text:=floattostr(n);
m:=3;        // Число столбцов в массиве
edit2.text:=floattostr(m);
{Задание числа строк и столбцов в таблицах}
stringgrid1.ColCount:=n+1;
stringgrid1.RowCount:=m+1;
stringgrid2.Rowcount:=m+1;
{Ввод в левую верхнюю ячейку таблицы названия массива}
stringgrid1.Cells[0,0]:='массив A:';
stringgrid2.cells[0,0]:='массив B:';
{Заполнение верхнего и левого столбцов поясняющими подписями}
for i:=1 to m do
begin
stringgrid1.cells[0,i]:='i='+inttostr(i);
end;
for j:=1 to n do
begin
stringgrid1.Cells[j,0]:='j='+inttostr(j);
end;
end;
end.
Нужно предусмотреть исключит.ситуации, которые могут возникнуть.
Я хотела использовать минимум 2:
1. я в тексте указала, что макс.размерность 10 => можно ввсети ошибку для массива А, если размерность ввести больше 10

пробовала делать так
try
{Заполнение массива А элементами из таблицы StringGrid1}
for i:=1 to N do
for j:=1 to M do
A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
except
on ERangeError do begin ShowMessage('Выход за пределы массива. Уменьшите размер массива'); Exit; end;
on EConvertError do begin ShowMessage('В ячейке отсутствует значение, либо число введено не правильно'); Exit; end;
else begin ShowMessage('Возникла неизвестная исключительная ситуация!'); Exit; end;
end;

но он мне в итоге неправильно В вычисляет...

2. хотела еще какую-нибудь ошибку с плав.точкой сделать... но это приводило к тому, что вообще программа не запускалась

______________________

подскажите, пожалуйста, как мне эти исключит.ситкации обработать?

Последний раз редактировалось Kurai; 16.03.2010 в 21:28.
Kurai вне форума Ответить с цитированием
Старый 17.03.2010, 08:26   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Код:
n:=strtoint(edit1.Text);
m:=strtoint(edit2.text);
Вот здесь можно предусмотреть исключительную ситуацию. Что если пользователь ввел не число (например опечатка, хотел нуль, а нажал -, или хотел 1, а нажал ё)? Попробуйте сами так сделать и поймете о чем идет речь.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исключительные ситуации (Delphi) VadEr Помощь студентам 6 01.06.2009 13:46
Исключительные ситуации BulbaZavr Общие вопросы C/C++ 3 29.12.2008 23:05
Исключительные ситуации FIIR БД в Delphi 5 19.06.2008 16:30
Исключительные ситуации FIIR Помощь студентам 1 19.06.2008 13:50
Исключительные ситуации Mickle Общие вопросы Delphi 6 07.10.2007 21:03