Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Несложная задача о матрице.


Автор: Qwr 21.1.2009, 22:28
Матрица 15Х15 заполняемая, случайным образом.Найти кол-во элементов, которые больше 5.
Код

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

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

int A[15][15], i,j,k;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for(i=1;i<=15;i++)StringGrid1->Cells[0][i]=IntToStr(i)+"-я строка";
for(j=1;j<=15;j++)StringGrid1->Cells[j][0]=IntToStr(j)+"-й столбец";
}

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

void __fastcall TForm1::Button1Click(TObject *Sender)
{
randomize();
for(i=1;i<=15;i++)
for(j=1;j<=15;j++)
{StringGrid1->Cells[j][i]=IntToStr(50-random(100));
if(A[i][j]>5)k++;}

Edit1->Text=IntToStr(k);
}
//---------------------------------------------------------------------------


Простенький алгоритм:как A[i][j]>5 - увеличивать некоторую переменую на 1, но программа не работает, что ещё интересно, если убрать всю работу с переменной k(кроме объявления и вывода), то выводимое значение =3.

Как написать правильно?

Заранее благодарен.

Автор: mes 21.1.2009, 22:47
Цитата(Qwr @  21.1.2009,  21:28 Найти цитируемый пост)
если убрать всю работу с переменной k(кроме объявления и вывода), то выводимое значение =3.

ну так обнуляйте ее перед использованием )

Добавлено через 1 минуту и 18 секунд
а переменные лучше определяйте внутри функции, если они нужны локально, либо как члены класса .

Автор: Qwr 21.1.2009, 23:36
Обнуление решило микропроблему, но программа по-прежнему не работает:
Код
int k=0;
for(i=1;i<=15;i++)
for(j=1;j<=15;j++)
if(A[i][j]>5)k++;



Вроде бы логически всё верно, пробывал расчитать k используя разнообразные циклы, что только усложняло код, а ответ так и остаётся "3"

Автор: mes 21.1.2009, 23:53
ну так может ответ правильный ?
поменяйте условие , если ответ сменится, значит у Вас так заполнена матрица,
 иначе в алгоритме и при выводе используются разные переменные(возможно с одинаковым иненем)

Автор: Qwr 22.1.2009, 00:49
Ответ неправильный(в выводимой матрице этих чисел куда больше трёх), да и переменная объявляется 1 раз там же и выводится, не знаю даже что и думать.

Автор: Dmi3ev 22.1.2009, 00:51
Цитата

Обнуление решило микропроблему, но программа по-прежнему не работает:

а почему она должна работать? в ячейки StringGrid-а значения заносятся, там они есть, а вот массив А не заполняется. А потом ты сравниваешь значение элемента массива А с 5. Как это?
Или я чего-то не понимаю... Заполни массив А тоже!!!
Вот так можно:
Код

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
k=0;
randomize();
for(i=1;i<=15;i++)
for(j=1;j<=15;j++)
{
 StringGrid1->Cells[j][i]=IntToStr(50-random(100));
 A[i-1][j-1]=StrToInt(StringGrid1->Cells[j][i]);
 if(A[i-1][j-1]>5) k++;
}
Edit1->Text=IntToStr(k);
}
//---------------------------------------------------------------------------

Автор: mes 22.1.2009, 01:48
Цитата(Qwr @  21.1.2009,  23:49 Найти цитируемый пост)
переменная объявляется 1 раз там же и выводится

так там  не только k smile

Автор: Kallikanzarid 22.1.2009, 03:44
Не
Код

for(i=1;i<=15;i++)

а
Код

for( i = 0; i < 15; ++i )

Автор: Dmi3ev 22.1.2009, 09:46
Kallikanzarid, так лучше в данном случае не делать.
Цитата

for( i = 0; i < 15; ++i )

тк там 0-ые строка и столбец заняты у StringGrid (нумерация начинаетися с единицы, 0-ые заняты подписями столбцов и строк)...

Автор: Qwr 22.1.2009, 15:02
исправил, работает, спасибо всем за помощь  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)