Например
Входной файл:
7
-5 10 -2 -3 4 -7 1
Выходной файл:
-8
Комментарий - Минимальная сумма подряд идущих чисел начинается с позиции 3 и заканчивается позицией 6: (-2) + (-3) + 4 + (-7) = -8
procedure TForm1.Button1Click(Sender: TObject);
const
//Множество разделителей.
D = ['.', ',', ':', ';', ' ', #9, #10, #13];
//Величина приращения длины динамического массива.
Capacity = 10;
var
Arr : array of Extended;
S : String;
i, j, k, Len, Pos1 : Integer;
Sum, SumMin : Extended;
begin
//Выделяем числа из текста и формируем массив.
S := Memo1.Text;
Len := Length(S);
Pos1 := 0;
j := 0;
for i := 1 to Len do begin
//Пропускаем разделители.
if S[i] in D then Continue;
//Отслеживаем начало записи числа.
if (i = 1) or (S[i - 1] in D) then Pos1 := i;
//Отслеживаем конец записи числа.
if (i = Len) or (S[i + 1] in D) then begin
//Если требуется, увеличиваем длину массива.
if j = Length(Arr) then SetLength(Arr, j + Capacity);
//Добавляем новый элемент в массив.
Arr[j] := StrToFloat( Copy(S, Pos1, i - Pos1 + 1) );
//Индекс следующего элемента массива.
Inc(j);
end;
end;
//Изменяем длину массива в соответствие
//с количеством добавленных в него элементов.
if j < Length(Arr) then SetLength(Arr, j);
//Если массив пуст.
if j = 0 then begin
ShowMessage('В тексте числа не найдены. Действие отменно.');
Exit;
end;
//Поиск минимальной суммы последовательно идущих чисел.
SumMin := Arr[0];
for i := 0 to High(Arr) do
for j := i to High(Arr) do begin
Sum := 0;
for k := i to j do Sum := Sum + Arr[k];
if Sum < SumMin then SumMin := Sum;
end;
//Ответ.
ShowMessage('Минимальная сумма: ' + FloatToStr(SumMin));
end;
program Project1;
const
//Множество разделителей.
D = ['.', ',', ':', ';', ' ', #9, #10, #13];
//Длина массива.
N = 100;
var
Arr : array[1..N] of Extended;
//Если нужен массив целых чисел:
//Arr : array[1..N] of Integer;
S : String;
i, j, k, Cnt, Len, Pos1 : Integer;
Sum, SumMin : Extended;
//Если используем массив целых чисел:
//Sum, SumMin : Integer;
begin
Writeln('Задайте последовательность чисел в виде строки:');
Readln(S);
//Выделяем числа из текста и формируем массив.
Len := Length(S);
Pos1 := 0;
Cnt := 0;
for i := 1 to Len do begin
//Пропускаем разделители.
if S[i] in D then Continue;
//Отслеживаем начало записи числа.
if (i = 1) or (S[i - 1] in D) then Pos1 := i;
//Отслеживаем конец записи числа.
if (i = Len) or (S[i + 1] in D) then begin
//Индекс текущего элемента массива.
Inc(Cnt);
//Добавляем новый элемент в массив.
Val( Copy(S, Pos1, i - Pos1 + 1), Arr[Cnt], j );
end;
end;
//Поиск минимальной суммы последовательно идущих чисел.
SumMin := 0;
if Cnt > 0 then SumMin := Arr[1];
for i := 1 to Cnt do
for j := i to Cnt do begin
Sum := 0;
for k := i to j do Sum := Sum + Arr[k];
if Sum < SumMin then SumMin := Sum;
end;
//Ответ.
if Cnt > 0 then
Writeln('Минимальная сумма: ', SumMin)
else
Writeln('В тексте числа не обнаружены.')
;
Readln;
end.
Похожие записи/страницы:
- Учитель математики на уроке написал N чисел. Парень сидевший на последней парте задумался, а какая будет…
- Дан порядок N чисел. Нужна найти минимальную сумму подряд идущих чисел. Нужно вычислить нужную сумму - Pascal(Паскаль)
- Есть последовательность чисел -5 10 -2 -3 4 -7 1, нужно найти минимальную сумму подряд идущих чисел.. В ответе…
- Написать программу, которая считает какие числа и сколько раз встречаются в файле - Pascal(Паскаль)
- Дан массив целых чисел из n элементов, заполненный случайным образом числами из промежутка [-50,50]. Вставить…
- Заданы две последовательности A1,A2, :, An и B1,B2,:,Bm. Рассмотрим таблицу Cij=Ai+Bj. Необходимо найти какие…
- Дана строка, состоящая из букв, цифр, запятых, точек, знаков «+» и «–». Выделить под-строку, которая…
- Дано множество чисел и некоторое число. Можно ли из множества выбрать два элемента, которые в сумме дают…