Найти сумму положительных, максимальное и минимальное, произведение между максимальным и минимальным - PascalABC.NET
Формулировка задачи:
Здравствуйте, дорогие друзья!
Сразу к делу: задали разобрать массив, а точнее найти сумму всех положительных, максимальное и минимальное, а также произведение между максимальным и минимальным (не включительно!!).
все бы хорошо, да вот проблема, при работе с отрицательными числами не находится максимальное число (выдает мне 0 ), то есть , если есть в массиве среди отрицательных хотя бы единица, то ее он мне и напишет , а если ТОЛЬКО отрицательные... ну вы поняли.
А сам вопрос заключается в следующем: где эта ошибка в коде?
Листинг программы
- var
- a: array[1..100] of integer;
- n, i, sum, pr, max, min, maxI, minI: integer;
- begin
- readln(n);
- sum := 0;
- max := a[1];
- min := a[1];
- pr := 1;
- maxI := 1;
- minI := 1;
- for i := 1 to n do
- read(a[i]);
- for i := 1 to n do
- write(a[i], ' ');
- writeln;
- for i := 1 to n do
- begin
- if a[i] > max then
- begin
- max := a[i];
- maxI := i;
- end;
- if a[i] > 0 then sum := sum + a[i];
- if a[i] < min then
- begin
- min := a[i];
- minI := i;
- end;
- end;
- if minI > maxI then
- begin
- for i := maxI + 1 to minI - 1 do
- pr := pr * a[i];
- end
- else
- begin
- for i := minI + 1 to maxI - 1 do
- pr := pr * a[i];
- end;
- write(sum, ' ', max, ' ', min, ' ', pr, ' ', maxI);
- end.
Решение задачи: «Найти сумму положительных, максимальное и минимальное, произведение между максимальным и минимальным»
textual
Листинг программы
- var
- a: array[1..100] of integer;
- n, i, sum, pr, max, min, maxI, minI: integer;
- begin
- readln(n);
- for i := 1 to n do
- read(a[i]);
- for i := 1 to n do
- write(a[i], ' ');
- sum := 0;
- max := a[1]; min := a[1]; { <== Инициализацию начального минимума
- и максимума нужно делать после ввода массива, иначе в PascalABC.Net
- эти значения по умолчанию равны 0, поэтому при вводе отрицательных
- чисел этот нуль и будет максимумом. }
- pr := 1;
- maxI := 1;
- minI := 1;
- writeln;
- for i := 1 to n do
- begin
- if a[i] > max then
- begin
- max := a[i];
- maxI := i;
- end;
- if a[i] > 0 then sum := sum + a[i];
- if a[i] < min then
- begin
- min := a[i];
- minI := i;
- end;
- end;
- if minI > maxI then
- begin
- for i := maxI + 1 to minI - 1 do
- pr := pr * a[i];
- end
- else
- begin
- for i := minI + 1 to maxI - 1 do
- pr := pr * a[i];
- end;
- writeln(sum, ' ', max, ' ', min, ' ', pr, ' ', maxI);
- {writeln('Сумма положительных = ', sum);
- writeln('Максимальное = ', max);
- writeln('Минимальное = ', min);
- writeln('Произведение между максимальным и минимальным (не включительно!!) = ', pr);}
- end.
Объяснение кода листинга программы
- Объявлены переменные:
- a: массив из 100 целых чисел;
- n, i, sum, pr, max, min, maxI, minI: целые числа.
- Считывается количество чисел в массиве (n).
- Заполняется массив a.
- Выводятся все числа массива.
- Инициализируются начальные значения суммы, максимального и минимального числа, а также их индексов.
- Вычисляется произведение между максимальным и минимальным числом.
- Цикл по всем элементам массива.
- Если текущее число больше максимального, то обновляются значения максимального числа и его индекса.
- Если текущее число положительное, то прибавляется к сумме.
- Если текущее число меньше минимального, то обновляются значения минимального числа и его индекса.
- Если индекс минимального числа больше индекса максимального числа, то ищется произведение между максимальным и минимальным числом, начиная с индекса, следующего за индексом максимального числа и заканчивая индексом, предшествующим индексу минимального числа.
- Если индекс минимального числа меньше или равен индексу максимального числа, то ищется произведение между максимальным и минимальным числом, начиная с индекса, следующего за индексом минимального числа и заканчивая индексом, предшествующим индексу максимального числа.
- Выводятся сумма, максимальное число, минимальное число и произведение между максимальным и минимальным числом.
- Выводится информация о сумме положительных чисел, максимальном и минимальном числе и произведении между максимальным и минимальным числом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д