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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2009, 19:52   #1
Kawun
Пользователь
 
Регистрация: 26.10.2008
Сообщений: 32
По умолчанию Проблема с простейшим условием

Добрый вечер. Есть небольшая проблема, задача уже написана, осталось прикрутить только одно условие.
Текст программы:

Код:
procedure TForm1.Button1Click(Sender: TObject);
Const
NMAX = 6;
Type
TMas = Array [1..NMAX] of Real;
Var
N: Integer;
B: Real;
P: Real;
C: Tmas;
A: Array [1..NMAX, 1..NMAX] of Real;
S: Real;
K: Integer;
I: Integer;
X: TMas;
begin
N:=StrToInt (EditN.Text);
If (N<1) Or (NMAX<N)
	Then
		ShowMessage('Ошибка!')
	Else
B:=StrToFloat (EditB.Text);
P:=StrToFloat (EditP.Text);
	For I:=1 To N Do
		For K:=1 To N Do
			Begin
				A[I,K]:=StrToFloat(StringGridA.cells [K-1, I-1]);
				C[I]:=StrToFloat(StringGridC.cells [0, I-1]);
			End;
		S:=0;
			For I:=1 To N Do
			S:= S + A [I, I];
				For I:=1 To N Do
					Begin
					X[I]:=1;
					For K:=1 To N Do
					X[I]:=(X[I])*(A[K,I]+C[K])/(B*(Sqr(K)));
					X[I]:=S*P*(X[I]);
					End;
					For I:=1 To N Do
					StringGridX.Cells[0, I-1]:=FloatTOStr(X[I]);
				end;
				end.
Как видно есть условие в тексте программы
If (N<1) Or (NMAX<N)

И к этому условию я еще добавил вот что:
If (N<1) Or (NMAX<N) Or (B=0)
Это я сделал для того, чтобы не было ошибки в этом месте:
X[I]:=(X[I])*(A[K,I]+C[K])/(B*(Sqr(K))); // (На ноль делить нельзя).

Программа компилируется, ввожу все данные и специально ввожу в B ноль. Жму на кнопочку чтобы все посчитало, а делфи вылетает со следующей ошибкой:
Project Project.exe raised exception class EZeroDivide with message 'Floating point division by zero'.

Уважаемые, прикрутите мне, пожалуйста, условие что если B=0 выводилось ShowMessage('Ошибка!').
Очень сильно жду помощи, завтра надо отчитаться по задачке =(
Спасибо!
Kawun вне форума Ответить с цитированием
Старый 11.03.2009, 20:15   #2
[Smarik]
Веб-разработчик
Форумчанин
 
Аватар для [Smarik]
 
Регистрация: 16.01.2008
Сообщений: 451
По умолчанию

делфи всегда будет выкидывать при подобных ошибках, хоть try except допишите, попробуйте запустить exe файл программы, вот там должно все нормально обработать без ошибок винды
Я ваш новый друг, смиритесь!
[Smarik] вне форума Ответить с цитированием
Старый 11.03.2009, 20:41   #3
Kawun
Пользователь
 
Регистрация: 26.10.2008
Сообщений: 32
По умолчанию

запустил из exe - результат тот же при вводе нуля.

Причем эта часть условия If (N<1) Or (NMAX<N) работает как нужно. А вот на ноль - нет =(
Kawun вне форума Ответить с цитированием
Старый 11.03.2009, 21:51   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
If (N<1) Or (NMAX<N)
	Then
		ShowMessage('Ошибка!')
	Else
B:=StrToFloat (EditB.Text);
судя по всему значение B определяется после проверки
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 11.03.2009, 22:24   #5
Kawun
Пользователь
 
Регистрация: 26.10.2008
Сообщений: 32
По умолчанию

Спасибо, исправил. Переставил строчку с вводом B перед условием =)
Код:
begin
B:=StrToFloat (EditB.Text);
N:=StrToInt (EditN.Text);
If (N<1) Or (NMAX<N)
	Then
		ShowMessage('Ошибка!')
	Else
P:=StrToFloat (EditP.Text);
Теперь если B присвоить 0 вылетает сообщение 'Ошибка!'. Но работает не совсем правильно.
Вылетает 'Ошибка!', жму ок и следующее сообщение об ошибке:
Floating point division by zero

Видимо я как-то криво исправил =/
Kawun вне форума Ответить с цитированием
Старый 12.03.2009, 09:23   #6
rasmus_rasmus_87
Заблокирован
 
Регистрация: 19.02.2009
Сообщений: 11
По умолчанию

ПОСЛЕ ELSE BEGIN НУЖНО ДОПИСАТЬ ТАК КАК ELSE В ЭТОМ СЛУЧАЕ ТОК ДЛЯ СЛЕДУЮЩЕГО ОПЕРАТОРА РАБОТАЕТ)))
rasmus_rasmus_87 вне форума Ответить с цитированием
Старый 12.03.2009, 09:24   #7
rasmus_rasmus_87
Заблокирован
 
Регистрация: 19.02.2009
Сообщений: 11
По умолчанию

Else begin

P:=StrToFloat (EditP.Text);
For I:=1 To N Do
For K:=1 To N Do
Begin
A[I,K]:=StrToFloat(StringGridA.cells [K-1, I-1]);
C[i]:=StrToFloat(StringGridC.cells [0, I-1]);
End;
S:=0;
For I:=1 To N Do
S:= S + A [I, I];
For I:=1 To N Do
Begin
X[i]:=1;
For K:=1 To N Do
X[i]:=(X[i])*(A[K,I]+C[K])/(B*(Sqr(K)));
X[i]:=S*P*(X[i]);
End;
For I:=1 To N Do
StringGridX.Cells[0, I-1]:=FloatTOStr(X[i]);
end;
end;
rasmus_rasmus_87 вне форума Ответить с цитированием
Старый 13.03.2009, 18:23   #8
Kawun
Пользователь
 
Регистрация: 26.10.2008
Сообщений: 32
По умолчанию

Всем спасибо, правда я не дождался последнего примера, сделал сам по другому, в общем вот так работает вроде))):
Код:
procedure TForm1.Button1Click(Sender: TObject);
Const
NMAX = 6;
Type
TMas = Array [1..NMAX] of Real;
Var
N: Integer;
B: Real;
P: Real;
C: Tmas;
A: Array [1..NMAX, 1..NMAX] of Real;
S: Real;
K: Integer;
I: Integer;
X: TMas;
begin
N:=StrToInt (EditN.Text);
P:=StrToFloat (EditP.Text);
B:=StrToFloat (EditB.Text);
If (N>1) and (NMAX>N) and (B<>0)
	Then
  begin
	For I:=1 To N Do
		For K:=1 To N Do
			Begin
				A[I,K]:=StrToFloat(StringGridA.cells [K-1, I-1]);
				C[I]:=StrToFloat(StringGridC.cells [0, I-1]);
			End;
		S:=0;
			For I:=1 To N Do
			S:= S + A [I, I];
				For I:=1 To N Do
					Begin
					X[I]:=1;
					For K:=1 To N Do
					X[I]:=(X[I])*(A[K,I]+C[K])/(B*(Sqr(K)));
					X[I]:=S*P*(X[I]);
					End;
					For I:=1 To N Do
					StringGridX.Cells[0, I-1]:=FloatTOStr(X[I]);
          end
          Else
	ShowMessage('Ошибка ввода!!! ');
end;
end.
Всем еще раз спасибо =)
Kawun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с условием. Stager Общие вопросы C/C++ 4 13.01.2009 02:01
Помогите сцепить ячейки с определенным условием 7erge Microsoft Office Excel 4 23.07.2008 09:47
Создать выражение для запроса с условием smoky Microsoft Office Access 3 13.05.2008 21:39
Помогите с Условием memoze Microsoft Office Excel 7 22.02.2008 15:23
Проблемы с циклом, условием Иринкаа Помощь студентам 13 19.11.2007 23:33