Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2012, 00:29   #1
ReMicroN
 
Регистрация: 01.04.2012
Сообщений: 8
По умолчанию Сортировка в виде процедуры с передачей параметра

Прошу помощи!

Нужно переписать след. программу с использованием сортировки в виде процедуры с передачей параметра - кол-во элементов и самих элементов массива, вычислить ср. арифметическое в виде функции, а результат всего вывести в текстовый файл.

Заранее спасибо!
Код:
program sort;
uses crt;
var i,j,k,n,tmp,s: integer;
    sr: real;
    a: array [1..30] of integer;
begin
 clrscr;
 write('N: ');
 readln(n);
 for i:=1 to n do
  begin
   a[i]:=random(20)-10;
   write(a[i]:3);
  end;
 for i:=1 to n do
  begin
   if a[i]<0 then
    begin
     s:=s+sqr(a[i]);
     inc(k);
    end;
   if a[i]>0 then
    a[i]:=i;
   end;
  for i:=1 to n do
   for j:=1 to n-1 do
    if a[i]<a[j] then
     begin
      tmp:=a[i];
      a[i]:=a[j];
      a[j]:=tmp;
     end;
  writeln;
  writeln('Отсортированный массив:');
  for i:=1 to n do
   write(a[i]:3);
  sr:=s/k;
  writeln;
  writeln('Средн. арифм = ',sr);
 readln;
end.
ReMicroN вне форума Ответить с цитированием
Старый 16.05.2012, 08:43   #2
ReMicroN
 
Регистрация: 01.04.2012
Сообщений: 8
По умолчанию

Кто-нибудь поможет?
ReMicroN вне форума Ответить с цитированием
Старый 16.05.2012, 09:19   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

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

например, АБСОЛЮТНО непонятно, зачем:
Код:
   if a[i]>0 then
    a[i]:=i;
   end;
?????!!!
кроме того, у Вас подсчёт не среднего арифметического элементов массива, а среднего арифметического КВАДРАТОВ ОТРИЦАТЕЛЬНЫХ элементов массивов...
впрочем, если Вы сами это писали, то легко поймёте, о чём я...

другие мелкие недочёты (которые увидел), я тоже постарался убрать...
разбирайтесь, допиливайте:
Код:
program sort;
uses crt;

type MyArrayType = array [1..30] of integer;

{процедура сортировки массива}
procedure SortArray(var Arr : MyArrayType; const SizeN : integer);
var 
  i, j, tmp : integer;
begin
  for i:=1 to SizeN-1 do
   for j:=i+1 to SizeN do
    if Arr[i]>Arr[j] then
     begin
      tmp:=Arr[i];
      Arr[i]:=Arr[j];
      Arr[j]:=tmp;
     end;
end;


{функция вычисления среднего арифметического}
function AverArray(Arr : MyArrayType; const SizeN : integer) : real;
var 
  i,k,s : integer;
  sr: real;
begin
 s := 0; 
 k := 0;
 for i:=1 to SizeN do
  begin
   if Arr[i]<0 then
    begin
     s:=s+sqr(Arr[i]);
     inc(k);
    end;
   if Arr[i]>0 then  {??!?!?!?!  Изменять положительные элементы массива?! }
    Arr[i]:=i;       {  да ещё в функции подсчёта сред.арифметического?!?! Бред и нонсенс!   }
 end;
 if k>0 then
   AverArray := s / k
 else
   AverArray := 0;
end;


var 
  i,n: integer;
  a: MyArrayType;
begin
 clrscr;
 Randomize;

 write('N: ');
 readln(n);

 for i:=1 to n do
  begin
   a[i]:=-10 + random(20);
   write(a[i]:3);
  end;
 WriteLn;
 
  SortArray(a, n);

  writeln;
  writeln('Отсортированный массив:');
  for i:=1 to n do
    write(a[i]:3);
  writeln;

  
  writeln;
  writeln('Средн. арифм = ',AverArray(a,n):1:5);
  readln;
end.


p.s. сортировку я чуток изменил алгоритм...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.05.2012, 12:14   #4
ReMicroN
 
Регистрация: 01.04.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
например, АБСОЛЮТНО непонятно, зачем:
Код:
   if a[i]>0 then
    a[i]:=i;
   end;
?????!!!
кроме того, у Вас подсчёт не среднего арифметического элементов массива, а среднего арифметического КВАДРАТОВ ОТРИЦАТЕЛЬНЫХ элементов массивов...
Задание было присвоить значению положительных элементов значение их индекса и вычислить среднее ар. квадратов отр. чисел, так что тут все в порядке.

А за помощь большое спасибо, буду разбираться.
ReMicroN вне форума Ответить с цитированием
Старый 16.05.2012, 13:15   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Задание было присвоить значению положительных элементов значение их индекса
ну так Вы же задание полностью не процитировали..
Поэтому это вопрос и возник.

Цитата:
так что тут все в порядке.
А ноль - это положительное число?!

И ещё, Вы после замены положительных элементов массив не отображаете.
Поэтому трудно понять, были ли замены или нет..
По хорошему, надо сделать вывод массива ещё раз..

p.s. пожалуйста. успехов!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача хранимой процедуры в качестве параметра в функцию xabik БД в Delphi 5 04.08.2011 11:08
Использование имени процедуры в качестве параметра другой процедуры Alexey355 Помощь студентам 1 23.04.2011 13:59
Delphi Fortran DLL передача процедуры в качестве параметра gimlis Помощь студентам 1 23.03.2011 22:52
оформить в виде процедуры. Riza Помощь студентам 1 19.03.2010 15:31
TextBox в качестве параметра функции/процедуры Голованов Д. Microsoft Office Excel 6 01.12.2009 10:38