Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.01.2011, 21:34
mandarinka mandarinka вне форума
Прохожий
 
Регистрация: 28.12.2010
Сообщения: 17
Репутация: 10
По умолчанию программа исключения промахов

Добрый вечер! помогите пожалуйста написать программу.
или как будет выглядит программа, какой листинг будет?


"Разработать программу исключения промахов из выборки измерительных данных. "


спасибо заранее!
Ответить с цитированием
  #2  
Старый 12.01.2011, 22:58
lmikle lmikle сейчас на форуме
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, простейший вариант - посчитать отклонение и отбросить те данные, отклонение которых больше некоторого порогового значения. Фактически у тебя на входе список измерений, на выходе - то же список с некоторыми выброшенными значениями.

А уж как ты это будешь делать - зависит от тебя.
Допустим, если ты меряешь напряжение в розетке (220+-30 вольт), то все, что выпадает за те самые +-30 можно смело отбрасывать. В реальности, обычно строится некоторый график и смотрится отклонение конкретной точки от него.
Ответить с цитированием
  #3  
Старый 14.01.2011, 17:44
mandarinka mandarinka вне форума
Прохожий
 
Регистрация: 28.12.2010
Сообщения: 17
Репутация: 10
По умолчанию

у меня не получается(
я нашла вроде.., но на языке ассемблера(
а мне надо КОД сделать, и программу на Delphi
Ответить с цитированием
  #4  
Старый 14.01.2011, 20:03
lmikle lmikle сейчас на форуме
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Значит так.
Если ты дашь теорию, то, вероятнее всего, тебе помогут.
Давай метод вычисления, а программу напишем.
Ответить с цитированием
  #5  
Старый 15.01.2011, 14:46
mandarinka mandarinka вне форума
Прохожий
 
Регистрация: 28.12.2010
Сообщения: 17
Репутация: 10
По умолчанию

я не могу найти метода вычисления(
но у меня есть листинг на Ассемблере:

Код:
STACKS SEGMENT STACK	 
  ARR DB 128 DUP (?)                	 
STACKS ENDS                                    

SAMPLESIZE EQU 100                      

DATASG SEGMENT                           
DW SAMPLESIZE DUP (?)                 

DATASG ENDS                                  

CODES SEGMENT                              
ASSUME CS: CODESG                       
ASSUME DS: DATASG                      

ASSUME SS: STACKSG                     


FILLA PROC                                        
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX, 0                                           
MOV CX, SAMPLESIZE                     
MOV DX, 200h                                     
INL: IN AX, DX                                    

MOV ARR[BX], AX                             
ADD BX, 2                                            
LOOP INL                                         
POP DX 
POP CX
POP BX 
POP AX
RET                                                        
FILLA ENDP                                         

AVERW PROC                                     
PUSH BX
PUSH CX
XOR AX, AX                                        
XOR DX, DX                                        
MOV CX, SAMPLE SIZE                    
L: ADDAX, [BX]                                  
ADD BX, 2                                            
LOOP L                                                 
MOV CX, SAMPLESIZE                     
DIV CX                                                 
POP CX
POP BX
RET                                                    
AVERW ENDP                                  
MINMAX PROC                     

PUSH BX                                        
PUSH CX                                       
MOV CX, SAMPLESIZE                
MOV DX, [BX]                                
MOV AX, DX                                 

ADD BX, 2                                        
PUSH BX                                          
MINL: CMP [BX], DX                     
JAE L1                                              
MOV DX, [BX]                                
L1: ADD BX, 2                                 
LOOP MINL                                     
POP BX                                             

MOV CX, SAMPLESIZE                
MAXL; CMP [BX], AX                   
JBE L2                                              
MOV AX, [BX]	  
L: ADD BX, 2	
LOOP MAXL	
POP CX	
POP BX	
RET                                                     
MINMAX ENDP	  

S: MOV AX, DATASG                      
MOV DS, AX	
LEA BX, ARR                                    
CALL FILL                                         
CALL AVERW                                   
PUSH DX	 
MOV DX, 220h	 
OUT DX, AX	 
POP AX	
OUT DX, AX	
CALL MINMAX                                 
PUSH DX	   
MOV DX, 220h                                   
OUT DX, AX	   
POP AX	   
OUT DX, AX	  
CODESG ENDS	 

END S
Админ: Пользуемся тегами!

Последний раз редактировалось Admin, 15.01.2011 в 15:39.
Ответить с цитированием
  #6  
Старый 19.01.2011, 19:07
mandarinka mandarinka вне форума
Прохожий
 
Регистрация: 28.12.2010
Сообщения: 17
Репутация: 10
По умолчанию

какими тегами?(
примерно...хотя бы...может напишите?!))
Ответить с цитированием
  #7  
Старый 19.01.2011, 20:28
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Если я правильно понял, то задача сводится к поиску усредненного значения по выборке и исключения из этой выборки всех значений выходящих за это значение. Тогда наверное так:
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

Const
 N = 20;
Var
 Probe,Result: Array[1..N] of Integer;
 i,j,Mid: Integer;
begin
 Randomize;
 for i := 1 to N do Probe[i] := -99 + Random(100);
 Mid := 0;
 for i := 1 to N do Mid := Mid + Probe[i];
 Mid := Abs(Round(Mid / N));
 j := 1;
 for i := 1 to N
 do begin
     if Abs(Probe[i]) > Mid then Continue;
     Inc(j);
     Result[j] := Probe[i]
     end;
 WriteLn(Mid);
 for i := 1 to N do Write(Probe[i]:4);
 WriteLn;
 for i := 1 to j do Write(Result[i]:4);
 ReadLn;
end.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 19.01.2011 в 20:33.
Ответить с цитированием
  #8  
Старый 19.01.2011, 20:32
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,564
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от mandarinka
какими тегами?(
примерно...хотя бы...может напишите?!))
http://www.delphisources.ru/pages/forum_rules.html
Ответить с цитированием
  #9  
Старый 20.01.2011, 10:48
mandarinka mandarinka вне форума
Прохожий
 
Регистрация: 28.12.2010
Сообщения: 17
Репутация: 10
По умолчанию

спасибо вам большое "Страдалецъ" !!!!
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter