Salve a tutti. Ho un esercizietto da sottomettervi. Dato un vettore di interi devo creare un vettore compresso di char dove compaia il numero di volte che il numero compare, e il numero stesso. ESEMPIO:
vettore: 1 1 1 1 1 3 4 4 5
compresso: 5 1 1 3 2 4 1 5
5 volte l'uno 1 volta il 2.......
il mio codice funziona tranno che nel caso in qui ci siano cifre ripetute più di 255 volte, e dato che char non può essere > il caso fallisce:
ecco il codice:
#include <stdio.h>
#include <stdlib.h>
void main(){
#define MaxLen 1024
int Len = 30;
unsigned char Buffer[MaxLen] = {97,97,97,97,97,97,...........,97,97,97,97,255}
;
#define MaxLenComp (MaxLen*2+1)
unsigned char BufComp[MaxLenComp];
__asm{
XOR EAX,EAX
XOR EDX,EDX
XOR ESI,ESI
XOR EBX,EBX
MOV EAX,0 // i = 0
MOV EDX,1 // j = 1
MOV ESI,0 // indice vettore compresso
MOV EBX,1 // conta = 1
inizio: CMP EAX,30
JE fine // salta a fine se j > 30
XOR ECX,ECX
MOV CL,Buffer[EDX]
CMP Buffer[EAX],CL
JE incrementa // vai a incrementa se i numeri coincidono
//altrimenti3
spezza: MOV BufComp[ESI],BL // compresso[indice] = conta
INC ESI
XOR ECX,ECX
MOV CL,Buffer[EAX]
MOV BufComp[ESI],CL // compresso[indice] = vettore[i]
INC EAX // i++
INC EDX // j++
INC ESI
MOV EBX,1
JMP inizio
incrementa: INC EBX
CMP EBX,255
JE spezza // vai a spezza se il contatore = 255
// altrimenti
INC EAX
INC EDX
JMP inizio
fine: MOV BufComp[ESI],0
}
int i;
for(i=0;i<Len;i++){ printf("%d ", Buffer[i]); }
printf("\n\n");
for(i=0;BufComp[i];){
printf("%d ", BufComp[i++]);
printf("%d ", BufComp[i++]);
}
system("pause");
}
avete idee? perchè non so veramente cosa fare