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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2013, 14:32   #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;
     k:integer;
 begin
     s:= 0;
      for i := 1 to n do
       if i mod 3=0 then begin
        s := s + ord(a[i]);
         sred:=s/n;
          inc(k)
 end;
end;

var  a:mas;
     n,i:byte;
     f:text;
     s:real;
     k:integer;
 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)/k: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--- вне форума Ответить с цитированием
Старый 02.06.2013, 16:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

На какой строке выдает знаешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2013, 16:29   #3
---Demon---
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
На какой строке выдает знаешь?
63 writeln('Srednee arifmeticheskoe kodov...=', sred(a,n)/k:0:3);
---Demon--- вне форума Ответить с цитированием
Старый 02.06.2013, 16:44   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Во-первых:
Код:
function sred(a:mas;n:byte):integer;
var i,
     s,
     k:integer;
 begin
     s:= 0; k:=0;
      for i := 1 to n do
       if i mod 3=0 then begin
        s := s + ord(a[i]);
        inc(k)
       end;
       sred:=s;
end;
Во вторых:
Код:
 
s:=sred(a,n);
if k<>0 then writeln('Srednee arifmeticheskoe kodov...=', s/k:0:3)
else writeln('Elementov net...');
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2013, 17:02   #5
---Demon---
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Во-первых:
Код:
function sred(a:mas;n:byte):integer;
var i,
     s,
     k:integer;
 begin
     s:= 0; k:=0;
      for i := 1 to n do
       if i mod 3=0 then begin
        s := s + ord(a[i]);
        inc(k)
       end;
       sred:=s;
end;
Во вторых:
Код:
 
s:=sred(a,n);
if k<>0 then writeln('Srednee arifmeticheskoe kodov...=', s/k:0:3)
else writeln('Elementov net...');
тестовая задача qwertyasd он мне выдает Elementov net..., а должно сложится коды t+q+a и разделится на 3
---Demon--- вне форума Ответить с цитированием
Старый 02.06.2013, 18:37   #6
pray_driver
Форумчанин
 
Аватар для pray_driver
 
Регистрация: 18.08.2010
Сообщений: 140
По умолчанию

Цитата:
Сообщение от ---Demon--- Посмотреть сообщение
63 writeln('Srednee arifmeticheskoe kodov...=', sred(a,n)/k:0:3);
А это нормально, что в основной программе декларируется целочисленное k, но никак не определяется до использования?

Тут по-моему к бабке не ходи, будет деление на ноль :-)

Правила хорошего тона программирования конечно не обязательны, но облегчают сильно. Если есть вероятность, что где-то что-то будет неопределено, нужно выкидывать исключения.
Люди бывают десяти типов: те, кто знают двоичную систему, и те, кто нет
pray_driver вне форума Ответить с цитированием
Старый 02.06.2013, 20:07   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а должно
Ну а кто тебе мешает запустить программу под отладчиком и пройтись по шагам?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2013, 23:26   #8
---Demon---
Пользователь
 
Регистрация: 03.04.2013
Сообщений: 22
По умолчанию

В любом случае спасибо за помощь!
---Demon--- вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка деления на ноль Сметуська Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 14.03.2011 18:13
Ошибка деления на ноль El_Blasto Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 16.12.2010 10:09
Delphi, ошибка деления на ноль, хотя знаменатель не ноль Эренка Помощь студентам 7 22.04.2010 15:56
Протаюулировать функцию без деления на ноль tohkaRu Фриланс 3 18.03.2010 19:33
Ошибка деления на ноль nolz Помощь студентам 3 07.03.2010 13:14