Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - NOB2014

#71
Hola, geeke, ¿cómo estas? -
El primer error totalmente de acuerdo, en el segundo casi no tengo dudas que estoy equivocado porque desde que participas en mis post todo lo tuyo fueron aciertos, pero igual tengo la siguiente duda:
x en la línea 6 se iguala a col que vale 5, o sea, que para mí en la línea 8 reserva memoria para 5 enteros, luego en la línea 12 a la variable x le sumo col por lo tanto en la línea 14 x vale 10 y para mi criterio reservo memoria para 10 enteros, me podías decir en que estoy equivocado. -
Saludos.
#72
Hola, ¿cómo están?
Parece que lo logré, el programa que dejo es para practicar es obvio que podía haber asignado toda la memoria de una vez y esta de más aclararles que utilizo un arreglo de una dimensión como si fuera de dos.

#include <stdio.h>
#include <stdlib.h>


int main( int argc, char **argv ){
int fil=1, col=5, i, j, x=col, *tmp=NULL ;
int a[] = {33,18,5,2,19,306,202,88,31,64};
int *ptrArr = (int *)malloc( fil*col*sizeof(int) );

if( ptrArr != NULL ){
fil++;
x += col;

tmp = (int *)realloc( ptrArr, x );
if( tmp != NULL ){
ptrArr = tmp;
tmp = NULL;
x=0;
for( i=0; i<fil; i++ ){
for( j=0; j<col; j++ ){
ptrArr[fil*i+j] = a[x];
printf( "%3d ", ptrArr[fil*i+j] );
x++;
}
printf("\n");
}
}else{
printf( "\n No se pudo reasignar memoria" );
return EXIT_FAILURE;
}
}else{
printf( "\n No se pudo reservar memoria" );
return EXIT_FAILURE;
}

free( ptrArr );
ptrArr = NULL;

return EXIT_SUCCESS;

}

Saludos.
#73
Hola a todos. -
Continuando con mi proyecto me encuentro con la necesidad de guardar la línea donde se encuentra por Ej. una apertura de llave para luego si encuentro un cierre de la misma poner el contador a cero en el correspondiente elemento del vector contador(geeke), pero si no encuentro el cierre de la misma es un error y debo mostrar el mensaje y una referencia en que línea se encuentra el mismo, para ello tengo que utilizar memoria dinámica ya que si bien conozco la cantidad de columnas no así la cantidad de filas (renglones), porque puede ocurrir que haya 3 aperturas de llaves y luego se encontrarían los cierre de las mismas (o no) y de no ser así necesito las referencias de las líneas donde se encuentran. -
Hasta aquí me parece que estoy bien rumbado pero la cuestión es que no sé cómo hacer una tabla con memoria dinámica, para un arreglo lo hice de esta manera(código a continuación) y todo funciona pero para un matriz no me doy idea y no pude encontrar ejemplos en internet, encontré algunos pero es sabiendo de antemano las filas y las columnas. -

   

void ingreso( void ){
size_t ingresos, contador = 0, n, ok, ch;
int *numeros = NULL, *mas_numeros = NULL;

do{
do{
printf( "\n Ingrese un numero entero (0 para finalizar).....: " );
ok = scanf( "%lu", &ingresos ) == 1 && ingresos >= 0;
while( (ch = getchar()) != EOF && ch != '\n');

if( ok == 0 ){
printf( "\n El ingreso es incorrecto, intentelo nuevamente...\n\n\t");
printf("Pulse una tecla para continuar..." ); getchar();
}

}while( !ok );

contador++;
mas_numeros = (int*)realloc(numeros, contador * sizeof(int));

if( mas_numeros != NULL ){
numeros = mas_numeros;
numeros[contador-1] = ingresos;
}
else{
safeFree( numeros );
puts( "Error en asignar memoria....." );
exit(1);
}
}while( ingresos != 0 );

limpiarPantalla();

printf ("\n Numeros introducidos.....: ");
for( n=0; n < contador - 1; n++ )
printf( "%d ",numeros[n] );

ordenar( contador, numeros );

safeFree( numeros );
}

Espero como siempre deseen ayudarme.-
Saludos.
#74
Hola a todos. -
Gracias Iván por tu participación, siempre con buen aporte, geeke tienes toda la razón me estaba yendo por las ramas, me diste un impulso importante ya que estaba por dejarlo por un tiempo seguir con el libro y retomarlo luego ya que continuar con esto me va a dar mucho conocimiento, bueno a pensar y practicar, a una última cosa, debería tener mucha mala suerte si encuentro un código entre comillas con un solo paréntesis y si ocurre habrá que darse idea, tal vez cuando encuentre comillas dobles debería saltar hasta encontrar la siguiente comillas. -

printf( "\n Hola (mundo\n\n" );

Saludos
#75
Tengo casi todo preparado para hacer lo más importante que es corregir errores de sintaxis pero ete aquí que no se me cae una misera idea, preguntarle si hay algo escrito como un tutorial sobre el tema ni lo pienso porque busque bastante en internet y nada, salvo que aya buscado equivocadamente. -
Les dejo una pregunta para tratar de que me den un empujoncito para comenzar, si la primera línea es:
include <stdio.h>
Como harían para encontrar el error. -

Saludos.
#76
Lo que me sugieres que haga no está contemplado en las lineas 19 y 20.
#77
Hola, MAFUS.
Si amigo muchas gracias por la aclaración, cuando tengas un ratito de tiempo revisarla, por favor, para saber si ahora está correcto, dejo todo el código para que se fijen en la función en la línea 55, parece que da resultados correctos, lo hice de esta manera para no utilizar mil if o un switch. - 
En cuanto a las barras invertida antes de la " y \ es porque me daba error y parece que no las tiene en cuenta como un elemento mas. -

#include <stdio.h>
#include <stdlib.h>

long int tamanioArchivo( FILE *ptrArchivo, long int tamanio );
char *cargarArchivoMemoria( FILE *ptrArchivo, long int tamanio );
void corrector( long int tamanio, char *archivoMem );

int main( int argc, char **argv ){
FILE *ptrArchivo = NULL;
long int tamanio = 0;
char *archivoMem = NULL;

ptrArchivo = fopen("corregir.c", "r+t");

if( ptrArchivo != NULL ){
tamanio = tamanioArchivo( ptrArchivo, tamanio );
archivoMem = cargarArchivoMemoria( ptrArchivo, tamanio );
corrector( tamanio, archivoMem );
free( archivoMem );
fclose( ptrArchivo );
}else{
printf( "\n ERROR - el archivo no se pudo abrir..." );
exit(EXIT_FAILURE);
}

return EXIT_SUCCESS;
}

long int tamanioArchivo( FILE *ptrArchivo, long int tamanio ){
fseek(ptrArchivo,0,SEEK_END);
tamanio = ftell(ptrArchivo);
rewind(ptrArchivo);

return tamanio;
}

char *cargarArchivoMemoria( FILE *ptrArchivo, long int tamanio ){
int i=0;
char *archivoMem = NULL;
archivoMem = (char *)calloc( tamanio, sizeof(char) );

if( archivoMem != NULL ){
while( !feof(ptrArchivo) ){
*(archivoMem+i) = fgetc( ptrArchivo );
i++;
}
}else{
printf( "\n ERROR - Fallo la asignación de memoria..." );
exit(EXIT_FAILURE);
}

return archivoMem;
}

void corrector( long int tamanio, char *archivoMem ){
int i,j, operUno[16] = {0}, linea=1;
char c, *operDos = "\"#.(){}[]<>;,=/\\";


for( i=0; i<tamanio; i++ ){
c = *(archivoMem+i);
if( c != '\n' ){
for( j=0; j<16; j++ ){
if( c == *(operDos+j) ){
operUno[j] += 1;
}
}
}else{
linea++;
}
}

for( j=0; j<16; j++ ){
printf("\n %c = %d", *(operDos+j) , operUno[j] );
}
}


Saludos.
#78
Hola, geeke, muchas gracias por ocuparte. -
Me voy a dar un fuerte tirón de orejas, a esta altura no me debería ocurrir estos errores tan de primer grado. -

Saludos.
#79
Hola, muy buen Domingo.
Tengo un problema con la función cargarArchivoMemoria (línea 36)no sé en que estoy fallando pero no me vuelca el contenido del fichero en la memoria, me podrían decir donde estoy fallando, leí, busque, practique pero debo recurrir a Uds. porque no lo logro. - 

El programa:

#include <stdio.h>
#include <stdlib.h>

long int tamanioArchivo( FILE *ptrArchivo, long int tamanio );
char *cargarArchivoMemoria( FILE *ptrArchivo, long int tamanio, char *archivoMem );
void corrector( long int tamanio, char *archivoMem );

int main( int argc, char **argv ){
FILE *ptrArchivo = NULL;
long int tamanio = 0;
char *archivoMem = NULL;

ptrArchivo = fopen("corregir.c", "r+t");

if( ptrArchivo != NULL ){
tamanio = tamanioArchivo( ptrArchivo, tamanio );
archivoMem = cargarArchivoMemoria( ptrArchivo, tamanio, archivoMem );
corrector( tamanio, archivoMem );
free( archivoMem );
fclose( ptrArchivo );
}else{
printf( "\n ERROR - el archivo no se pudo abrir..." );
exit(EXIT_FAILURE);
}

return EXIT_SUCCESS;
}

long int tamanioArchivo( FILE *ptrArchivo, long int tamanio ){
fseek(ptrArchivo,0,SEEK_END);
tamanio = ftell(ptrArchivo);

return tamanio;
}

char *cargarArchivoMemoria( FILE *ptrArchivo, long int tamanio, char *archivoMem ){
int i=0;
archivoMem = (char *)calloc( tamanio, sizeof(char) );

if( archivoMem != NULL ){
while( !feof(ptrArchivo) ){
*(archivoMem+i) = fgetc( ptrArchivo );
i++;
}
}else{
printf( "\n ERROR - Fallo la asignación de memoria..." );
exit(EXIT_FAILURE);
}

return archivoMem;
}

void corrector( long int tamanio, char *archivoMem ){
int i;
for( i=0; i<tamanio; i++ ){
printf("%d", *(archivoMem+i) );
}
}


El archivo a copiar:

#include <stdio.h>

int main( void ){

printf( "\n Hola mundo\n\n" );

return 0;

}


Gracias y un abrazo. -
#80
if( ptrArchivo != NULL ){
fseek(ptrArchivo,0,SEEK_END);
tamanio = ftell(ptrArchivo);
fclose( ptrArchivo );
}else{
printf( "\n ERROR - el archivo no se pudo abrir..." );
exit(EXIT_FAILURE);
}


Ahora me quiero ver con el resto. - :huh: :huh: :huh:
Saludos.