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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2013, 19:25   #1
---Demon---
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 22
По умолчанию Нужно исправить програму

Не правильно считает среднее значение, не могу понять почему!
Вычислить среднее арифметическое кодов элементов отсортированного массива, имеющих индекс кратный трем.
Не коды должны быть кратны 3, а индексы!
Код:
program Sortirovka;
uses Crt;
type mas=array[Byte] of char;
procedure sort(var a:mas;n:byte);
var i,j,imin:byte;
    min:char;
begin
j:=n;
while j > 1 do
 begin
  min := a[1];
  imin := 1;
  for i := 2 to j do
  if a[i] < min then
   begin
    min := a[i];
    imin := i
   end;
  a[imin] := a[j];
  a[j] := min;
  j := j - 1
 end;
end;
function sred(a:mas;n:byte):real;
var i:byte;
    s:real;
begin
s:= 0;
for i := 1 to n do
s := s + ord(a[i]);
sred:=s/n;
end;

var a:mas;
    n,i:byte;
    f:text;
begin
clrscr;
write('Vvedite razmernost massiva n:');
readln(n);
writeln('Vvedite elementy massiva');
for i := 1 to n do
 begin
  write('a[', i, ']=');
  readln(a[i]);
 end;
clrscr;
writeln('Ishodnyj massiv:');
for i:=1 to n do
write(a[i]);
writeln;
sort(a,n);
writeln('Sortirovka v poryadke ubvaniu:');
for i := 1 to n do
write(a[i]);
writeln;
writeln('Srednee arifmeticheskoe kodov...=', sred(a,n):0:3);
assign(f,'Kod.txt');
rewrite(f);
for i:=1 to n do
if i mod 3=0 then write(f,' ',ord(a[i]));
close(f);
readln
end.
---Demon--- вне форума Ответить с цитированием
Старый 28.05.2013, 20:31   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Функция, в которой вычисляется среднее не сепарирует элементы массива по признаку делимости индекса на 3.
Код:
s:= 0;
for i := 1 to n do
s := s + ord(a[i]);
sred:=s/n;
Можно так, например:
Код:
s:= 0; k := 0;
for i := 1 to n do
   if ((i mod 3) = 0) then begin
      s := s + ord(a[i]);
      k := k + 1;
   end;
sred:=s/k;

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 28.05.2013, 21:03   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Функция, в которой вычисляется среднее не сепарирует элементы массива по признаку делимости индекса на 3.
Код:
s:= 0;
for i := 1 to n do
s := s + ord(a[i]);
sred:=s/n;
И, кроме того, элементы массива индескируются с 0, а перебор начинается с 1 - a[0] игнорируется, хотя 0 делится на 3 без остатка.
Цитата:
Можно так, например:
Код:
s:= 0; k := 0;
for i := 1 to n do
   if ((i mod 3) = 0) then begin
      s := s + ord(a[i]);
      k := k + 1;
   end;
sred:=s/k;

Как-то так, ...
Извращение гнать цикл n раз, если нужна сумма всего n/3 слагаемых. А лишний условный оператор - вообще беда для современных суперскалярных процессоров.
Код:
for i := 0 to n div 3 do
  inc(s, ord(a[i*3]));
s-andriano вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно исправить Hannelore Microsoft Office Excel 6 31.03.2013 20:39
Нужно дополнить програму (Турбо Паскаль) Sinner1994 Паскаль, Turbo Pascal, PascalABC.NET 3 26.05.2012 11:38
Нужно написать програму на делфи для тестирования студентов. Romati Помощь студентам 4 15.04.2010 08:48
Помогите создать програму для роботы с файлами, пожалуйста помогите нужно очень срочно Сергей Человек Фриланс 3 06.07.2009 19:30