Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [ASM]Ср.арифметическое элементов массива 
:(
    Опции темы
Daremez
Дата 20.1.2013, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 29.12.2009

Репутация: нет
Всего: нет



Дан одномерный массив. Размер массива и его элементы вводятся пользователем с клавиатуры. Результат работы программы выводится на экран.
Составить программу, определяющую среднее арифметическое элементов массива, стоящих на каждом третьем месте. 
PM MAIL   Вверх
Daremez
Дата 22.1.2013, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 29.12.2009

Репутация: нет
Всего: нет



Код

        
data segment                                                      
message1 db "Введите размер массива/Vvedite razmer massiva: $"
message2 db "Введите элементы массива/Vvedite elementi massiva: $"
message3 db 13,10,"Ср.Арифметическое/ Sr Arifmet: $"  

n   db 0                           
mas db 400 dup(?)   ; массив               
i   db 0                           
flag db 0
first db 0 
second db 0     
data ends 
stk segment stack        
 db 256 dup(?)           
stk ends                 
assume cs:code, ds:data, ss:stk    
code segment                                
main:                              
    mov  ax,data     ; присваиваем ds адрес начала сегмента данных                                       
    mov  ds,ax                     
                                   
    mov   ah,9h       ; вывод приглашения к вводу
    lea   dx,message1                                 
    int   21h                      
                                   
 inputN:                                                    
    mov   ah,1                                 
    int   21h         ; ввод символа с клавиатуры
   AfterPressN:                     
    cmp   al,13       ; проверка на нажатие Enter
    je    endInputN   ; если нажат Enter конец ввода
    sub   al,30h                   
    mov   bl,al                    
    mov   bh,10                    
    mov   al,n                     
    xor   ah,ah                    
    mul   bh          ; умножаем уже введенное число на 10
    add   al,bl       ; суммируем с введенной цифрой
    mov   n,al                     
    jmp  inputN                    
 endInputN:                        
                                   
    ; перевод строки                                    
    mov  ah,2        ; заносим в ah номер функции       
    mov  dl,10       ; в dl - код перевода строки       
    int  21h         ; вывод символа                    
                            
    mov   ah,9h      ; вывод приглашения к вводу
    lea   dx,message2               
    int   21h                                                          
                      
         ; заполнение массива                           
    mov   si,0       ; адрес смещения относительно начала  
    mov   cl,n       ; счетчик цикла
create:               
    mov   flag,0                              
    xor   dl,dl       
    mov   ah,1        
    int   21h          
    cmp   al,'-'     ; проверяем на наличие минуса
    jne   AfterPressDl   
    mov   flag,1                                            
 inputDl:                                               
    mov   ah,1                                          
    int   21h         ; ввод символа с клавиатуры       
   AfterPressDl:                                        
    cmp   al,13       ; проверка на нажатие Enter       
    je    endInputDl  ; если нажат Enter конец ввода    
    sub   al,30h                                        
    mov   bl,al                                         
    mov   bh,10                                                        
    mov   al,dl                                         
    xor   ah,ah                                         
    mul   bh          ; умножаем уже введенное число на 10
    add   al,bl       ; суммируем с введенной цифрой    
    mov   dl,al                                         
    jmp  inputDl                                        
 endInputDl:          
    cmp   flag,1      ; если изначальное был введен минус
    jne   NotMinus          
    neg   dl          ; изменяем знак
  NotMinus:          
    mov   mas[si],dl  ; записываем в массив число
                                                            
    ; перевод строки                                    
    mov  ah,2       ; заносим в ah номер функции 
    mov  dl,10      ; в dl - код перевода строки
    int  21h        ; вывод символа
                                                        
  end_loop:         ; окончание цикла                   
    inc  si         ; увеличиваем смещение              
    loop create     ; цикл по счетчику cl               
                    
                                 
                     
    call Change      
                 
; перевод строки                                    
    mov  ah,2        ; заносим в ah номер функции       
    mov  dl,10       ; в dl - код перевода строки       
    int  21h         ; вывод символа                    
                            
    mov   ah,9h      ; вывод приглашения к вводу
    lea   dx,message3               
    int   21h          
    mov al,first
    mov dl,second
    cwd
    div dl    
 aam 
    add ax,3030h 
    mov dl,ah 
    mov dh,al 
    mov ah,02 
    int 21h 
    mov dl,dh 
    int 21h
mov ah,0
int 16h
                                      
    mov  ah,10h      ; ожидание нажатия клавиши     
    int  16h                                        
exit:                                               
    mov  ax,4c00h    ; выход                          
    int  21h                                        
                                                    
Change proc                                         
    mov si,0                                        
    mov bl,mas[si]                                  
                                      
  prepare_for_change: ; подготовка к изменению массива
    mov  si,0         ; смещение обнуливается          
    mov  cl,n         ; счетчик цикла - число элементов в массиве
    xor  ch,ch       
                                    
changing:            
    mov  ax,si        ; переносим в ax номер элемента
    mov  dl,3         ; dl = 3 - заменяем каждый 3-й элемент
    div  dl           ; делим
    cmp  ah,0         ; сравниваем остаток от деления с 0
    jne  nextIterationChange ; если не равен 0, то номер не кратен 3, переходим на следующую итерацию
                        ; если равен 0, значит номер элемент кратен 3
    mov dl,first
    add dl,mas[si]
    mov first,dl
    mov dl,second
    add dl,1
    mov second,dl
                                                        
  nextIterationChange: ; подготовка к следующей итерации
    inc  si           ; увеличение счетчика                       
    loop changing     ; переход на следующую итерацию
                     
                                         
    ret              
Change endp          
                                            
                                    
code ends               
end main


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0638 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.