Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2007, 23:51   #1
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию Матрица опять..

Дана матрица A(n,n). Если сумма положительных элементов больше суммы отрицательных, то положительные элементы заменить единицами. В противном случае отрицательные заменить нулями.

Ну вот нужно для начала сделать первым способом (Используя StringGrid).

Вот что я сумел накатать:
Код:
procedure TForm1.Button7Click(Sender: TObject); // Кнопка "Создать матрицу"
begin
n:=strtoint(edit1.text);
StringGrid1.ColCount:=n;                                                    
StringGrid1.RowCount:=n;                                                    
StringGrid1.height:=n*StringGrid1.DefaultRowHeight+10;                                                                                                   StringGrid1.Width:=n*StringGrid1.DefaultColWidth+10;

procedure TForm1.Button8Click(Sender: TObject); // Кнопка "Вычислить" 
var
i,j,sum1,sum2,s,k,pol,otr,rez,a,b:integer;

begin
sum1:=0;
sum2:=0;
for i:=0 to n-1 do
for j:=0 to n-1 do
begin

If StrToInt(StringGrid1.Cells[i,j])>0 then
begin

Sum1:=sum1+StrToInt(StringGrid1.Cells[i,j]);

end
else

begin
Sum2:=Sum2+StrToInt(StringGrid1.Cells[i,j]);

end;

If sum1>Sum2 then
begin


end
else
begin


end;
Ну вообщем вот. Сумму отрицательных считает, положительных тоже. Далее сделал условие что если сумма 1 (положит.) > суммы 2 (отрицат.), то ........ И вот не знаю как вывести единицы вместо положительных элементов если sum1>sum2 и нули вместо отрицательных если sum1<sum2.

Помогите!
POPOV вне форума Ответить с цитированием
Старый 17.11.2007, 00:22   #2
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

2 процедуры:
Код:
первая
for i:= .. 
for j:=...
If StrToInt(StringGrid1.Cells[i,j])>0 then
  StringGrid1.Cells[i,j]:='1';

....
вторая
for i:= .. 
for j:=...
If StrToInt(StringGrid1.Cells[i,j])<0 then
  StringGrid1.Cells[i,j]:='0';
если сумма 1 (положит.) > суммы 2 (отрицат.), то первая ИНАЧЕ вторая.
Alex21 вне форума Ответить с цитированием
Старый 17.11.2007, 01:51   #3
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

Непонимаю...Куда нужно записывать вторую процедуру ? Она же будет выполняться при нажатии на что-то или как ? Одна кнопка уже занята.
POPOV вне форума Ответить с цитированием
Старый 17.11.2007, 05:23   #4
Abbatik
Форумчанин
 
Аватар для Abbatik
 
Регистрация: 11.11.2007
Сообщений: 136
По умолчанию

Код:
procedure TForm1.Button8Click(Sender: TObject); // Кнопка "Вычислить" 
var
i,j,sum1,sum2,s,k,pol,otr,rez,a,b:integer;

begin
sum1:=0;
sum2:=0;
for i:=0 to n-1 do begin
for j:=0 to n-1 do
begin

If StrToInt(StringGrid1.Cells[i,j])>0 then
begin

Sum1:=sum1+StrToInt(StringGrid1.Cells[i,j]);

end
else

begin
Sum2:=Sum2+StrToInt(StringGrid1.Cells[i,j]);

end;
end;
end;
If sum1>Sum2 then
begin
for i:=0 to n-1 do begin
for j:=0 to n-1 do begin
if 
StrToInt(StringGrid1.Cells[i,j])>0 then
  StringGrid1.Cells[i,j]:='1'
end;
end;
end
else
begin
for i:=0 to n-1 do begin
for j:=0 to n-1 do begin
if 
StrToInt(StringGrid1.Cells[i,j])<0 then
  StringGrid1.Cells[i,j]:='0'
end
end;
end;
end;
твоя процедура до конца в той же кнопе!
ICQ - 446037211
Abbatik вне форума Ответить с цитированием
Старый 17.11.2007, 12:34   #5
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

Спасибо, но есть один косяк ) Когда сумма положительных чисел больше отрицательных, все положительные числа заменяются нулями как и должно быть, но в когда сумма отрицательных больше положительных почему-то положительные элементы опять заменяются единицами...
POPOV вне форума Ответить с цитированием
Старый 17.11.2007, 12:54   #6
Abbatik
Форумчанин
 
Аватар для Abbatik
 
Регистрация: 11.11.2007
Сообщений: 136
По умолчанию

Цитата:
Сообщение от POPOV Посмотреть сообщение
Спасибо, но есть один косяк ) Когда сумма положительных чисел больше отрицательных, все положительные числа заменяются нулями как и должно быть, но в когда сумма отрицательных больше положительных почему-то положительные элементы опять заменяются единицами...
Код:
if 
StrToInt(StringGrid1.Cells[i,j])<0 then
  StringGrid1.Cells[i,j]:='0'
поэксперементируй с этими строками может что получится!
ICQ - 446037211
Abbatik вне форума Ответить с цитированием
Старый 17.11.2007, 13:07   #7
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от POPOV Посмотреть сообщение
Непонимаю...Куда нужно записывать вторую процедуру ? Она же будет выполняться при нажатии на что-то или как ? Одна кнопка уже занята.
как описываются процедуры? Никаких кнопок не нужно, просто пишете:
Код:
procedure Proc1;
begin
  for i:= .. //дописать
  for j:=... //дописать
  If StrToInt(StringGrid1.Cells[i,j])>0 then
  StringGrid1.Cells[i,j]:='1';
end;

procedure Proc2;
begin
  for i:= ...//дописать
  for j:=...//дописать
  If StrToInt(StringGrid1.Cells[i,j])<0 then
  StringGrid1.Cells[i,j]:='0';
end;
Дальше в вашем коде добавляете:
если сумма 1 (положит.) > суммы 2 (отрицат.), то Proc1 ИНАЧЕ Proc2;
If sum1>Sum2 then Proc1 else Proc2;
Alex21 вне форума Ответить с цитированием
Старый 17.11.2007, 15:19   #8
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

Незнаю, просто не понимаю и всё ...
Создал 2 процедуры , объявил в заголовках процедур, написал то что писали выше ,выдаёт тучу разных ошибок.
То с переменными чёт не так, например в новых процедурах не объявлены i,j. Ну я объявил, дальше ошибка "Uidentifier: 'StringGrid1'".
Короче я незнаю )
POPOV вне форума Ответить с цитированием
Старый 17.11.2007, 15:41   #9
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Переменные можете сделать глобальными, или описать в каждой процедуре (VAR)

Цитата:
"Uidentifier: 'StringGrid1'".
Либо далаем процедуры так: Procedure TForm1.Proc1; тогда добавляем этуже строчку в раздел объявленных процедур,

либо Procedure Proc1;, тогда вручную дописываем Form1.StringGrid1..... и так ко всем вызываемым компонентам.

-----------------
p.s.: проще всего объявить глобальные переменные, и в процедурах вместо StringGrid писать Form1.StringGrid1

Последний раз редактировалось Alex21; 17.11.2007 в 15:43.
Alex21 вне форума Ответить с цитированием
Старый 17.11.2007, 17:26   #10
POPOV
Форумчанин
 
Аватар для POPOV
 
Регистрация: 26.10.2007
Сообщений: 124
По умолчанию

Вот то что щас написано... Опять влюбом случае заменяет положительные единицами.. Не могли бы проверить, где ошибся ?

Код:
Procedure Proc1;
begin
for i:=0 to n-1 do
  for j:=0 to n-1 do
  If StrToInt(Form1.StringGrid1.Cells[i,j])>0 then
  Form1.StringGrid1.Cells[i,j]:='1';
end;

Procedure Proc2;
begin
for i:=0 to n-1 do
  for j:=0 to n-1 do
  If StrToInt(Form1.StringGrid1.Cells[i,j])<0 then
  Form1.StringGrid1.Cells[i,j]:='0';
end;

procedure TForm1.Button8Click(Sender: TObject); 
var
sum1,sum2:integer;
begin
sum1:=0;
sum2:=0;
for i:=0 to n-1 do
for j:=0 to n-1 do
begin
If StrToInt(StringGrid1.Cells[i,j])>0 then
begin
Sum1:=sum1+StrToInt(StringGrid1.Cells[i,j]);
end
else
begin
Sum2:=Sum2+StrToInt(StringGrid1.Cells[i,j]);
end;
end;
If sum1>Sum2 then Proc1 else Proc2;
end;
POPOV вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
И опять мэйлы.. Опять... Pusher PHP 6 28.06.2008 03:08
И опять LookupComboBox Alex_666 БД в Delphi 1 02.06.2008 10:22
опять кодировка) mager JavaScript, Ajax 1 22.05.2008 16:41
Опять ListBox Rahim1993 Общие вопросы Delphi 3 15.01.2008 20:21
Опять TreeView Simply-Art Компоненты Delphi 2 20.07.2007 17:14