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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2013, 17:02   #1
ok57
 
Регистрация: 13.05.2013
Сообщений: 5
Восклицание Ввести массив с клавиатуры. В полученном массиве найти минимальный элемент. Вывести его на экран

Помогите решить задачу в программе MS Dos.

Задача:
Ввести массив с клавиатуры. В полученном массиве найти минимальный элемент. Вывести его на экран
ok57 вне форума Ответить с цитированием
Старый 14.05.2013, 19:46   #2
ok57
 
Регистрация: 13.05.2013
Сообщений: 5
По умолчанию

Ребят, ну срочно нужна помощь...
ok57 вне форума Ответить с цитированием
Старый 14.05.2013, 20:05   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,120
По умолчанию

Видимо, под "помощью" ты подразумеваешь чтобы кто-то сделал задание за тебя, а впрягаться за очередного студня чё-та лень, вот всё тебя и игнорят...
Rififi вне форума Ответить с цитированием
Старый 14.05.2013, 20:27   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Помогите решить задачу в программе MS Dos.
не хочу Вас расстраивать, но "программа MS DOS" - это операционная система.
Вам, по всей видимости (исходя из выбранного Вами раздела) нужна программа на языке Ассемблера под MS DOS.

Но это всё мелочи.
По сути, Rififi прав, подобная задача (кстати, после уточнения деталей) займёт явно больше 10=15 минут.
Возможно, Вам повезёт и кто-то выложит имеющийся у него готовый код.
Если же, то Вам или придётся писать программу самостоятельно или обращаться к фрилансерам (оплачивать чужой труд).

Успехов в учёбе.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.05.2013, 21:59   #5
ok57
 
Регистрация: 13.05.2013
Сообщений: 5
Восклицание

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
не хочу Вас расстраивать, но "программа MS DOS" - это операционная система.
Вам, по всей видимости (исходя из выбранного Вами раздела) нужна программа на языке Ассемблера под MS DOS.

Но это всё мелочи.
По сути, Rififi прав, подобная задача (кстати, после уточнения деталей) займёт явно больше 10=15 минут.
Возможно, Вам повезёт и кто-то выложит имеющийся у него готовый код.
Если же, то Вам или придётся писать программу самостоятельно или обращаться к фрилансерам (оплачивать чужой труд).

Успехов в учёбе.
Посоветуйте к кому обратиться хоть, даже за деньги. MS Dos я имел в виду не систему, а консоль такую, где компилировать через TASM tlink ну и т.д. Думаю понятнее так объяснил.. И какие нужно детали в ней уточнить, это же полное условие.
ok57 вне форума Ответить с цитированием
Старый 14.05.2013, 22:50   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Посоветуйте к кому обратиться хоть, даже за деньги.
а раздел фриланс. А можете полистать тут, в разделе Ассемблер несколько тем, посмотрите, кто тут отписывается с ответами, попробуйте с ними связаться напрямую...

Цитата:
MS Dos я имел в виду не систему, а консоль такую, где компилировать через TASM tlink ну и т.д. Думаю понятнее так объяснил.
да. так лучше

Цитата:
И какие нужно детали в ней уточнить, это же полное условие.
понимаете, в чём сложность то..
так не ясно, о каком массиве идёт речь: ни его размерность, ни тип элементов.
Даже в языке высокого уровня потребуется понять, из каких элементов массив состоит (целые или дробные, сколько байт занимают) (чтобы его правильно декларировать), а уж на Ассемблере и подавно!
Если это никак не оговорено, то тогда Вы, как разработчик, вправе самостоятельно вводить ограничения. я бы ограничился целыми положительными числами (можно однобайтовыми, можно двухбайтовыми) и размерность массива жестко прописал прямо в коде (ну, например, пользователь вводит массив из 10 элементов).

ну а так, задачка, по сути своей, не очень сложная, у Вас наверняка есть какие-то методические указания, лабы, лекции, теория, примеры решения. По лекциям по аналогии состряпать - дело не такое уж и сложное! Да и Вам же на пользу пойдёт.
Если будете заказывать, учтите, что сумма, скорее всего будет трёхзначная (если в рублях )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.05.2013, 08:13   #7
ok57
 
Регистрация: 13.05.2013
Сообщений: 5
Восклицание

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
понимаете, в чём сложность то..
так не ясно, о каком массиве идёт речь: ни его размерность, ни тип элементов.
Даже в языке высокого уровня потребуется понять, из каких элементов массив состоит (целые или дробные, сколько байт занимают) (чтобы его правильно декларировать), а уж на Ассемблере и подавно!
Если это никак не оговорено, то тогда Вы, как разработчик, вправе самостоятельно вводить ограничения. я бы ограничился целыми положительными числами (можно однобайтовыми, можно двухбайтовыми) и размерность массива жестко прописал прямо в коде (ну, например, пользователь вводит массив из 10 элементов).

ну а так, задачка, по сути своей, не очень сложная, у Вас наверняка есть какие-то методические указания, лабы, лекции, теория, примеры решения. По лекциям по аналогии состряпать - дело не такое уж и сложное! Да и Вам же на пользу пойдёт.
Если будете заказывать, учтите, что сумма, скорее всего будет трёхзначная (если в рублях )
Ды вот, была бы хоть подобная.. На паскале проще решить, ну асемблер это что-то. Сергей, ну помоги пожалуйста решить с любыми числами в массиве, какими хочешь, главное чтобы работала, например ввести допустим 3 числа и из них выбрать минимальное и вывести его. Ты же понимаешь в этом, может даже подобные у вас есть, ну реально очень нужна, ума не дам с ней. Да и единственная задача, больше не напишу...

Последний раз редактировалось ok57; 15.05.2013 в 08:17.
ok57 вне форума Ответить с цитированием
Старый 15.05.2013, 11:07   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

ну, Вы напрасно думаете, что для меня это просто и очевидно.

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

Код:
; Пример: Задан массив. Вывести на экран минимальный элемент массива.

data segment     
                mas db 52, 22, 70, 38, 29, 90, 21, 40, 50, 60          ;исходный массив
                len dw $-mas    ;размер массива в байтах
data ends        
                 
code segment     
start:   
        assume cs:code, ds: data         
        mov ax, data     
        mov ds, ax       
                 
        lea bx, mas     ;берём в bx адрес первого элемента
        mov cx, len     ;счетчик цикла
        
        mov ah, 0
        mov al, [bx]
              
Next:   cmp al, [bx]    ; сравниваем мин. число с очередным элементом массива
        jl  noMin
        mov al, [bx]
noMin:
        inc bx  ;переходим к следующему элементу
        loop Next
                 
        aam     ;преобразуем сумму в BCD-код
        add ax, 3030h   ;затем в ASCII-код
        mov bx, ax      ;и выводим
        mov ah, 02       
        mov dl, bh       
        int 21h          
        mov dl, bl       
        int 21h          
                 
        mov ax, 4c00h    
        int 21h          
code ends        
end start
в приложенном архиве данная программа exmp_min.asm + откомпилённый exe-шник exmp_min.exe

теперь по поводу ввода массива с клавиатуры.
Это достаточно замороченно. Мне сейчас некогда и неинтересно этим заниматься. В архив я вложил программу cal_bin.asm - оттуда можете выцепить процедуры

convertStrToInt proc near ;Процедура преобразования строки в int, результат в dl

convertIntToStr proc near ;Процедура преобразования int в ASCII, преобразуемое число в AX,

впрочем, на форуме достаточно тем, где рассказывается, как ввести число с клавиатуры (вводится строка, которая потом преобразуется в число нужного формата)...

Успехов.
Вложения
Тип файла: rar exmp_min.rar (3.5 Кб, 38 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.05.2013, 15:38   #9
ok57
 
Регистрация: 13.05.2013
Сообщений: 5
Восклицание

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну, Вы напрасно думаете, что для меня это просто и очевидно.

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

Код:
; Пример: Задан массив. Вывести на экран минимальный элемент массива.

data segment     
                mas db 52, 22, 70, 38, 29, 90, 21, 40, 50, 60          ;исходный массив
                len dw $-mas    ;размер массива в байтах
data ends        
                 
code segment     
start:   
        assume cs:code, ds: data         
        mov ax, data     
        mov ds, ax       
                 
        lea bx, mas     ;берём в bx адрес первого элемента
        mov cx, len     ;счетчик цикла
        
        mov ah, 0
        mov al, [bx]
              
Next:   cmp al, [bx]    ; сравниваем мин. число с очередным элементом массива
        jl  noMin
        mov al, [bx]
noMin:
        inc bx  ;переходим к следующему элементу
        loop Next
                 
        aam     ;преобразуем сумму в BCD-код
        add ax, 3030h   ;затем в ASCII-код
        mov bx, ax      ;и выводим
        mov ah, 02       
        mov dl, bh       
        int 21h          
        mov dl, bl       
        int 21h          
                 
        mov ax, 4c00h    
        int 21h          
code ends        
end start
в приложенном архиве данная программа exmp_min.asm + откомпилённый exe-шник exmp_min.exe

теперь по поводу ввода массива с клавиатуры.
Это достаточно замороченно. Мне сейчас некогда и неинтересно этим заниматься. В архив я вложил программу cal_bin.asm - оттуда можете выцепить процедуры

convertStrToInt proc near ;Процедура преобразования строки в int, результат в dl

convertIntToStr proc near ;Процедура преобразования int в ASCII, преобразуемое число в AX,

впрочем, на форуме достаточно тем, где рассказывается, как ввести число с клавиатуры (вводится строка, которая потом преобразуется в число нужного формата)...

Успехов.

Сергей, спасибо что уделили время, но вот не пойму... Вот ниже сейчас покажу пример программы и её решение, там заметно совершенно другой код, можете ли вы исходя из программы ниже переделать её под моё условие, т.е. там она выводит максимальный элемент, а мне нужно минимальный?

Вот условие решённой программы:
Ввести массив двузначных чисел. Найти и вывести наибольшее из них.

Вот её решение:
Код:
s_s segment stack "stack"
	dw 12 dup(?)
s_s ends

d_s segment
x db 12 dup(?),0ah,0dh,"$"
y db 12 dup(?),0ah,0dh,"$" 
d_s ends

c_s segment
	assume ss:s_s,ds:d_s,cs:c_s
begin:
	mov ax,d_s
	mov ds,ax
	mov si,0
L1:	mov ah,01h
	int 21h
	cmp al,13d
	je L3
	mov x[si],al
	sub x[si],30h
	add bl,x[si]
	add x[si],30h
	inc si
	jmp L1
L3:	
	
	mov ah,9h
	lea dx,x
	int 21h
	mov ah,9h
	lea dx,y
	int 21h
	mov dl,bl
L7:	cmp dl,9h
	jng L4
	cmp dl,15
	jng L6
	mov bl,dl
	and bl,00001111b
	shr dl,4
	add dl,30h
	mov ah,02h
	int 21h
	mov dl,bl
	jmp L7
	mov dl,bl
	mov ah,02
	jmp L5	
L6:	add dl,37h
	jmp L5
L4:	add dl,30h
L5:	mov ah,02
	int 21h
	
	mov ah,4ch
	int 21h
	int 20h
c_s ends
end begin

Как видите код немного другой, или тоже на тоже получается? Просто как сейчас помню вводить числа там не нужно никаких дополнительных функций и т.п. Заранее спасибо.
ok57 вне форума Ответить с цитированием
Старый 17.05.2013, 05:07   #10
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Цитата:
Сообщение от ok57
Сергей, спасибо что уделили время, но вот не пойму...
ok57,
читай внимательно
Цитата:
Сообщение от Serge_Bliznykov
дальше Вы уж или сами или как-то заинтересуйте меня
Mikl___ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задан массив AX (N). Добавить массив С(К). Выполнить сортировку разделением. В полученном массиве, найти наименьший элемент из пол Шархан Паскаль, Turbo Pascal, PascalABC.NET 0 05.04.2013 13:16
В двумерном массиве найти минимальный максимальный элемент в строке\столбце Proskurina Паскаль, Turbo Pascal, PascalABC.NET 6 08.09.2012 21:14
В двумерном массиве найти минимальный максимальный элемент в строке\столбце Proskurina Помощь студентам 3 08.09.2012 11:07
Найти и вывести минимальный из четных элементов в массиве, кратный числу 4. Ассемблер. T0P6A Помощь студентам 0 09.05.2009 05:10