Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > C++ Builder
Регистрация

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

Ответ
 
Опции темы
Старый 30.03.2019, 21:03   #1
Dm!User
Пользователь
 
Регистрация: 20.10.2018
Сообщений: 20
Репутация: 10
По умолчанию вывод ошибки из функции

Как сделать. Допустим дана функция Ln X

Как сделать так, чтобы при Ln от 0 в переменной допустим Error появилась 1.
Без ошибки 0.

Функцию объявляю у себя в программе так -

double f (double x,double a)
{

if ( x > 1 )
{
return log(a*a);
}
else
{
return sin(x*x*x);
}
}


Нужно чтобы функция при недопустимом значении возвращала ошибку, изменяла значение переменной error с 0 на 1

Последний раз редактировалось Dm!User; 30.03.2019 в 21:15.
Dm!User вне форума   Ответить с цитированием
Старый 30.03.2019, 22:27   #2
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,715
Репутация: 1780
По умолчанию

Error = 0;
waleri вне форума   Ответить с цитированием
Старый 31.03.2019, 22:12   #3
Dm!User
Пользователь
 
Регистрация: 20.10.2018
Сообщений: 20
Репутация: 10
По умолчанию

Доброго вечера. Это понятно. Вопрос в другом. Почему не корректно работает код. При условии что А при значении = 0 и X>1. Появляется сообщение из программы, потом сообщение о недопустимости взятия ln от 0.
Как сделать так, чтоб при этих условиях 0 не передавался в функцию и в таблице 2. писалась ошибка по всему столбцу, который соответствует значениям параметра А.
Код:

#include <vcl.h>
#include <cmath>
#pragma hdrstop

#include "Unit1.h"
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
//#include <iostream>

TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}

double f (double x,double a, double b)
{
if (x > 1)
{
return log(a*a*b)-4*x*x;
}
else
{
return  sin(x*x*x)-a*b;
}
}


void __fastcall TForm1::Button3Click(TObject *Sender)
{
Close();
}


void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Clear();
Edit2->Clear();
for(int i=1;i<=20;i++)
for (int j=1;j<=20;j++)
{
StringGrid1->Cols[1]-> Clear();
StringGrid2->Cols[1]-> Clear();
StringGrid2->Rows[j]-> Clear();
}
}

void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)
{
  StringGrid2->ColCount = CSpinEdit1->Value+1;
}
void __fastcall TForm1::Edit1KeyPress (TObject *Sender, char &Key)
{
if (isdigit(Key) || Key == VK_BACK || Key == '.' || Key == '-') {return;}
else Key=0;
}




void __fastcall TForm1::CSpinEdit2Change(TObject *Sender)
{
StringGrid1->RowCount = CSpinEdit2->Value+1;
StringGrid2->RowCount = CSpinEdit2->Value+1;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
float b=1;
byte errorHappened= 0;
int A[20];
float X[20];
float My [20][20];
float An=StrToFloat (Edit1->Text);
int Da=StrToInt (Edit2->Text);
int M=StrToInt (CSpinEdit1->Text);
int N=StrToInt (CSpinEdit2->Text);
DecimalSeparator = '.';
for(byte i= 1;i<=M;)
for(byte j= 1;j<=N;)

{
A[i]= int (An+(i-1)*Da);
X[j]= StrToFloat(StringGrid1->Cells[1][j]);


while (A[i]==0 & X[j]>1)
{
errorHappened=1;
ShowMessage("Ââåäåíî íå êîðåêòíîå çíà÷åíèå");
StringGrid2->Cells[i][1]="Error";
}


for(int l=1;l<=M;l++)
for(int k=1;k<=N;k++)

StringGrid2->Cells[l][k] = f(X[k],A[l],b);   //âûâîä ôîðìóëû â ñòðîêè
//My[i, j] =  f( X[j], A[i],b);
i++;
j++;
}
}






//---------------------------------------------------------------------------

Dm!User вне форума   Ответить с цитированием
Старый 31.03.2019, 22:17   #4
Dm!User
Пользователь
 
Регистрация: 20.10.2018
Сообщений: 20
Репутация: 10
По умолчанию Вид программы

Программа

Должно быть как на скрине с ошибками
Рассматриваю любую помощь. Хочется самим все сделать
Изображения
Тип файла: png 1my.png (20.4 Кб, 1 просмотров)
Тип файла: jpg 2my.jpg (88.5 Кб, 1 просмотров)
Тип файла: png 2019-03-31_21-21-03.png (7.4 Кб, 20 просмотров)

Последний раз редактировалось Dm!User; 31.03.2019 в 22:24.
Dm!User вне форума   Ответить с цитированием
Старый 01.04.2019, 10:30   #5
Dm!User
Пользователь
 
Регистрация: 20.10.2018
Сообщений: 20
Репутация: 10
По умолчанию

Код исполняемый при нажатии кнопки вычисления
Код:

{
float b=1;
byte errorHappened= 0;
int A[20];
float X[20];
float My [20][20];
float An=StrToFloat (Edit1->Text);
int Da=StrToInt (Edit2->Text);
int M=StrToInt (CSpinEdit1->Text);
int N=StrToInt (CSpinEdit2->Text);
DecimalSeparator = '.';
for(byte i= 1;i<=M;)
for(byte j= 1;j<=N;)

{
A[i]= int (An+(i-1)*Da);
X[j]= StrToFloat(StringGrid1->Cells[1][j]);


while (A[i]==0 & X[j]>1)
{
errorHappened=1;
ShowMessage("Ââåäåíî íå êîðåêòíîå çíà÷åíèå");
StringGrid2->Cells[i][1]="Error";
}


for(int l=1;l<=M;l++)
for(int k=1;k<=N;k++)

StringGrid2->Cells[l][k] = f(X[k],A[l],b);   //âûâîä ôîðìóëû â ñòðîêè
//My[i, j] =  f( X[j], A[i],b);
i++;
j++;
}
}

Dm!User вне форума   Ответить с цитированием
Старый 01.04.2019, 10:31   #6
Dm!User
Пользователь
 
Регистрация: 20.10.2018
Сообщений: 20
Репутация: 10
По умолчанию

Функция задана так
Код:

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}

double f (double x,double a, double b)
{
if (x > 1)
{
return log(a*a*b)-4*x*x;
}
else
{
return  sin(x*x*x)-a*b;
}
}

Dm!User вне форума   Ответить с цитированием
Старый 01.04.2019, 11:21   #7
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,715
Репутация: 1780
По умолчанию

Ну так на месте, где обнаруживаете ошибку устанавливайте error чему надо а там, где выводите на экран проверьте, чему равно error.
waleri вне форума   Ответить с цитированием
Старый 01.04.2019, 12:34   #8
Dm!User
Пользователь
 
Регистрация: 20.10.2018
Сообщений: 20
Репутация: 10
По умолчанию

Если знал как это сделать...
Dm!User вне форума   Ответить с цитированием
Старый 01.04.2019, 12:49   #9
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 13,930
Репутация: 2428
По умолчанию

Код:

double f (double x,double a, double b)
{
if (a*a*b == 0)
{
  error = 1;
  return 0;
}
if (x > 1)
{
return log(a*a*b)-4*x*x;
}
else
{
return  sin(x*x*x)-a*b;
}

__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод ошибки при недостаче товара pr1nc1k БД в Delphi 0 04.06.2013 22:25
Вывод ошибки в блоке try...except Lokos Общие вопросы Delphi 3 21.07.2011 04:20
Вывод ошибки при неправильном вводе пароля Arinka Помощь студентам 6 12.06.2010 13:51
Вывод ошибки при условии.... Arinka Помощь студентам 8 05.06.2010 14:54
Функции в си. Вывод двумерного массива из функции. Evgen51 Общие вопросы C/C++ 9 13.05.2010 03:59


08:46.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru