30/11/2016, 17:11
|
| | Fecha de Ingreso: mayo-2010
Mensajes: 185
Antigüedad: 14 años, 6 meses Puntos: 2 | |
Respuesta: Optimizar un codigo Muchas gracias!!
Modifique un poco mi codigo y aumento mas la velocidad, pero necesito aun mas velocidad, ya he intentado con punteros como me dices, pero no me funciona, tal vez hago algo mal, el codigo queda asi:
Este es el codigo que funciona Normal.
Código:
void Diccionario(char *szNombre, static char szPalabras[][TAMTOKEN], static int iEstadisticas[], int &iNumElementos)
{
FILE *libro;
fopen_s(&libro, szNombre, "r");
static char palabra[TAMTOKEN];
char *palabra1;
static char szPalabras1[NUMPALABRAS][TAMTOKEN];
static int estad[NUMPALABRAS];
char *next = NULL;
int i, j, k;
int conta = 0;
int numpala = 0;
static int mayor[NUMPALABRAS];
char aux[100];
if (libro == NULL)
{
printf("No se pudo abrir el archivo");
}
else
{
i = 0;
while (!feof(libro))
{
fscanf_s(libro, "%s", palabra, 49);
_strlwr_s(palabra);
palabra1 = strtok_s(palabra, " ;,.)(", &next);
while (palabra1)
{
strcpy_s(szPalabras1[i], palabra1);
palabra1 = strtok_s(NULL, " ;,.)(", &next);
i++;
}
}
numpala = i;
// ORDENAR CADENAS
int pos;
for (i = 0; i < numpala;i++)
{
pos = i;
strcpy_s(aux, szPalabras1[i]);
while ((pos > 0) && (strcmp(aux, szPalabras1[pos - 1]) < 0))
{
strcpy_s(szPalabras1[pos], szPalabras1[pos - 1]);
pos--;
}
strcpy_s(szPalabras1[pos], aux);
}
}
iNumElementos = 0;
//ordenamos por estadisticas.
for (i = 0; i < numpala; i++)
{
estad[i] = 0;
for (j = 0; j < numpala; j++)
{
if (strcmp(szPalabras1[i], szPalabras1[j]) == 0)
{
estad[i]++;
}
}
if (strcmp(szPalabras1[i], szPalabras1[i + 1]) != 0)
{
iNumElementos++;
}
}
i = 0;
while (i < numpala)
{
strcpy_s(szPalabras[conta], szPalabras1[i]);
iEstadisticas[conta] = estad[i];
conta++;
i = i + estad[i];
}
fclose(libro);
}
Este es el codigo con punteros, me imprime los resultados, pero al parecer parece que solo imprime la ultima palabr del archivo o algo asi:
Código:
#include <stdio.h>
#include "stdafx.h"
#include <string.h>
#include<windows.h>
#include "corrector.h"
#include <stdlib.h>
void Diccionario(char *szNombre, static char szPalabras[][TAMTOKEN], static int iEstadisticas[], int &iNumElementos)
{
FILE *libro;
fopen_s(&libro, szNombre, "r");
static char palabra[TAMTOKEN];
char *palabra1;
static char **szPalabras1;
static int estad[NUMPALABRAS];
char *next = NULL;
int i, j, k;
int conta = 0;
int numpala = 0;
static int mayor[NUMPALABRAS];
char *aux;
if (libro == NULL)
{
printf("No se pudo abrir el archivo");
}
else
{
i = 0;
szPalabras1 = (char**)malloc(sizeof(char*) * NUMPALABRAS);
while (!feof(libro))
{
fscanf_s(libro, "%s", palabra, 49);
_strlwr_s(palabra);
palabra1 = strtok_s(palabra, " ;,.)(", &next);
while (palabra1)
{
szPalabras1[i] = palabra1;
palabra1 = strtok_s(NULL, " ;,.)(", &next);
i++;
}
}
numpala = i;
// ORDENAR CADENAS
int pos;
for (i = 0; i < numpala;i++)
{
pos = i;
aux = szPalabras1[i];
while ((pos > 0) && (strcmp(aux, szPalabras1[pos - 1]) < 0))
{
szPalabras1[pos]= szPalabras1[pos - 1];
pos--;
}
szPalabras1[pos] =aux;
}
}
iNumElementos = 0;
//ordenamos por estadisticas.
for (i = 0; i < numpala; i++)
{
estad[i] = 0;
for (j = 0; j < numpala; j++)
{
if (szPalabras1[i]== szPalabras1[j])
{
estad[i]++;
}
}
if (szPalabras1[i] != szPalabras1[i + 1])
{
iNumElementos++;
}
}
i = 0;
while (i < numpala)
{
strcpy_s(szPalabras[conta], szPalabras1[i]);
iEstadisticas[conta] = estad[i];
conta++;
i = i + estad[i];
}
fclose(libro);
}
Última edición por Arcana; 30/11/2016 a las 17:23 |