Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Несложная задача о матрице. Найти кол-во элементов >5 
:(
    Опции темы
Qwr
Дата 21.1.2009, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 21.1.2009

Репутация: нет
Всего: нет



Матрица 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.

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

Заранее благодарен.
PM MAIL   Вверх
mes
Дата 21.1.2009, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



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

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

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


--------------------
PM MAIL WWW   Вверх
Qwr
Дата 21.1.2009, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 21.1.2009

Репутация: нет
Всего: нет



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



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

PM MAIL   Вверх
mes
Дата 21.1.2009, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



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


Это сообщение отредактировал(а) mes - 21.1.2009, 23:53


--------------------
PM MAIL WWW   Вверх
Qwr
Дата 22.1.2009, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 21.1.2009

Репутация: нет
Всего: нет



Ответ неправильный(в выводимой матрице этих чисел куда больше трёх), да и переменная объявляется 1 раз там же и выводится, не знаю даже что и думать.
PM MAIL   Вверх
Dmi3ev
Дата 22.1.2009, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

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

а почему она должна работать? в ячейки 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);
}
//---------------------------------------------------------------------------



--------------------

PM MAIL   Вверх
mes
Дата 22.1.2009, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



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

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

Это сообщение отредактировал(а) mes - 22.1.2009, 01:49


--------------------
PM MAIL WWW   Вверх
Kallikanzarid
Дата 22.1.2009, 03:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 9.11.2008

Репутация: 2
Всего: 3



Не
Код

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

а
Код

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

PM MAIL   Вверх
Dmi3ev
Дата 22.1.2009, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Kallikanzarid, так лучше в данном случае не делать.
Цитата

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

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


--------------------

PM MAIL   Вверх
Qwr
  Дата 22.1.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 21.1.2009

Репутация: нет
Всего: нет



исправил, работает, спасибо всем за помощь  smile  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0628 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.