Войти

Показать полную графическую версию : Прошу помочь исправить программу


GaM1er
11-01-2013, 21:08
ПОМОГИТЕ ПОЖАЛУЙСТА, кто шарит в С++, иначе информатика меня *****......
Задание на фото!... Вот код, который у меня получился, но строка нужных чисел почему то появляется при нажатии заполнить массив и галочке - отображать эту строку, а нужно чтобы на галочке и вывести результат ( тоесть в кнопке, которая отвечает за расчет в какой ячейке число Б и сколько четных... 2) еще одна ошибка, - строка нужные числа отображжается неправильно, тоесть тупо в нужные записывается каждое второе число, а нужно чтобы она каждый элемент массива делила на , проверяла четность, и если оно четное, то записывала это число в строку нужные - под самим числом....
Помогите прошу вас, все облазил, никак не могу сделать, вот код который у меня: (ПС: Буду благодарен, если сразу примет, небольшим денежным вознаграждением)

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

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 test;
int Pos_B=0;// положение ячейки с значением b в сетке
float GridMass[50];//Массив с данными из StrGrid
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject Sender)
{
randomize();
strg->Cells[0][0] = "№";
strg->Cells[0][1] = "Значение:";
strg->Cells[0][2] = "Нужные числа:";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject Sender)
{
Button2->Enabled=true;
// Очистка при перегенирации сетки
Label6->Caption=" ";
Label7->Caption=" ";
//-----------------------------
if (CheckBox1->Checked)
{
strg->RowCount= 3;
}

int SPIN_Val = cspin->Value;
int Val_A = StrToInt(Edit2->Text);

strg->ColCount= SPIN_Val+1;
for(int i=1;i<=SPIN_Val+1;i++)//Заполняем Сетку
{
strg->Cells[i][0] = IntToStr(i);
GridMass[i-1]= rand()%(2*(Val_A)+1) -Val_A; // Генерируем случайное число тз промежутка от -а до а
strg->Cells[i][1] = GridMass[i-1];

}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject Sender)
{
int K=0;
int Val_B =StrToInt( Edit1->Text );
int SPIN_Val = cspin->Value;
for(int i=1;i<SPIN_Val+1;i++)
{
if (GridMass[i-1]== Val_B)
{
Pos_B = i;
i= SPIN_Val+1;
}

}

if(!(Pos_B==0))
{
Label5->Visible=true;
Label7->Visible=true;
Label7->Caption=IntToStr(Pos_B);
for (int i=1;i< Pos_B;i++)
{

if ((fmod(i,2)== 0))
{
K++;
strg->Cells[i][2] = GridMass[i-1];
}

}

Label6->Caption=IntToStr(K);
}else {Label6->Caption="Числа b в сетке не встретелось";}






Впринцепе прога написана, но строка нужные числа никак работать не хочет!!!

Drongo
12-01-2013, 03:42
GaM1er, Объясни условие, я его просто не понимаю, меня интересует такой момент, а именно наперед, что это такое или как вообще?
найти количество чётных элементов одномерного массива до первого встреченого числа равного наперед заданому числу bВ примере приведи.

Я так понял. Есть массив со значениями
4, 5, 2, 5, 1, 5, 6, 4, 3Мы вводим число b = 1 и производим проверку до первого встреченого элемента массива, который будет равен 1? Тоесть
4, 5, 2, 5

lxa85
12-01-2013, 09:43
Drongo, надо найти количество четных элементов до элемента, равного b. b считается заранее определенным.
Т.е. если b = 15 , то
1, 3, 35, 56, 22, 54, 15, 2, 78
GridMass[i-1]= rand()%(2*(Val_A)+1) -Val_A; »
Зачем нужна плюс единица "+1" ?
void __fastcall TForm1::Button2Click(TObject Sender)
{
int K=0;
int Val_B =StrToInt( Edit1->Text );
int SPIN_Val = cspin->Value;

//нашли позицию b. Пусть криво, но нашли
for(int i=1;i<SPIN_Val+1;i++)
{
if (GridMass[i-1]== Val_B)
{
Pos_B = i;
i= SPIN_Val+1;
}//if
}//for

// Если b нашлась, то
if(!(Pos_B==0))
{
//лейболы пропускаем
Label5->Visible=true;
Label7->Visible=true;
Label7->Caption=IntToStr(Pos_B);

//это еще что за цикл?

for (int i=1;i< Pos_B;i++)
{
if ((fmod(i,2)== 0)) //причем здесь остаток от деления ИНДЕКСА массива? Вот тут и есть вторая ошибка.
// массив GridMass[_]. Вот его и дели.
{
K++;
strg->Cells[i][2] = GridMass[i-1];
}//if
}//for
Label6->Caption=IntToStr(K);
}
else {Label6->Caption="Числа b в сетке не встретелось";}

Вот код, который у меня получился, но строка нужных чисел почему то появляется при нажатии заполнить массив и галочке - отображать эту строку, а нужно чтобы на галочке и вывести результат ( тоесть в кнопке, которая отвечает за расчет в какой ячейке число Б и сколько четных...»
Ошибку в логике управления ищи сам. Предложенный код здесь ни при чем.




© OSzone.net 2001-2012