Консультация № 178357
13.05.2010, 06:05
40.09 руб.
13.05.2010, 07:09
0 8 2
Компилятор вызывает ошибку на восьмой строке функции (см. приложение) ошибкой "If statement missing )".
https://rfpro.ru/upload/2359
Среда разработки Borland C++ Builder.

Приложение:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float soz=0;
int n=0;
Table1->First();
while (Table1->Eof!=true)
{
if(Table1 LAST_NAME ->Value==Edit1->Text);
{
soz=soz+Table1 MARK->Value;
n++;
}
Table1->Next();
}
if(n!=0)
soz=soz/n;
Label1->Caption="Средняя оценка: "+FloatToStr(soz);


}

Обсуждение

Неизвестный
13.05.2010, 08:22
общий
Питулин Александр Михайлович:
Уберите ";" в конце строки, по-моему, этот знак там не нужен.
давно
Старший Модератор
17042
808
13.05.2010, 08:59
общий
Patriotix-N:
Тут дело не в знаке, тут весь код переписывать нужно: автор вопроса пытается выполнить запрос... без запроса (т.е. компонента Query), обращаясь напрямую к таблице, что не есть правильно.
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
13.05.2010, 09:03
общий
это ответ
Здравствуйте, Питулин Александр Михайлович.
Я предполагаю, что ошибка компиляции связана с тем, что не определены LAST_NAME и MARK, видимо имелся ввиду такой код:
Код:

if (Table1->FieldByName("LAST_NAME")->Value == Edit1->Text)
{
soz = soz + Table1->FieldByName("MARK")->Value;
n++;
}

Также в конце строки не нужна точка с запятой, это не препятствует компиляции, но искажает логику программы.
Неизвестный
13.05.2010, 09:06
общий
Dr_Andrew:
Наверно SQL будут проходить в следующем семестре :)
давно
Старший Модератор
17042
808
13.05.2010, 10:03
общий
это ответ
Здравствуйте, Питулин Александр Михайлович.
Обращение к полям таблицы в среде Borland C++ Builder осуществляется через метод FieldByName таблицы (TTable) или запроса (TQuery). Возможен и такой вариант (см. приложение, на форму добавлен компонент Query), хотя вариант предыдущего эксперта, безусловно, проще.

Приложение:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("SELECT LAST_NAME, MARK FROM Students");
Query1->Open();

float soz = 0.0;
int n = 0;

Query1->First();
while(!Query1->Eof)
{
if(Query1->FieldByName("LAST_NAME")->AsString == Edit1->Text)
{
soz += Query1->FieldByName("MARK")->AsFloat;
n++;
}
Query1->Next();
}

if(n != 0)
{
soz=soz/n;
Label1->Caption="Средняя оценка: "+FloatToStr(soz);
}
}
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
давно
Старший Модератор
17042
808
13.05.2010, 10:04
общий
coremaster1:
Уже проходят, судя по задачам в "Решебнике"...
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
13.05.2010, 15:56
общий
эх.. как то так.
Хотя, заведомо неправильный подход. Ну да ладно, похоже преподаватели как и везде - ничего внятно не объясняют.
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TQuery *Query1 = new TQuery(this);
String s = "";
Query1->SQL->Add(s.sprintf("SELECT AVG(MARK) as MARK FROM Students.dbf WHERE PERS_LNAME = '%s'",Edit1->Text.c_str()));
try
{
Query1->Active = true;
Label1->Caption = s.sprintf("Средняя оценка: %.2f",Query1->FieldByName("mark")->AsFloat);
}
__finally
{
Query1->Active = false;
Query1->Free();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
// Table1->TableName = ExtractFilePath(ParamStr(0))+"Students.dbf";
Table1->Active = true;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Table1AfterScroll(TDataSet *DataSet)
{
Edit1->Text = Table1->FieldByName("PERS_LNAME")->AsString;
}
//---------------------------------------------------------------------------

да, в силу грубой ошибки именования полей, немного их имена поправлены:
MARK_BOOK,
NGROUP,
PERS_NAME,
PERS_FNAME,
PERS_LNAME,
BIRTH_YEAR,

SEX,
SUBJECT,
MARK
давно
Академик
320937
2216
13.05.2010, 17:43
общий
Питулин Александр Михайлович:
Добрый день! Очевидно, Вы, наконец, выложили свой собственный код. Это радует. Можете сравнить скорость реакции экспертов:) Удачи!
Форма ответа