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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2012, 20:01   #1
fonRocki
Новичок
Джуниор
 
Регистрация: 24.04.2012
Сообщений: 2
По умолчанию Сортировка массива структур

Помогите пожалуйста с таким заданием:
Создать массив структур с данными про студентов (имя, рейтинг, номер зачетки), отсортировать его по спаданию рейтинга и записать в файл, файлу присвоить атрибут "архивный"
Я написала вот такой код, но он не работает
Код:
.286
.model small
.stack 100h
student struc 
sname db 12 dup(' ')   
rate db ?   
num db 4 dup(' ')    
student ends

.data
n equ 5
s db 17
tmp student ?
studs student <"Asabina$",69,"1194">,<"Barska$",80,"1234">,<"Bondarenko$",72,"1432">,<"Brik$",84,"1873">,<"Galaz$",91,"1284">
pathfile db 'file.txt',0
handle dw ?
buf dw ?
.code
.startup
 call sort
 call createFile
 call writeToFile
 call changeAttr
 call closeFile
.exit(0)
sort proc near
 pusha
 mov si,0
 mov di,0
 mov cx,n
 mov ax, -1
 m1:
  mov bp,n
  inc ax
  mul s
  add si, ax
  mov di,0
  mov dh,studs[si].rate
  m2:
	cmp dh,studs[di].rate
	jg m3
		mov dh,studs[si].sname
		mov bh,studs[di].sname
		mov tmp.sname, dh
		mov studs[si].sname,bh
		mov dh, tmp.sname
		mov studs[di].sname, dh
		mov dh,studs[si].num
		mov bh,studs[di].num
		mov tmp.num, dh
		mov studs[si].num,bh
		mov dh, tmp.num
		mov studs[di].num, dh
		mov dh,studs[si].rate
		mov bh,studs[di].rate
		mov tmp.rate, dh
		mov studs[si].rate,bh
		mov dh, tmp.rate
		mov studs[di].rate, dh
		m3:
			add di,type student
			dec bp
			cmp bp, 0
			jnz m2
 loop m1
 popa
 ret
sort endp
createFile proc near
 pusha
 mov ah,3ch
 mov cx,0
 lea dx,pathfile
 int 21h
 mov handle,ax
 popa
 ret
createFile endp
writeToFile proc near
 pusha
 mov si,0
 mov cx,n
 l1:
  mov buf,cx
  lea dx,student[si]
  mov ah,40h
  mov bx,handle
  mov cx,type student
  int 21h
  mov cx,buf
  add si,type student
 loop l1
 popa
 ret
writeToFile endp
changeAttr proc near
 pusha
  mov ax,4301h
        lea dx,pathfile
        mov cx,10001b
        int 21h
 popa
 ret
changeAttr endp
closeFile proc near
 pusha
 mov ah,3eh
 mov bx,handle
 int 21h
 popa
 ret
closeFile endp
end
Сортировка не работает как надо, почему?
fonRocki вне форума Ответить с цитированием
Старый 24.04.2012, 22:35   #2
fonRocki
Новичок
Джуниор
 
Регистрация: 24.04.2012
Сообщений: 2
По умолчанию

Вот рабочая сортировка, если кто будет искать)
Код:
sort proc near
 pusha
 mov si,0
 mov di,0
 mov cx,n
 mov ax, -1
 m1:
  mov di,0
  mov si,0
  add di,type student
  mov bp,n-1
  m2:
    mov dh,studs[si].rate
	cmp dh,studs[di].rate
	jg m3
		call changeName
		call changeNum
		mov dh,studs[si].rate
		mov bh,studs[di].rate
		mov tmp.rate, dh
		mov studs[si].rate,bh
		mov dh, tmp.rate
		mov studs[di].rate, dh
		m3:
			add di,type student
			add si,type student
			dec bp
			cmp bp, 0
			jnz m2
 loop m1
 popa
 ret
sort endp
changeName proc near
 pusha
 mov cx, 12
 mov t1, si
 mov t2, di
 m4:
		mov dh,studs[si].sname
		mov bh,studs[di].sname
		mov tmp.sname, dh
		mov studs[si].sname,bh
		mov dh, tmp.sname
		mov studs[di].sname, dh
		inc si
		inc di
	loop m4
 mov si, t1
 mov di, t2 
 popa
 ret
changeName endp 
changeNum proc near
 pusha
 mov cx, 6
 mov t1, si
 mov t2, di
 m5:
		mov dh,studs[si].num
		mov bh,studs[di].num
		mov tmp.num, dh
		mov studs[si].num,bh
		mov dh, tmp.num
		mov studs[di].num, dh
		inc si
		inc di
	loop m5
 mov si, t1
 mov di, t2 
 popa
 ret
changeNum endp
fonRocki вне форума Ответить с цитированием
Старый 24.04.2012, 23:00   #3
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

До самой сортировки я ещё даже не добрался.
А вообще вывод у вас работает правильно?

Цитата:
writeToFile proc near
pusha
mov si,0
mov cx,n
l1:
mov buf,cx
lea dx,student[si]
mov ah,40h
mov bx,handle
mov cx,type student
int 21h
mov cx,buf
add si,type student
loop l1
popa
ret
writeToFile endp
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива структур ZevS13 Visual C++ 0 14.04.2011 23:42
Сортировка массива структур MrBobyara Помощь студентам 4 16.06.2010 11:48
Сортировка массива структур 3OH! Помощь студентам 4 02.05.2010 21:32
Си : сортировка массива структур Чубрик Общие вопросы C/C++ 5 23.01.2010 22:02
Сортировка массива структур arturka Помощь студентам 1 21.06.2008 14:15