Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Ассемблерная задача  (Прочитано 10291 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tim148
Читатель

by
Offline Offline

« : 11-04-2014 07:52 » 

Здравствуйте уважаемые форумчане. Помогите пожалуйста решить задачу.
Условие:
 Да что ты говоришь?..
Цитата
В массиве целых знаковых чисел (минимум 25 элементов) определить количество различных чисел.
Меня одолевают смутные сомнения
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 11-04-2014 08:43 » 

Tim148, за тебя тут задачи никто решать не будет.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 11-04-2014 14:56 » 

Tim148, покажи массив, сразу определим!
Записан

LemmonRus
Помогающий

ru
Offline Offline
В правильно заданном вопросе 90% ответа.


« Ответ #3 : 14-04-2014 13:21 » 

Здравствуйте уважаемые форумчане. Помогите пожалуйста решить задачу.
Условие:
 Да что ты говоришь?..
Цитата
В массиве целых знаковых чисел (минимум 25 элементов) определить количество различных чисел.
Меня одолевают смутные сомнения
Все просто.Есть 2 способа.Быстрый с большим расходом памяти и медленный с маленьким.
Медленный без расхода памяти очень прост.Реализуешь одну из сортировок описанных в статье http://habrahabr.ru/post/204600/.
А затем подсчитываешь количество элементов (проверяя 2 соседних на равенство (если соседние элементы не совпадают увеличиваешь счетчик элементов на 1)) .Быстрый на порядок сложнее и требует 2х памяти по сравнении с медленным.
« Последнее редактирование: 14-04-2014 13:34 от LemmonRus » Записан
Tim148
Читатель

by
Offline Offline

« Ответ #4 : 22-04-2014 05:56 » 

Здравствуйте уважаемые форумчане. Помогите пожалуйста решить задачу.
Условие:
 Да что ты говоришь?..
Цитата
В массиве целых знаковых чисел (минимум 25 элементов) определить количество различных чисел.
Меня одолевают смутные сомнения
Все просто.Есть 2 способа.Быстрый с большим расходом памяти и медленный с маленьким.
Медленный без расхода памяти очень прост.Реализуешь одну из сортировок описанных в статье http://habrahabr.ru/post/204600/.
А затем подсчитываешь количество элементов (проверяя 2 соседних на равенство (если соседние элементы не совпадают увеличиваешь счетчик элементов на 1)) .Быстрый на порядок сложнее и требует 2х памяти по сравнении с медленным.
Спасибо большое за совет, но вот только у меня не получилось реализовать метод пузырька. Посмотрите пожалуйста ошибку


;-------------------------------------------------------------------------------
mas db 44,55,12,42,94,18,06,67   ; задаем массив
N=$-mas            ; длина массива mas
X db 0               
;-------------------------------------------------------------------------------
.code
;---------------------
; внешний цикл по i
   mov cx,n-1         
   mov si,1      
cykl1:
   push cx
   mov cx,N
   sub cx,si         
   push si         
   mov si,N-1
cykl2:                
   mov al,mas[si-1]
   cmp mas[si],al
   ja m1      
   mov X,al         
   mov al,mas[si]
   mov mas[si-1],al      
            mov al,X
   mov mas[si],a         
m1:   dec si            
   loop cykl2
   pop si
      inc si
   pop cx
   loop cykl1
;-------------------------------------------------------------------------------

Заранее спасибо

Добавлено через 48 минут и 33 секунды:
Получилось) я исправил метод пузырька. Теперь вроде все работает. Подскажите пожалуйста. Где и как создать счетчик?



вот программа



; multi-segment executable file template.
data segment
mas db 44,55,12,42,94,18,06,67   
N=$-mas            
X db 0
ends
stack segment  dw   128  dup(0)

ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
mov cx,n-1         
   mov si,1      
cykl1:
   push cx
   mov cx,N
   sub cx,si         
   push si         
   mov si,N-1
cykl2:                
   mov al,mas[si-1]
   cmp mas[si],al
   ja m1      
   mov X,al            
   mov al,mas[si]
mov mas[si-1],al   
mov al,X
   mov mas[si],al   
m1:   dec si            
   loop cykl2
   pop si
inc si
   pop cx
   loop cykl1
mov ax, 4c00h
int 21h
ends



Добавлено через 5 часов, 17 минут и 11 секунд:
Т.е мы должна добавить счетчик псоле метки м1. Но после того как я добавляю счетчик, то ответы не сходятся. Помогите пожалуйста.
« Последнее редактирование: 22-04-2014 12:02 от Tim148 » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 22-04-2014 14:29 » 

Tim148, пузырёк? Ты русским языком опиши шаги алгоритма (можно комменатриями в коде).

Если ты делаешь сортировку пузырьком (кстати, а по условию задачи разрешено "портить" массив - т.е. переставлять местами его элементы?), то счётчик будет потом, когда уже всё отсортировано.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
LemmonRus
Помогающий

ru
Offline Offline
В правильно заданном вопросе 90% ответа.


« Ответ #6 : 22-04-2014 15:16 » 

Tim148, пузырёк? Ты русским языком опиши шаги алгоритма (можно комменатриями в коде).

Если ты делаешь сортировку пузырьком (кстати, а по условию задачи разрешено "портить" массив - т.е. переставлять местами его элементы?), то счётчик будет потом, когда уже всё отсортировано.
Если портить (сортировть) исходный массив нельзя,то описываю быстрый способ.
Берем такой же по размеру массив (пустой). Берем первый элемент исходного массива и переписываем во второй массив, Увеличиваем счетчик элементов второго массива на 1.Далее берем следующий элемент и проверяем на наличие во втором массиве,если его там нет дописываем во второй массив и увеличиваем счетчик элементов,повторяем пока элементы в исходном массиве не закончатся,искомое значение в счетчике элементов второго массива.
Записан
Tim148
Читатель

by
Offline Offline

« Ответ #7 : 22-04-2014 18:29 » 

Портить можно)
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 22-04-2014 18:49 » new

Tim148, ну в любом случае браться за счётчик до того, как будут результаты сортировки, бессмысленно. Так что в самом конце дописывай код подсчёта разных чисел в уже отсортированном массиве.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines