Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Одномерный массив

Автор: S-Vanek007 10.11.2008 14:33

Задан одномерный массив A(N) (N<=60). Посчитать сумму элементов находящихся между максимальным и минимальным элементами. Результат вывести на печать.

Program lll;
var
a:array [1..60] of integer;
n,i,max,min,s:real;
begin
for i:=1 to 60 do
begin
write ('N=',i,':');
readln (a[i]);
end;
max:=1;
min:=1;
for i:=1 to 60 do
begin
if a [max]<a[i] then max:=i;
if a [min]>a[i] then min:=i;
end;
if min>max then
begin
i:=max;
max:=min;
min:=i;
end;
for i:=min to max do
S:=????????????????
writeln ('S=", s);
readln;
end.

Подскажите пожалуйста на месте ???? что надо написать, и скажите где ещё ошибки (если они есть). Заранее спасибо!

М
Просьба использовать теги при публикации кода! Исправлено.
Lapp


Автор: Гость 10.11.2008 15:58

Не слишком ли много памяти для таких переменных n,i,max,min
Не вижу инициализации S ну и должно следущее
S:=S+a[i];

Автор: volvo 10.11.2008 16:15

Цитата
Не слишком ли много памяти для таких переменных n,i,max,min
Проблема не в этом, а в том, что ЭТОТ код никогда не будет компилироваться: i: Real и For i := ... - несовместимо по определению... Переменная i должна быть перечислимого типа...

Цитата
Не вижу инициализации S
Читай доки по языку, глобальная переменная инициализируется нулем, хотя закладываться на это не стОит... Сегодня она глобальная, завтра - нет, потом ищи проблему...

Автор: Гость 10.11.2008 16:34

Цитата
Проблема не в этом, а в том, что ЭТОТ код никогда не будет компилироваться: i: Real и For i := ... - несовместимо по определению... Переменная i должна быть перечислимого типа...


Это оже верно подмечено

но не согласен с
Цитата
Читай доки по языку, глобальная переменная инициализируется нулем, хотя закладываться на это не стОит... Сегодня она глобальная, завтра - нет, потом ищи проблему...

не все языки при объявлении переменной инициализируют ее нулем.

Автор: volvo 10.11.2008 20:36

Цитата
не все языки при объявлении переменной инициализируют ее нулем.
Ты знаешь, меня "все языки" в принципе не интересуют. Я не знаю их все, чтобы что-то о них говорить, да и ты тоже наверняка не знаешь... В данном случае достаточно того, что и компилятор Паскаля от фирмы Борланд, и вообще любой компилятор Паскаля, если он хочет хоть сколько-нибудь соответствовать iso7185, обнуляет глобальные переменные. А софистикой и подменой понятий ты на других форумах занимайся... dry.gif

Автор: Гость 12.11.2008 1:20


Program Lob_3;
Var
A:array [1..60] of integer;
i,max,min,s,n, imin, imax:integer;
BEGIN
write ('Введите число N=');
readln (A[i]);
for i:=1 to 5 do
writeln (A[i]);
max:=A[1];
imax:=1;
for i:=1 to 5 do
begin
if A[i]>max then
max:=A[i];
imax:=i
end;
min:=A[i];
imin:=1;
for i:=1 to 5 do
begin
if A[i]<min then
min:=A[i];
imin:=i;
end;
for i:=imin to imax do
begin
if ?????????? then
S:=S+A[i]
end;
writeln ('S=', s);
END.


.


Вот исправил, подскажите что на месте вопросов должно быть?

Автор: samec 12.11.2008 2:03

 
Program Lob_3;
Var
A:array [1..60] of integer;
i,max,min,s,n, imin, imax:integer;
BEGIN
write ('Введите число N=');
readln (A[i]); { <- просишь ввести число N - а вводишь что????}
for i:=1 to 5 do {<- тут цикл, видимо должен быть не до 5 а как раз до неведённого тобою N}
writeln (A[i]); {<- тут выводишь, ещё невведенные элементы массива на экран - ненадо так делать smile.gif}
{Не ввел элементы массива, а начинаешь среди них искать максимальный и минимальный - нехорошо.}
max:=A[1];
imax:=1;
for i:=1 to 5 do {<- тут цикл, видимо должен быть не до 5 а как раз до неведённого тобою N}
begin
if A[i]>max then
max:=A[i];
imax:=i {<- таким образом ты никогда не найдешь НОМЕР максимального элемента....надо после IF использовать begin...end}
end;
min:=A[i]; {<- почему индекс i? а не единица????}
imin:=1;
for i:=1 to 5 do {<- опять цикл до пяти, а не до N}
begin
if A[i]<min then
min:=A[i];
imin:=i; {<- писАл уже, скобки расставь операторные}
end;
for i:=imin to imax do
begin
if ?????????? then {<- а зачем тут это воообще???}
S:=S+A[i]
end;
writeln ('S=', s);
END.



форматируй текст программы - так многие ошибки гораздо легче заметить, нежели в сплошном тексте. вот smile.gif

Автор: Гость 12.11.2008 3:27

ага. спасибо. замечания учёл. программа пашет! СПАСИБО!