Turbo Pascal. Нужна помощь
задание: Задана последовательность из N вещественных чисел. Вычислить порядковый номер числа наиболее приближенному к среднему арифметическому максимального и минимального чисел данной последовательности.
проблема: при вводе одинаковых значений нужно чтобы ВСЕ номера наиболее приближенных элементов выводились на экран, а не как у меня - только последний текст программы: program srednee; uses crt; const H=30; procedure vvod(z:integer; var N:integer); begin repeat {$i-} writeln ('Vvedite kolichestvo elementov posledovatelnosti (tseloe chislo), 1<N<30'); readln (N); z:=ioresult; {$I+} if ioresult <>0 then begin writeln ('Nekorrektnii vvod. Vvedite kolichestvo elementov posledovatelnosti (tseloe chislo), 1<N<30'); readln(N); end until z = 0; end; procedure deistvie(min, max:real; var sr:real); begin sr:=(min+max)/2; writeln('srednee = ',sr:3:2); end; procedure vivod(var nomer:integer); begin writeln(' poriadkovii nomer chisla naibolee pribligennogo k srednemy arifmeticheskom - ',nomer); end; var A,B:array [1..H] of real; N, i, nomer,z:integer; max,min,sr,prib:real; begin {$I-} clrscr; writeln('Programma nahodit poriadkovii nomer chisla naibolee pribligennogo'); writeln('k srednemy arifmeticheskomy max i min chisel dannoi posledovatelnosti'); repeat vvod(z,N); if (N > H) or (N<=1) then begin writeln ('Necorrektnii vvod. 1<N<30'); writeln ('Vvedite kolichestvo elementov posledovatelnosti (tseloe chislo), 1<N<30'); readln (N); end; until (N < H) and (N > 1); for i:=1 to N do begin repeat {$I-} write('element[', i, ']='); readln (A[i]); z:=ioresult; {$I+} if z <>0 then begin writeln('Vvedennoe chislo nekorrectno! Povtorite vvod.'); end; until z = 0; end; writeln ('rezyltat vvoda: '); write('array: ['); for i:= 1 to N do begin write(',',A[i]:1:2); end; write (']'); readln; min:=A[1]; for i:=1 to N do if (A[i] <= min) then min:=A[i]; writeln('min = ',min:3:2); max:=A[1]; for i:=1 to N do if (A[i] >= max) then max:=A[i]; writeln('max = ',max:3:2); deistvie (min,max,sr); for i:=1 to N do B[i]:=abs(sr-A[i]); prib:=B[i]; nomer:=1; for i:=1 to N do if (B[i] <= prib) then begin prib:=B[i]; nomer:=i; end; vivod (nomer); readkey; end. заранее спасибо за внимание |
Да, Света, - наворотили от души! Нет, оно, конечно, прекрасно, что Вы стараетесь использовать подпрограммы, но это не значит, что каждый чих (типа нахождения среднего арифметического двух чисел) нужно непременно оформлять в виде процедуры или функции. Кроме того, Вы, похоже, несколько путаетесь со статусами переменных (параметров) подпрограмм (глобальные, формальные, внутренние). Но ничего, разберетесь. Очень много лишнего.
Ну вот, как вариант: Код:
Uses CRT; |
спасибо))
насчет процедур и функций - нас так заставляют делать с целью познакомиться со всей этой конструкцией. но да, я, наверное, слишком сильно раздробила программу еще раз спасибо за помощь) |
Часовой пояс GMT +4, время: 09:32. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.