Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Задача на массивы, Pascal. Помогите найти ошибку (http://www.tehnari.ru/f41/t52378/)

~nezabudka~ 28.05.2011 19:44

Задача на массивы, Pascal. Помогите найти ошибку
 
Дан вектор А[1:15].

1) найти минимальный элемент

2) найти произведение минимального элемента и суммы элементов 2ектора, больших - 2

3) найти произведение среднеарифметического значения вектора на максимальный элемент вектора.

4) найти номер максимального элемента из первых 10 элементов вектора .

В четвертом задании что-то не так :tehnari_ru_117:


PROGRAM VECTOR;
USES WINCRT;
CONST N=15;B=2;
VAR
A:ARRAY[1..15] OF INTEGER;
MIN,MAX,I,S1,S2,P1,MAXX: INTEGER;
SRA,P2:REAL;
BEGIN
RANDOMIZE;
WRITELN(' ЗАДАН ВЕКТОР А:');
FOR I:=1 TO N DO
A[I]:=RANDOM(30)-10;
BEGIN
FOR I:=1 TO N DO
WRITE(A[I]:4);
WRITELN;
WRITELN;
END;
MIN:=A[1];
BEGIN
FOR I:=2 TO N DO
IF A[I]<MIN
THEN MIN:=A[I];
WRITELN(' 1) МИНИМАЛЬНЫЙ ЭЛЕМЕНТ ВЕКТОРА РАВЕН:',MIN:4);
WRITELN;
END;
S1:=0;
P1:=1;
BEGIN
FOR I:=1 TO N DO
IF A[I]>B
THEN
S1:=S1+A[I];
P1:=S1*MIN;
WRITELN(' 2) СУММА ЭЛЕМЕНТОВ >2:',S1:4);
WRITELN;
WRITELN(' ПРОИЗВЕДЕНИЕ МИНИМАЛЬНОГО ЭЛЕМЕНТА И');
WRITELN(' СУММЫ ЭЛЕМЕНТОВ >2 РАВНО:',P1:8);
WRITELN;
END;
BEGIN
S2:=0;
P2:=1;
SRA:=0;
MAX:=A[1];
BEGIN
FOR I:=2 TO N DO
IF A[I]>MAX
THEN MAX:=A[I];
END;
FOR I:=1 TO N DO
S2:=S2+A[I];
SRA:=S2/N;
P2:=SRA*MAX;
WRITELN(' 3) МАКСИМАЛЬНЫЙ ЭЛЕМЕНТ ВЕКТОРА:',MAX:4);
WRITELN;
WRITELN(' СРЕДНЕАРИФМЕТИЧЕСКОЕ ЗНАЧЕНИЕ ВЕКТОРА:',SRA:8:2);
WRITELN;
WRITELN(' ПРОИЗВЕДЕНИЕ СРЕДНЕАРИФМЕТИЧЕСКОГО ЗНАЧЕНИЯ ВЕКТОРА');
WRITELN(' НА МАКСИМАЛЬНЫЙ ЭЛЕМЕНТ РАВНО:',P2:8:2);
WRITELN;
END;
MAX:=A[1];
MAXX:=1;
BEGIN
FOR I:=1 TO 10 DO
IF A[I]>MAX
THEN
BEGIN
MAX:=A[I];
MAXX:=I;
WRITELN(' 4) МАКСИМАЛЬНЫЙ ЭЛЕМЕНТ ИЗ ПЕРВЫХ 10-И РАВЕН:',MAX:4,', ЕГО НОМЕР:',MAXX:4);
END;
END;
END.

Vladimir_S 28.05.2011 20:32

Цитата:

Сообщение от ~nezabudka~ (Сообщение 528383)
В четвертом задании что-то не так

Дык опять напортачено с расстановкой операторных скобок.
Для начала:
1. Каждый блок-задание Вы заключаете в операторные скобки BEGIN-END. В принципе это не ошибка, но просто абсолютно не нужно. Для читабельности лучше воспользоваться пустыми строками.
2. Тоже не ошибка - но КАКОГО БЕСА ЛЫСОГО ВЫ НАБИВАЕТЕ ПРОГРАММУ КАПСАМИ? Это совсем не в традициях ни Паскаля, ни его прародителя Алгола-60, ни вообще Виртовских языков. Это стиль полузабытого Фортрана.
3. Всем начинающим программистам настоятельно рекомендую не пренебрегать отступами, лесенками и т.п. форматированием листинга. Это делает код намного более читабельным и позволяет избежать ошибок, на которых, в частности, Вы подрываетесь.
Вот фрагмент программы, каким он должен, с моей точки зрения, выглядеть (задание 4).

Код:

Max:=A[1];
MaxX:=1;
For i:=2 to 10 do
 if A[i]>Max then
  begin
  Max:=A[i];
  MaxX:=i;
  end;
Writeln('  4) МАКСИМАЛЬНЫЙ ЭЛЕМЕНТ ИЗ ПЕРВЫХ 10-И  РАВЕН: ',Max:4,',  ЕГО НОМЕР: ',MaxX:4);
Readln
End.



Часовой пояс GMT +4, время: 12:44.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.