Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 20.12.2012, 13:18   #1 (permalink)
vitjok
Member
 
Регистрация: 29.09.2012
Сообщений: 72
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Ошибки в программе

Помогите Пожалуйста(((
Код:
program hj;
uses crt;
const
 n=10;
Type
 Tvect=array [1..n] of integer;
var
 V_max,V_min,i, j, n_min1, n_min2, temp :integer;
 vector:Tvect;
 b:boolean;
 arifmet:real;
 min1, min2, arifm, shift :real;

Procedure Arif(nn:integer; AA:Tvect; var arifm:real; var ar_b:boolean);
var
 i,min1,min2,max1,n,max2:integer;
 Sum:real;
begin
 n:=0;
 Sum:=0;
 for i:=1 to nn do
   begin
    Inc(n);
    Sum:=Sum+AA[i];
   end;
 if n=0 then
  begin
   arifm:=0;
   b:=false;
  end
 else
  begin
   arifm:=Sum/n;
   b:=true;
  end;
end;
begin
min1:=abs(vector[1] - arifmet);
 n_min1:=1;
 For i:=2 to n do
  begin
    shift:=abs(vector[i] - arifmet);
    if (shift < min1)
      then
        begin
          min2:=min1;
          n_min2:=n_min1;
          min1:=shift;
          n_min1:=i;
        end;
  end;
 For i:=1 to n do
   begin
     if ((vector[i] > min1) AND (vector[i] < min2))
       then
         min2:=vector[i];
   end;
              if (n_min1=(n_min2+1)) or (n_min1=(n_min2-1))
                then
                 writeln('there are no values between ', vector[n_min1] , ' AND', vector[n_min2] ,' to sort!' )
                else
                begin
                  begin
                    if n_min1>n_min2
                      then
                        begin
                        for i:=(n_min1-1) downto (n_min2+2) do
                          for j:=(n_min2+1) to (i-1) do
                            if vector[j]>vector[j+1]
                              then
                                begin
                                  temp:=vector[j];
                                  vector[j]:=vector[j+1];
                                  vector[j+1]:=temp;
                                end;
                        end;
                    if n_min1<n_min2
                      then
                        for i:=(n_min2-1) downto (n_min1+2) do
                          for j:=(n_min1+1) to (i-1) do
                            if vector[j]>vector[j+1]
                              then
                                begin
                                  temp:=vector[j];
                                  vector[j]:=vector[j+1];
                                  vector[j+1]:=temp;
                                end;
                  end;
                  end;


Begin
 Randomize;
 Writeln('Diapazon slych chisel:');
 Write('V_min= ');
 readln(V_min);
 Write('V_max= ');
 readln(V_max);
 writeln('______________________________');
 writeln;
 For i:=1 to n do
  begin
   vector[i]:=Random(V_max-V_min + 1) + V_min;
   write(vector[i],' ');
  end;
 writeln;
 writeln('______________________________');
 Writeln;
 Arif(n,vector,arifmet,b);
  writeln('Sred. arifm = ', arifmet);
 writeln('Sorting between: ',  vector[n_min1], ' AND ', vector[n_min2]);
 writeln;
 writeln('______________________________');
 writeln;
 For i:=1 to n do
  begin
   write(vector[i]:3);
  end;
 writeln;
 writeln('______________________________');
 end;
  end.
то для чего делалась:
Создать процедуру, определяющую в целочисленном векторе vectorn два элемента, наиболее близкие к среднему арифметическому всех элементов вектора. Элементы, расположенные между ними, отсортировать по возрастанию.
vitjok вне форума   Ответить с цитированием

Старый 20.12.2012, 13:18
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Моя рекомендация - обратите внимание на похожие темы

Ошибка в программе
Документация по программе

Старый 20.12.2012, 14:22   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Витёк, а что, хотел бы я знать, вот это художество означает? Если это процедура или функция, то где ее заголовок? И какую задачу оно решает?
Код:
begin
min1:=abs(vector[1] - arifmet);
 n_min1:=1;
 For i:=2 to n do
  begin
    shift:=abs(vector[i] - arifmet);
    if (shift < min1)
      then
        begin
          min2:=min1;
          n_min2:=n_min1;
          min1:=shift;
          n_min1:=i;
        end;
  end;
 For i:=1 to n do
   begin
     if ((vector[i] > min1) AND (vector[i] < min2))
       then
         min2:=vector[i];
   end;
              if (n_min1=(n_min2+1)) or (n_min1=(n_min2-1))
                then
                 writeln('there are no values between ', vector[n_min1] , ' AND', vector[n_min2] ,' to sort!' )
                else
                begin
                  begin
                    if n_min1>n_min2
                      then
                        begin
                        for i:=(n_min1-1) downto (n_min2+2) do
                          for j:=(n_min2+1) to (i-1) do
                            if vector[j]>vector[j+1]
                              then
                                begin
                                  temp:=vector[j];
                                  vector[j]:=vector[j+1];
                                  vector[j+1]:=temp;
                                end;
                        end;
                    if n_min1<n_min2
                      then
                        for i:=(n_min2-1) downto (n_min1+2) do
                          for j:=(n_min1+1) to (i-1) do
                            if vector[j]>vector[j+1]
                              then
                                begin
                                  temp:=vector[j];
                                  vector[j]:=vector[j+1];
                                  vector[j+1]:=temp;
                                end;
                  end;
                  end;
Vladimir_S вне форума   Ответить с цитированием
Старый 21.12.2012, 03:11   #3 (permalink)
vitjok
Member
 
Регистрация: 29.09.2012
Сообщений: 72
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

это все сравнивается с арифметическим,и находит 2 числа близко рвные и сортирует между ними)когда ее писал онах нормально работала, домой принес не выдает такую ошибку
vitjok вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 20:13.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.