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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2010, 10:56   #1
Ann_Sh
Пользователь
 
Аватар для Ann_Sh
 
Регистрация: 05.11.2010
Сообщений: 25
Восклицание Ошибка!!!

_В символьном массиве пределить, сколько раз встречается символ звездочка на главной диагонали_
Есть ошибка, помогите исправить!)

procedure TForm1.Button1Click(Sender: TObject);
var
a:array [1..5, 1..5] of char;
col, i, j:integer;
begin
if i=j then
col:=0;
for i:=1 to 5 do
for j:=1 to 5 do a[i,j]:=StrToInt(StringGrid1.Cells[i,j])
if (a(i=j)) and (a[i,j]='*') then col:=col+1;
Label1.Caption:='Количество звездочек на главной диагонали равно '+IntToStr(col);
end;
Ann_Sh вне форума Ответить с цитированием
Старый 10.11.2010, 11:00   #2
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
a:array [0..4, 0..4] of char;
col, i, j:integer;
begin
if i=j then
col:=0;
for i:=0 to 4  do
  for j:=0 to 4  do 
    begin
    a[i,j]:=StrToInt(StringGrid1.Cells[i,j]);
    if (a(i=j)) and (a[i,j]='*') then col:=col+1;
    end;
Label1.Caption:='Количество звездочек на главной диагонали равно '+IntToStr(col);
end;
Быть может так? Если я не правильно поняла - прошу описать, какая именно ошибка, и расставить отступы...
И еще, в начале сравниваются i и j. Их значения известны, чтобы делфи могла их сравнить?

И еще. Если используешь СтринГрид - в нём нумерация индексов идет от нуля.

Лучше сама напишу)))
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
stars, i, j:integer;
begin
if StringGrid1.ColCount=StringGrid1.RowCount then
begin
  stars:=0;
  for i:=0 to 4 do
    for j:=0 to 4 do 
      if ((i=j)) and (StringGrid1.Cells[i,j]='*') then inc(stars);
  Label1.Caption:='Количество звездочек на главной диагонали равно '+IntToStr(stars);
end;
end;

Последний раз редактировалось Риндера; 10.11.2010 в 11:09.
Риндера вне форума Ответить с цитированием
Старый 10.11.2010, 13:34   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) лишняя проверка. не нужно перед выполнением цикла проверять i=j
2) массив символьный, зачем в число преобразовать StringGrid перед внесением в массив?! InToStr не нужен!
2) в StringGrid нумерация идёт от нуля (если только выключены FixedCols = 0 и FixedRows = 0) + порядок другой сначала столбец, потом строка.

Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
a:array [1..5, 1..5] of char;
col, i, j:integer;
begin
  {заполнение массива}
  for i:=1 to 5 do
    for j:=1 to 5 do 
       a[i,j]:= StringGrid1.Cells[j-1,i-1][1];
{если FixedCols<>0 и FixedRows<>0 тогда надо
       a[i,j]:= StringGrid1.Cells[j,i][1];
      }

  {подсчёт}
  col:=0;
  for i:=1 to 5 do
      if a[i,i]='*' then col:=col+1;

  Label1.Caption:='Количество звездочек на главной диагонали равно '+IntToStr(col);
end;

p.s. работоспособность кода не проверял

p.p.s. При заполнении массива, если ячейка в StringGrid пустая будет ошибка!
чтобы её не было, можно предварительно проверить строчку на пустоту.
например, так:
Код:
  for i:=1 to 5 do
    for j:=1 to 5 do 
       if Length(StringGrid1.Cells[j-1,i-1])>0 then
           a[i,j]:= StringGrid1.Cells[j-1,i-1][1]
       else
           a[i,j] := ' ';

Последний раз редактировалось Serge_Bliznykov; 10.11.2010 в 13:45.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.11.2010, 13:38   #4
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Serge_Bliznykov, мы учитываем случай, если стринггрид не квадратный.
И еще, зачем лишний массив? При присваивании элементов грида целочисленному массиву, делфи наткнется на символ звездочки и выдаст ошибку.
И поскольку у нас все-таки квадратная матрица, то не важно, стобец ли сначала, или стока.
Риндера вне форума Ответить с цитированием
Старый 10.11.2010, 13:50   #5
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Цитата:
Сообщение от Риндера Посмотреть сообщение
Serge_Bliznykov, мы учитываем случай, если стринггрид не квадратный.
Тогда о какой главной диагонали может идти речь???
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 10.11.2010, 14:01   #6
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Цитата:
Сообщение от Grag Посмотреть сообщение
Тогда о какой главной диагонали может идти речь???
Не надо паники) Посмотри мой код во втором посте. Ну и вообще, убрать или добавить проверку не составит никакого труда, и это скорее зависит от конкретной задачи... Я так, на всякий случай написала...
Например, когда я писала прогу перемножения матриц, где размер их задавался пользователем, там нужна была проверка... И тут у человека в коде изначально была проверка, значит, наверное она ему нужна.
Риндера вне форума Ответить с цитированием
Старый 10.11.2010, 14:05   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Grag
Тогда о какой главной диагонали может идти речь???
Спасибо, коллега.
Да, я полностью согласен. Понятие главной диагонали определено исключительно для квадратной матрицы.

Цитата:
И еще, зачем лишний массив?
ну, тут всё зависит от того, как автор топика с преподавателем объяснится... В условиях задачи требуется "В символьном массиве " - сумеет отстоять, что StringGrid и есть тот самый "символьный массив", тогда можно обойтись и без дополнительного массива.
не сумеет - нужно делать так, как она попыталась с самого начала...

Цитата:
И поскольку у нас все-таки квадратная матрица, то не важно, стобец ли сначала, или стока.
если бы брались элементы ТОЛЬКО главной диагонали, тогда согласен с Вами.. впрочем, в проверке только они и участвуют, так что, можно и так оставить. всё будет работать.
Но всё же, как педант, не могу не отметить, что это, всё же, неверно. Даже если в данном случае это и не важно! Будучи преподавателем, я бы придрался...

А вот, если бы массив A мы заполняли так:
Код:
for I:=1 to 5 do
    a[i,i] := StringGrid[i,i][1];
тогда придратьс к порядку столбец/строка точно не получилось бы
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.11.2010, 14:09   #8
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Только для квадратной матрицы, имеющей главную диагональ, достаточно и такого:
Код:
count=0;
for j:=0 to StringGrid.RowCount-1 do
  if StringGrid.Cells[j,j]='*' then Inc(count);
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 10.11.2010, 14:13   #9
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Цитата:
Сообщение от Grag Посмотреть сообщение
Только для квадратной матрицы, имеющей главную диагональ, достаточно и такого:
Так правда лучше %)))
Риндера вне форума Ответить с цитированием
Старый 10.11.2010, 19:44   #10
Ann_Sh
Пользователь
 
Аватар для Ann_Sh
 
Регистрация: 05.11.2010
Сообщений: 25
По умолчанию

Ребят, огромное спасибо, все получилось...Вот этот код, написанный Риндерой, получился:

Цитата:
procedure TForm1.Button1Click(Sender: TObject);
var
stars, i, j:integer;
begin
if StringGrid1.ColCount=StringGrid1.Ro wCount then
begin
stars:=0;
for i:=0 to 4 do
for j:=0 to 4 do
if ((i=j)) and (StringGrid1.Cells[i,j]='*') then inc(stars);
Label1.Caption:='Количество звездочек на главной диагонали равно '+IntToStr(stars);
end;
end;
Ann_Sh вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Nero - ошибка драйвера DMA. ошибка CRC NecRoMat Софт 5 09.05.2012 01:29
Это ошибка Delphi или моя ошибка??? bloodeagle Общие вопросы Delphi 3 12.11.2009 15:26
Ошибка в статье = ошибка в рограмме. Alex Cones Общие вопросы Delphi 14 29.07.2009 18:17
Ошибка в Аfor i:=1 to SI do. Пишит что ошибка в SI Алексей_xXx Помощь студентам 2 29.05.2009 00:09
...Ошибка 101 (net::ERR_CONNECTION_RESET): Неизвестная ошибка... infrared Помощь студентам 0 16.04.2009 17:44