02.03.2014, 14:37 | #1 (permalink) |
Member
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Turbo Pascal. Нужна помощь
проблема: при вводе одинаковых значений нужно чтобы ВСЕ номера наиболее приближенных элементов выводились на экран, а не как у меня - только последний текст программы: 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. заранее спасибо за внимание |
02.03.2014, 14:37 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Вам не нужно тратить время на поиск аналогичных тем, вот они Нужна срочная помощь с программой на Pascal Работа с файлами, Pascal, нужна помощь Строки, Pascal. Нужна помощь Помощь в написании программы по TURBO PASCAL Нужна помощь в решении задачи Pascal Pascal, ABC, тип записи, нужна помощь |
02.03.2014, 20:13 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Да, Света, - наворотили от души! Нет, оно, конечно, прекрасно, что Вы стараетесь использовать подпрограммы, но это не значит, что каждый чих (типа нахождения среднего арифметического двух чисел) нужно непременно оформлять в виде процедуры или функции. Кроме того, Вы, похоже, несколько путаетесь со статусами переменных (параметров) подпрограмм (глобальные, формальные, внутренние). Но ничего, разберетесь. Очень много лишнего.
Ну вот, как вариант: Код:
Uses CRT; const H=30; var A,B:array[1..H] of real; N,i:integer; max,min,sr,prib:real; procedure vvod; var z,q:Integer; begin {$I-} repeat writeln ('Vvedite kolichestvo elementov posledovatelnosti (tseloe chislo), 1<N<30'); readln(N); z:=ioresult; if (z<>0) or (N<1) or (N>H) then writeln ('Nekorrektnii vvod!'); until (z=0) and (N>0) and (N<=H); for q:=1 to N do begin repeat write('element[', q:2, ']= '); readln(A[q]); z:=ioresult; if z<>0 then writeln('Vvedennoe chislo nekorrectno! Povtorite vvod.'); until z=0; end; writeln; writeln ('rezyltat vvoda: '); for q:= 1 to N do write(A[q]:8:2); writeln; end; Begin {$I-} clrscr; writeln('Programma nahodit poriadkovii nomer chisla naibolee pribligennogo'); writeln('k srednemy arifmeticheskomy max i min chisel dannoi posledovatelnosti'); vvod; min:=A[1]; max:=A[1]; for i:=2 to N do begin if (A[i]<min) then min:=A[i]; if (A[i]>max) then max:=A[i]; end; writeln('min = ',min:3:2); writeln('max = ',max:3:2); writeln; sr:=(min+max)/2; for i:=1 to N do B[i]:=abs(sr-A[i]); prib:=B[1]; for i:=2 to N do if B[i]<prib then prib:=B[i]; writeln('Iskomyie nomera:'); for i:=1 to N do if B[i]=prib then write(i:3); readkey; End. |
04.03.2014, 16:10 | #3 (permalink) |
Member
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
спасибо))
насчет процедур и функций - нас так заставляют делать с целью познакомиться со всей этой конструкцией. но да, я, наверное, слишком сильно раздробила программу еще раз спасибо за помощь) |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|