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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

Запуск происходит по нажатию кнопки, событию Button1Click. Х вычитываю из таблицы, из ее строк.
1. Как сделать так, чтоб при значении А=0 выводилось сообщение в нужный столбец таблицы. А остальные вычисления работали.
Вывод идет в второю таблицу
Код:
#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)
{
}

float f (float x,float a, float 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 errorCode =0;
//byte errorHappened= 0;
int A[20];
float X[20];
float An=StrToFloat (Edit1->Text);
int Da=StrToInt (Edit2->Text);
int M=StrToInt (CSpinEdit1->Text);
int N=StrToInt (CSpinEdit2->Text);
DecimalSeparator = '.';
for(int i= 1;i<=M;i++)
for(int j= 1;j<=N;j++)
{
A[i]= float (An+(i-1)*Da);
X[j]=StrToFloat(StringGrid1->Cells[1][j]);
if (A[i]==0 & b==1 & X[j]>1 )
{
ShowMessage ("Îøèáêà À=0 âûõîä èç ïðîãðàììû");
}
else

for(int l=1;l<=M;l++)
for(int k=1;k<=N;k++)
{
StringGrid2->Cells[l][k] = f(X[k],A[l],b);   //âûâîä ôîðìóëû â ñòðîêè

}
}
}



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

Последний раз редактировалось Dm!User; 11.03.2019 в 00:06.
Dm!User вне форума   Ответить с цитированием
Старый 11.03.2019, 09:00   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,335
Репутация: 2611
По умолчанию

1. В С++ массивы нумеруются с 0
2. Cols, Rows, Cells тоже
3. & и && это разные операторы и делают они немного разное
4. Какой смысл кастить к float перед записью в int?
5. Что значит A = 0 в условие? Все элементы равны 0?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 11.03.2019, 11:52   #3
Dm!User
Пользователь
 
Регистрация: 20.10.2018
Сообщений: 20
Репутация: 8
По умолчанию

можно подробнее по пунктам. Еще вопрос. Почему при запуске компилированная программа выводит log:sing error . Где в программе вычисляется log от 0 ?
Dm!User вне форума   Ответить с цитированием
Старый 11.03.2019, 11:55   #4
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,335
Репутация: 2611
По умолчанию

Цитата:
Сообщение от Dm!User Посмотреть сообщение
можно подробнее по пунктам.
Что конкретно не понятно? Какие подробности нужны к фразе "в с++ массивы нумеруются с 0"?

Цитата:
Сообщение от Dm!User Посмотреть сообщение
Где в программе вычисляется log от 0 ?
Т.е. это не вы программу писали? И даже не прочитаели ее?
Код:
return log(a*a*b)-4*x*x;
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 11.03.2019, 11:56   #5
Dm!User
Пользователь
 
Регистрация: 20.10.2018
Сообщений: 20
Репутация: 8
По умолчанию

1. Размерность массива указана из расчета максимального объема.
3.
Код:
if (A[i]==0 & b==1 & X[j]>1 )
{
ShowMessage ("Îøèáêà À=0 âûõîä èç ïðîãðàììû");
}
это попытка избавиться от х=0, чтоб не вызывать ошибку.

4. Можно подробнее
Dm!User вне форума   Ответить с цитированием
Старый 11.03.2019, 11:58   #6
Dm!User
Пользователь
 
Регистрация: 20.10.2018
Сообщений: 20
Репутация: 8
По умолчанию

Писал я. Но я не вижу пути как попадает 0. Я не ввожу ноль. ошибка возникает при цифрах отличных от 0
Dm!User вне форума   Ответить с цитированием
Старый 11.03.2019, 12:01   #7
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,335
Репутация: 2611
По умолчанию

Цитата:
Сообщение от Dm!User Посмотреть сообщение
1. Размерность массива указана из расчета максимального объема.
Причем тут размерность? У вас в доме 100 квартире и счет начинается с 1. Как связаны 100 и 1? Вот в С++ массивы и на 10 элементов, и на 100, и на 1000 нумеруются с 0.

Цитата:
Сообщение от Dm!User Посмотреть сообщение
это попытка избавиться от х=0, чтоб не вызывать ошибку.
Причем тут х, если логарифм от него не считается? Попробуйте A[i] = 0, b = 1, X[j] = 0

Цитата:
Сообщение от Dm!User Посмотреть сообщение
4. Можно подробнее
Так это к вам вопрос. Вы же привели условие
Цитата:
Сообщение от Dm!User Посмотреть сообщение
Как сделать так, чтоб при значении А=0
а А, если вы забыли, в программе массив.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 11.03.2019, 12:04   #8
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,335
Репутация: 2611
По умолчанию

Давайте посмотрим на
Код:
A[i]= float (An+(i-1)*Da);
при i = 1
Код:
A[1] = An;
если 0 <= An < 1, то A[1] = 0
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 11.03.2019, 12:22   #9
Dm!User
Пользователь
 
Регистрация: 20.10.2018
Сообщений: 20
Репутация: 8
По умолчанию

An беру из таблицы, которую сам заполняю. Там заведомо 0 не ставил. Ошибка все равно возникает.
Dm!User вне форума   Ответить с цитированием
Старый 11.03.2019, 12:30   #10
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,335
Репутация: 2611
По умолчанию

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

Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работает не правильно - C++ Александр121 Общие вопросы C/C++ 11 27.03.2018 03:13
Не правильно работает HaKeRR Общие вопросы C/C++ 1 02.01.2015 18:10
Не правильно работает код Sylar9 Общие вопросы C/C++ 8 05.04.2012 12:11
Не работает правильно!!! Vitalik1 Помощь студентам 2 01.11.2011 23:11
Не правильно (или правильно?) работает позиционирование в WebKit mutabor HTML и CSS 5 09.12.2010 10:54


17:01.


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

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru