Esercizio vettori

di il
2 risposte

Esercizio vettori

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

2 Risposte

  • Re: Esercizio vettori

    A parte che hai sbagliato la sessione
    il tuo problema stà nella definizione in quanto un char può assumere un valore massimo di 255.
    esempio di char
    char a; a='b';
    char a; a= 65; // le 2 assegnazioni sono uguali in quanto i char fanno riferimento al codice ascii
    un vettore di char alias una stringa si definisce nel seguente modo:
    char stringa[100];
    a questo punto se tu vuoi risolvere il tuo problema devi definire 3 vettori
    il primo dove c'è l'elenco dei numeri da analizzare.
    il secondo doce c'è il numero che hai preso
    e il terzo per le ripetizioni.
    per immettere dei dati nel vettore io ti consiglio di usare un istruzione for.
    per accettare i numeri da tastiera basta che farai:
    f
    or (i=0; i < limite;i++)
    {
    cin >> vett1[i]
    }
    se tu vuoi usare solo cifre 1 a 9
    la seconda parte sarà semplicissima perchè basta che fai
    int num,i;num=0;i=0;
    for (i=0;int < limite;i++)
    {
    num=vett1;
    vett2[num]++;
    }
    mentre se vuoi usare tutti i numeri dovrai usare delle if e un pò più complesso ma ce la puoi fare
  • Re: Esercizio vettori

    smalldragon ha scritto:


    la sessione
    Semmai la sezione ... ma la sezione è giusta perché il suo problema è in Assembly x86 non in C ...

    smalldragon ha scritto:


    char a; a='b';
    char a; a= 65; // le 2 assegnazioni sono uguali in quanto i char fanno riferimento al codice ascii
    Non mi pare che il codice ASCII di 'b' sia 65 ... semmai è 98 ...
Devi accedere o registrarti per scrivere nel forum
2 risposte