Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Прошу помочь исправить программу (http://forum.oszone.net/showthread.php?t=251203)

GaM1er 11-01-2013 21:08 2064572

Прошу помочь исправить программу
 
Вложений: 2
ПОМОГИТЕ ПОЖАЛУЙСТА, кто шарит в С++, иначе информатика меня *****......
Задание на фото!... Вот код, который у меня получился, но строка нужных чисел почему то появляется при нажатии заполнить массив и галочке - отображать эту строку, а нужно чтобы на галочке и вывести результат ( тоесть в кнопке, которая отвечает за расчет в какой ячейке число Б и сколько четных... 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 2064792

GaM1er, Объясни условие, я его просто не понимаю, меня интересует такой момент, а именно наперед, что это такое или как вообще?
Цитата:

найти количество чётных элементов одномерного массива до первого встреченого числа равного наперед заданому числу b
В примере приведи.

Я так понял. Есть массив со значениями
Код:

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

4, 5, 2, 5

lxa85 12-01-2013 09:43 2064874

Drongo, надо найти количество четных элементов до элемента, равного b. b считается заранее определенным.
Т.е. если b = 15 , то
Код:

1, 3, 35, 56, 22, 54, 15, 2, 78
Цитата:

Цитата GaM1er
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 в сетке не встретелось";}

Цитата:

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

Ошибку в логике управления ищи сам. Предложенный код здесь ни при чем.


Время: 13:52.

Время: 13:52.
© OSzone.net 2001-