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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2017, 21:40   #1
Alfanok
Новичок
Джуниор
 
Регистрация: 29.10.2017
Сообщений: 5
По умолчанию Помогите написать код для небольшой задачки в delphi.

Нужно посчитать сумму чисел, от первого отрицательного до второго отрицательного. Я сделал код но ответ всегда 10, в чём ошибка?
Код:
var 
a:array[0..4] of integer;
i,j,l,k,s:integer;
begin
s:=0;
for i:=0 to 4 do
 a[i]:=StrToInt(StringGrid1.Cells[i,0]);
 for i:=0 to 4 do begin
   if (a[i]<0) then j:=i
  else Break;
 end;
 for i:=4 downto 0 do begin
   if (a[i]<0) then k:=i
 else Break;
end;
for l:=j to k do
s:=s+l;
 Label3.Caption:=inttostr(s);
end;
Alfanok вне форума Ответить с цитированием
Старый 29.10.2017, 22:27   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Знаешь что, выведи на экран k, j
Чему равны?
ura_111 вне форума Ответить с цитированием
Старый 29.10.2017, 22:27   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
s:=s+a[l];
Что должно быть результатом массива?
Цитата:
-1 -2 -3 -4

Код:
for i:=0 to 4 do
 begin
    if a[i] < 0 then 
     begin
       s:=0;
       k:=i+1;
        while (a[k]>0) and (k<=4) do
             begin s:=s+a[k]; inc(k); end;
     break;
     end
 end;
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 29.10.2017 в 22:44.
Aleksandr H. вне форума Ответить с цитированием
Старый 29.10.2017, 22:33   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

И вроде "Break не else"

Код:
if (a[i]<0) then j:=i
  else Break;
а в 'if". Т.е. нужно: сработало условие -> j:=i -> аварийный выход

А в массиве есть положительные числа?
ura_111 вне форума Ответить с цитированием
Старый 29.10.2017, 22:44   #5
Alfanok
Новичок
Джуниор
 
Регистрация: 29.10.2017
Сообщений: 5
По умолчанию

Вывел k и j ответ: j=0 и k=4, а сумма 10. Если без break то ответ:j=4 и k=0, а сумма 0. Да положительные есть. Отрицательные в 1 и 5 столбике.

Последний раз редактировалось Alfanok; 29.10.2017 в 22:47.
Alfanok вне форума Ответить с цитированием
Старый 29.10.2017, 22:44   #6
Alfanok
Новичок
Джуниор
 
Регистрация: 29.10.2017
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Что должно быть результатом массива?
Сумма. Ваш код правильный, только я хочу через for.

Последний раз редактировалось Alfanok; 29.10.2017 в 22:50.
Alfanok вне форума Ответить с цитированием
Старый 29.10.2017, 22:52   #7
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

НА СТР 2

Последний раз редактировалось ura_111; 30.10.2017 в 00:36.
ura_111 вне форума Ответить с цитированием
Старый 29.10.2017, 22:57   #8
Alfanok
Новичок
Джуниор
 
Регистрация: 29.10.2017
Сообщений: 5
По умолчанию

Значений массива. Оно должно делать: в первом for первое отрицательное и сохранить, а во втором for второе отрицательное с конца, сохранить и в третьем for найти сумму чисел между 1 и 2 for.

Последний раз редактировалось Alfanok; 29.10.2017 в 23:12.
Alfanok вне форума Ответить с цитированием
Старый 29.10.2017, 23:27   #9
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

НА СТР.2

Последний раз редактировалось ura_111; 30.10.2017 в 00:36.
ura_111 вне форума Ответить с цитированием
Старый 29.10.2017, 23:52   #10
Alfanok
Новичок
Джуниор
 
Регистрация: 29.10.2017
Сообщений: 5
По умолчанию

Ты чуть не правильно после j:=i и k:=i нужна точка с запятой, не уверен на счет скобок для 1 действия, но всё равно ответ не тот. Вот другой код для этого задания, друг сделал(но он с boolean, я та понял что там делается, но учитель подумает что кто-то мне помог)
Код:
var
  a:array[0..4] of Integer;
  summa,i:Integer;
  iscalc:Boolean;
begin
 for i:=0 to 4 do
 a[i]:=StrToInt(StringGrid1.Cells[i,0]);
    isCalc:=False;
summa:=0;
for i:=Low(a) to High(a) do
  if (a[i]<0) then
    if (isCalc=False) then
       isCalc:=True
    else
       break
  else
    if isCalc then
       summa:=summa+a[i];
 Label3.Caption:=IntToStr(summa);
 end;
Alfanok вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Учу Java.Помогите понять как работает небольшой код WowWow Общие вопросы по Java, Java SE, Kotlin 3 18.09.2017 11:43
Помогите написать код в Delphi для БД. Sentinel2h БД в Delphi 23 23.05.2017 14:34
Помогите написать код в Delphi exbv1 Помощь студентам 1 16.03.2015 09:47
Помогите написать код для торта!!! Хладна_Вода Свободное общение 37 28.10.2013 11:11