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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 24.03.2009, 17:35   #1
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию Программа компилируется но не выводит результат в метку

Здравствуйе программисты! Посмотрите пожалуйста. Программа деления двух чисел, результат должен выводится в метку label1, но он не выводится. Программа кампилируется, написанна на С++ Builder 6, тоесть запускается на исполнение. Вот код программы:


Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float u; // напряжение
float r; // сопротивление
float i; // ток
// проверим, введены ли данные в поля Напряжение и Сопротивление
if ( ( (Edit1->Text) .Length () == 0 ) || ( (Edit2->Text) .Length () == 0) )
{
MessageDlg ("Надо ввести напряжение и сопротивление",
mtInformation, TMsgDlgButtons ()<< mbOK, 0) ;
if ( (Edit1->Text) .Length () == 0)
Edit1->SetFocus ( ) ; // курсор в поле Напряжение
else
Edit2->SetFocus ( ) ; // курсор в поле Сопротивление
return;
// получить данные из полей ввода
u = StrToFloat (Edit1->Text) ;
r = StrToFloat (Edit2->Text) ;
// вычислить силу тока
try
{
i = u/r;
}
catch (EZeroDivide &e)
{
ShowMessage ("Величина сопротивления не должна быть равна нулю") ;
Edit2->SetFocus ( ) ; // курсор в поле Сопротивление
return;
// вывести результат в поле Label1
{
Label1->Caption = "Ток : " +
FloatToStrF(i,ffGeneral,7,2) + " А";
}}}}


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


void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
// коды запрещенных клавиш заменим нулем, в результате
// символы этих клавиш в поле редактирования не появятся
// Key — код нажатой клавиши
// проверим, является ли символ допустимым

 if(( Key >= '0') && ( Key <= '9')) // цифра
  return;
// Глобальная переменная Decimalseparator
// содержит символ, используемый в качестве разделителя
//I при записи дробных чисел
 if ( Key == DecimalSeparator)
 if ( (Edit1->Text).Pos(DecimalSeparator) != 0)
 {
  Key =0; // разделитель уже введен
  return;
 }
 if (Key == VK_BACK) // клавиша <Backspace>
  return;
 if ( Key == VK_RETURN) // клавиша <Enter>
 {
  Edit2->SetFocus() ;
  return;
 }
// остальные клавиши запрещены
 Key =0; //не отображать символ
}

//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
 {
 if ( ( Key >= '0') && ( Key <= '9')) // цифра
 return;
 if ( Key == DecimalSeparator)
 if ( (Edit2->Text).Pos(DecimalSeparator) != 0)
 {
  Key =0; // разделитель уже введен
  return;
 }
 if (Key == VK_BACK) // клавиша <Backspace>
  return;
 if (Key == VK_RETURN) // клавиша <Enter>
 {
  Button1->SetFocus(); // переход к кнопке Вычислить
// I повторное нажатие клавиши <Enter>
// активизирует процесс вычисления тока
  return;
 }
 }}

//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}

Последний раз редактировалось prikolist; 24.03.2009 в 17:37.
prikolist вне форума
Старый 24.03.2009, 19:05   #2
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

Может так?
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float u; // напряжение
float r; // сопротивление
float i; // ток
// проверим, введены ли данные в поля Напряжение и Сопротивление
if ( ( (Edit1->Text) .Length () == 0 ) || ( (Edit2->Text) .Length () == 0) )
{
MessageDlg ("Надо ввести напряжение и сопротивление",
mtInformation, TMsgDlgButtons ()<< mbOK, 0) ;
// получить данные из полей ввода
u = StrToFloat (Edit1->Text) ;
r = StrToFloat (Edit2->Text) ;
// вычислить силу тока
try
{
i = u/r;
}
catch (EZeroDivide &e)
{
ShowMessage ("Величина сопротивления не должна быть равна нулю") ;
Edit2->SetFocus ( ) ; // курсор в поле Сопротивление
return;
}
// вывести результат в поле Label1

Label1->Caption = "Ток : " +
FloatToStrF(i,ffGeneral,7,2) + " А";
}}

Последний раз редактировалось Svetlag; 24.03.2009 в 19:07.
Svetlag вне форума
Старый 24.03.2009, 19:19   #3
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Нет, не в этом проблемма. Всё, спасибо автору с другого форума, кстати, который пишет книги по программированию, автор Архангельский.

Вот какой должен быть код, он мне ответил так:

Привожу код с замечаниями. Основное - путаетесь в скобках и считаете, что после return что-то еще будет выполняться.
Советы:
1. Учитесь отлаживать. Вводите остановы, и идите по программе по шагам с помощью F8. Тогда Вы бы сами за 5 минут нашли все ошибки.
2. Используйте отступы в коде, тогда он становится читабельным, и ошибки искать проще.
3. Если набили скобку {, сразу набивайте закрывающую }, а потом пишите между ними код.

В дальнейшем просьба прежде, чем задавать вопрос, пройдите по коду в отладке. И только после этого, если проиходит нечто непонятное, спрашивайте конкретно.
А теперь код. Я отметил в нем символами //!!! свои замечания.

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 float u; // напряжение
 float r; // сопротивление
 float i; // ток
 // проверим, введены ли данные в поля Напряжение и Сопротивление
 if ( ( (Edit1->Text).Length () == 0 ) || ( (Edit2->Text).Length () == 0) )
 {
  MessageDlg ("Надо ввести напряжение и сопротивление",
  mtInformation, TMsgDlgButtons ()<< mbOK, 0) ;
  if ( (Edit1->Text) .Length () == 0)
   Edit1->SetFocus ( ) ; // курсор в поле Напряжение
  else
   Edit2->SetFocus ( ) ; // курсор в поле Сопротивление
  return;
// !!!
} // забыли скобку
// получить данные из полей ввода
u = StrToFloat (Edit1->Text) ;
r = StrToFloat (Edit2->Text) ;
// вычислить силу тока
try
{
i = u/r;
}
catch (EZeroDivide &e)
{
ShowMessage ("Величина сопротивления не должна быть равна нулю") ;
Edit2->SetFocus ( ) ; // курсор в поле Сопротивление
return;
// !!!
} // забыли скобку
// вывести результат в поле Label1
{  // лишняя скобка
Label1->Caption = "Ток : " +
FloatToStrF(i,ffGeneral,7,2) + " А";
}}
// !!!
//}} лишнте скобки


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


void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
// коды запрещенных клавиш заменим нулем, в результате
// символы этих клавиш в поле редактирования не появятся
// Key — код нажатой клавиши
// проверим, является ли символ допустимым

 if(( Key >= '0') && ( Key <= '9')) // цифра
  return;
// !!!
// проверки на Decimalseparator, Backspace и Enter уже бессмысленны,
// так как был return

// Глобальная переменная Decimalseparator
// содержит символ, используемый в качестве разделителя
//I при записи дробных чисел
 if ( Key == DecimalSeparator)
 if ( (Edit1->Text).Pos(DecimalSeparator) != 0)
 {
  Key =0; // разделитель уже введен
  return;
 }
 if (Key == VK_BACK) // клавиша <Backspace>
  return;
 if ( Key == VK_RETURN) // клавиша <Enter>
 {
  Edit2->SetFocus() ;
  return;
 }
// остальные клавиши запрещены
 Key =0; //не отображать символ
}

//---------------------------------------------------------------------------
// !!!
// ошибка в событиии - надо OnKeyPress
void __fastcall TForm1::Edit2KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
 {
 if ( ( Key >= '0') && ( Key <= '9')) // цифра
 return;
 if ( Key == DecimalSeparator)
 if ( (Edit2->Text).Pos(DecimalSeparator) != 0)
 {
  Key =0; // разделитель уже введен
  return;
 }
 if (Key == VK_BACK) // клавиша <Backspace>
  return;
 if (Key == VK_RETURN) // клавиша <Enter>
 {
  Button1->SetFocus(); // переход к кнопке Вычислить
// I повторное нажатие клавиши <Enter>
// активизирует процесс вычисления тока
  return;
 }
 }}

//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
prikolist вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа суммирует натуральные числа от 1 до 50 и выводит результат вычисления на экран xxasb07 Паскаль, Turbo Pascal, PascalABC.NET 2 18.11.2008 10:32
Не компилируется программа kiloruble Общие вопросы C/C++ 11 17.11.2008 20:51
Не компилируется программа VladimirVB Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 14.10.2008 23:22
программа, которая выводит на экран одно из данных слов vados Паскаль, Turbo Pascal, PascalABC.NET 11 26.10.2007 23:47