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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2024, 16:41   #1
NikSix
 
Регистрация: 07.01.2024
Сообщений: 5
По умолчанию Даны целые числа a1,a2,...

Доброго времени суток, у меня такое задание на языке Pascal:

223 Даны целые числа a1,a2,... Известно, что a1 > 0 и что среди a2,a3,... есть хотя бы одно отрицательное число. Пусть a1,..., an - члены данной последовательности, предшествующие первому отрицательному члену (n заранее неизвестно). Получить:

г) min (a1 + a2, a2 + a3, ..., an-1 + an);

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

Вот код:
Код:
uses crt;
const
  nmax = 50;
 
var
  a: array[1..nmax * 2] of integer;
  n, i, sum: integer;
 
begin
  randomize;
  repeat
    write('Введите n (n <= ', nmax, ') = ');
    readln(n);
  until n in [1..nmax];
  writeln('[Массив]');
  for i := 1 to n do
  begin
    a[i] := random(99) + 1;
    write(a[i]:4);
  end;
  writeln;
  sum:=0;
  for i:=2 to n do 
    begin
      sum:=a[i-1]+a[i];
      writeln(a[i-1],' + ',a[i],' = ',sum);
      if (a[i-1]+a[i])<(sum) then 
          sum:=a[i-1]+a[i];
    end;
  writeln('Значения индексов: ', a[i-1], ' , ', a[i]);
  writeln('Минимальная сумма индексов: ',sum);
end.

Последний раз редактировалось NikSix; 20.05.2024 в 17:17.
NikSix вне форума Ответить с цитированием
Старый 20.05.2024, 17:08   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,325
По умолчанию

Обычно, когда в задаче есть "n заранее неизвестно", то нужно считывать и обрабатывать числа по одному, а не заводить массив для хранения всех чисел последовательности. Ваш if всегда ложен, т.к. в sum уже сохранена сумма a[i-1] и a[i], а "a[i-1] + a[i]" не может быть меньше самого себя. Вам нужно две переменных: текущая сумма и минимальная сумма; их сравнивать в if и сохранять текущую в минимальную, если нужно. Еще нужно будет решить, чем инициализировать минимальную сумму, и что делать, если последовательность состоит из одного элемента.

UPD. Мне видится примерно так:
Код:
sum := -1;
read(a);
repeat
    read(b);
    if (b >= 0) and ((sum = -1) or (a + b < sum)) then
        sum := a + b;
    a := b;
until b < 0;
if sum = -1 then
    writeln('мало элементов')
else
    write(sum);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 20.05.2024 в 17:52.
BDA на форуме Ответить с цитированием
Старый 21.05.2024, 02:54   #3
NikSix
 
Регистрация: 07.01.2024
Сообщений: 5
По умолчанию

BDA, Ваш ответ мне очень помог, большое спасибо! Код теперь работает как надо
NikSix вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны целые числа N и M (C#) MaKsj Помощь студентам 0 02.11.2022 18:08
Даны целые числа m, a1,..., a20. Найти три натуральных числа i, j, k, каждое из которых не превосходит двадцати, такие, что ai+ aj anabel123123 Помощь студентам 11 24.11.2014 23:43
Множества: Даны целые числа а1,.....,Аn. Вывести на печать сообщение - имеется ли в последовательности х повторяющиеся числа lialia Паскаль, Turbo Pascal, PascalABC.NET 3 24.12.2012 21:11
Даны целые числа р и q. Получить все делители числа q, взаимно простые c г. Владан Паскаль, Turbo Pascal, PascalABC.NET 2 03.12.2012 23:39
Даны целые числа Хутор Паскаль, Turbo Pascal, PascalABC.NET 2 17.12.2010 19:23