void rotateVector(int *v,int n,int pos);
- parametrul v este adresa primului element al unui vector
- parametrul n reprezintă numărul de elemente din vector
- parametrul pos reprezintă numărul de poziții cu care se va roti vectorul
Funcția deplasează elementele vectorului cu pos poziții.
Exemplu:
Fie vectorul V={10, 5, 20, 8, 30}. După apelul rotateVector(V,5,2), vectorul va arăta în felul următor: {8, 30, 10, 5, 20}.
Rezolvare:
void rotateVector(int *, int, int){
_asm{
mov edi, [ebp+8]
mov ecx,0
loop_1:
// retinem de fiecare data ultima valoare din vector
// ca sa putem sa o adaugam pe prima pozitie
cmp ecx, [ebp+16]
je final_loop_1
mov ebx, [ebp+12]
dec ebx
mov eax, [edi+ebx*4]
loop_2:
// scriem valorile vectorului una peste alta de
// la stanga la dreapta
cmp ebx, 0
je final_loop_2
mov esi, ebx
dec esi
mov edx, [edi+esi*4]
mov [edi+ebx*4],edx
dec ebx
jmp loop_2
final_loop_2:
mov [edi+0*4], eax
inc ecx
jmp loop_1
final_loop_1:
}
}
No comments:
Post a Comment