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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2011, 18:54   #1
Fri
Пользователь
 
Регистрация: 24.04.2011
Сообщений: 26
По умолчанию Посчитать произведение эл-ов массива, расположенных между максимальным и минимальными элементами.

Код написал, но как всегда у меня ошибки
Код:
type
  mas=array[1..7] of Integer;
var
  S,n,i,max,min,maxi,mini:Integer;
  A:mas;
begin
n:=StrToInt(Edit1.Text);
StringGrid1.ColCount:=n+1;
for i:=1 to n  do
A[i]:=StrToInt(StringGrid1.Cells[i]);
max:=A[1];
min:=A[1];
S:=1;
for i:=1 to n do
if A[i]>max then
 begin
max:=A[i];
maxi:=i;
end;
for i:=1 to n do
if A[i]<min then
begin
  min:=A[i];
  mini:=i;
  end;

  for i:=maxi to mini do
 S:=S*A[i];
 Label1.Caption:=IntToStr(S);

end;

end.
В данный момент ругается на
Код:
A[i]:=StrToInt(StringGrid1.Cells[i]);
--------------------------------
Заменил
Код:
A[i]:=StrToInt(StringGrid1.Cells[i]);
на
Код:
A[i]:=StrToInt(StringGrid1.Cells[0,i]);
Всё равно пишет ошибку

Последний раз редактировалось Fri; 23.10.2011 в 19:00.
Fri вне форума Ответить с цитированием
Старый 23.10.2011, 19:35   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) какая ошибка, разумеется, большая тайна!
Впрочем, рискну предположить - ошибка преобразования в целое число...

2) в StringGrid первый параметр - индекс столбца,
второй параметер - индекс строки.
у Вас точно есть ВЕРТИКАЛЬНЫЙ грид, в котором есть по вертикали в первом столбце НАЧИНАЯ СО ВТОРОЙ строки столько ячеек, сколько у Вас задано в Edit1.Text ?!

например, если в Edit1.Text число 5 - тогда должно быть в гриде 6 (шесть) строк, где числа должны быть в ячейках начиная со 2-й и заканчивая 6-й.

может быть, Вы хотели так ?:
Код:
A[i]:=StrToInt(StringGrid1.Cells[i-1,0]);
p.s. а ещё не вижу контроля, чтобы вы проверяли число в Edit1.Text, чтобы оно было НЕ БОЛЬШЕ размера массива A (в вашем случае не больше семи)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.10.2011, 19:38   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Всё равно пишет ошибку
Такое впечатление что то что он пишет является единственной ошибкой в мире. Наверное поэтому ты думаешь что все знают что это за ошибка.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2011, 19:48   #4
Fri
Пользователь
 
Регистрация: 24.04.2011
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение

в StringGrid первый параметр - индекс столбца,
второй параметер - индекс строки.
у Вас точно есть ВЕРТИКАЛЬНЫЙ грид, в котором есть по вертикали в первом столбце НАЧИНАЯ СО ВТОРОЙ строки столько ячеек, сколько у Вас задано в Edit1.Text ?!
[/I]
Ну я задал параметры грида такие: ColCount: 7 , RowCount: 1.

В программе в едите(где задаю n) пишу 7.



Цитата:
Сообщение от Stilet Посмотреть сообщение
Такое впечатление что то что он пишет является единственной ошибкой в мире. Наверное поэтому ты думаешь что все знают что это за ошибка.
Ошибку пишет как я понял как раз таки в переводе числа. "is not a valid integer value".
Если попробывать добавить в программу функцию трим (
Код:
A[i]:=StrToIntDef(Trim(StringGrid1.Cells[0,i]),0);
) то в ответе сумма получается просто 1.

---------
Попробую в консольном написать. Всё таки мне кажется я тут с гридом намутил....

Последний раз редактировалось Fri; 23.10.2011 в 20:23.
Fri вне форума Ответить с цитированием
Старый 23.10.2011, 20:35   #5
Fri
Пользователь
 
Регистрация: 24.04.2011
Сообщений: 26
По умолчанию

Хм...написал в консольном виде, так прога в конце вылетает

Код:
uses
  SysUtils;
type
  mas=array[1..7] of Integer;
 var
 S,i,N:Integer;
 max,min,maxi,mini:Integer;
 A:mas;
begin
 write('N='); read(N);
 for i:=1 to N do
 begin
   write('A[',i,']=');
   read(A[i]);
 end;
 S:=1;
 max:=A[1];
 min:=A[1];
 maxi:=1;
 mini:=1;
for i:=1 to N do
if A[i]>max then
begin
  max:=A[i];
  maxi:=i;
end;
for i:=1 to N do
if A[i]<min then
begin
  min:=A[i];
  mini:=i;
end;

for i:=maxi to mini do
begin
S:=S*A[i];
Writeln('PROIZVED=',S);
Readln;

end;

end.
Где тут ошибка???

Последний раз редактировалось Fri; 23.10.2011 в 21:16.
Fri вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
среднее арифметическое между первый положительным и последним элементами массива Whitek Помощь студентам 2 19.10.2010 23:08
Поменять местами строку с минимальным и максимальным элементами deathz0r Помощь студентам 0 05.06.2010 17:33
Найти сумму чисел последовательности, расположенных между максимальным отрицательным и минимальным положи Maks6169 Помощь студентам 6 02.12.2009 10:38
в двухмерном массиве поменять местами столбцы с максимальным и минимальным элементами Лёха Помощь студентам 5 18.12.2007 18:12