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

#81
Hola.
Decirme si lo que pienso hacer es una forma correcta, cuento con getchar() el total de caracteres que tiene el archivo y luego con este dato reservo memoria dinámica para cargarlo en precisamente en memoria ¿es una buena alternativa?. -
Saludos.
#82
Hola, muy buen día, ¿cómo están? -
Les comento, termine de estudias con el manual de COMO PROGRAMAR C C++ Y JAVA DEITEL&DEITEL-4° Edición-Español y para refrescar conceptos estoy leyendo El lenguaje de programación C - Kernighan, Ritchie, y piden que haga el siguiente programa. -

CitarEjercicio 1-24. Escriba un programa para revisar los errores de sintaxis rudimen­
tarios de un programa en C, como paréntesis, llaves y corchetes no alineados. No
olvide las comillas ni los apóstrofos, las secuencias de escape y los comentarios.
(Este programa es difícil si se hace completamente general.)

La primera duda que tengo es ¿pondrían el código en una variable char o en un archivo?
Desde ya muchas gracias, saludos. -
#84
Hola, que tengan un muy buen día. -
De tanto buscar encontré un Ej. que si bien estaba en c++ lo pude adaptar, este código cumple con todas mis expectativas en cuanto a lo que necesitaba sobre el tema, seria bueno que además del código de MAFUS (que deseo con muchas ansias verlo editado) alguien más de su versión de como haria lo mismo pero con otro código. -

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

#define MAX_CHAR 30

void limpiar( void );
void mostrar( char **frases, int numStrings );
void liberar( char **frases, int numStrings );

int main( void ){
char **frases = NULL, tmp_frase[MAX_CHAR], *p=NULL;
int i, numStrings = 0, ch;

while( 1 ){
limpiar();
if( numStrings > 0){
mostrar( frases, numStrings );
}
printf( "\n Introduzca una cadena (Enter para finalizar)......: ");
fgets(tmp_frase, MAX_CHAR, stdin );
if((p=strchr(tmp_frase, '\n'))){
*p='\0';
}
else{
while((ch = getchar()) !='\n' && ch!=EOF);
}
   if (strlen(tmp_frase) == 0){
break;
   }
   frases = (char **) realloc (frases, (numStrings+1) * sizeof(char *));
if( frases!=NULL ){
    frases[numStrings++] = strdup(tmp_frase);
}else{
printf( "\n Error, no se pudo asignar memoria" );
printf( "\n Pulse [Enter] para finalizar..." ); getchar();
liberar( frases, numStrings );
exit(1);
}
}
liberar( frases, numStrings );

return 0;
}

void limpiar( void ){
system("cls||clear");
}

void mostrar( char **frases, int numStrings ){
int i;

printf("\n ========================= Ingresos ========================= " );
for(i=0; i < numStrings; i++){
printf("\n %s", frases[i]);
}
printf("\n ============================================================\n\n " );
}

void liberar( char **frases, int numStrings ){
int i;
for (i=0; i < numStrings; i++){
free (frases[i]);
}

free (frases);
}


Un fuerte abrazo para todos.
#85
Hola, MAFUS.
En mucho tiempo es la primera vez que no me resulta(tus ayudas) y además no entiendo los trozos de código que propones, por lo tanto, voy a intentarlo de otra manera, estoy desconcertado, tal vez otra propuesta me aclare las cosas. -

Un abrazo. -
#86
Hola a todos.
Alguien me podría decir como solucionar el siguiente error:
Citarrepaso.c: In function 'main':
repaso.c:44:3: warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int' [-Wformat=]
  printf( "\n %s ", frases[n] );
  ^

Créanme que con lo tedioso que me resulta buscar la solución en inglés lo hice por un montón de páginas y no logré dar con la solución, creo que el error lo tengo en la línea 29 pero no lo logro.

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

#define MAX_CHAR 30

void limpiar( void );

int main( void ){
size_t contador=0, ch, n;
char *frases=NULL, *tmpFrases=NULL, ingreso[MAX_CHAR], salir, *p=NULL;

do{
limpiar();
printf("\n Ingrese frase(maximo %d)....: ", MAX_CHAR);
fgets( ingreso , MAX_CHAR, stdin );
if((p=strchr(ingreso, '\n'))){
*p='\0';
}
else{
while((ch = getchar()) !='\n' && ch!=EOF);
}
contador++;

tmpFrases = (char*)realloc( frases, contador * sizeof(char) );

if( tmpFrases!=NULL ){
frases=tmpFrases;
frases[contador-1] = *ingreso ;
}
else{
free( frases );
puts( "Error (re)allocating memory" );
exit(1);
}

printf("\n Para continuar \"S\" para finalizar \"N\"....:");
scanf("%c", &salir);
while((ch = getchar()) !='\n' && ch!=EOF);
}while ( salir != 'n' && salir != 'N' );

printf ("\n Frases introducidas.....: ");
for( n=0; n < contador-1; n++ )
printf( "\n %s ", frases[n] );

free( frases );


return 0;
}

void limpiar( void ){
system("cls||clear");
}

dato000 gracias por ocuparte del tema anterior. -
Saludos
#87
Hola, gente -
Mi pregunta es, ¿hay alguna diferencia en trabajar directamente con un arreglo (en este caso de enteros) o hacer un arreglo de apuntadores a ese arreglo? -
Me construí este pequeño código y me surgió la duda, les agrego otra pregunta por qué seguramente muchos de los que saben en este foro tendrán muchas horas de práctica, ¿se han encontrado en algún momento con la necesidad de utilizar este tipo de código o vieron a otros utilizarlo?

// Viernes 30 sep 2016 20:39:55 ART  Arreglo de apuntadores

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

#define MAX 25

void llenar( int vector[] );
int *arregloPtr( int vector[], int *vectorPtr[] );
void mostrar( int *vectorPtr[] );
   

int main(int argc, char **argv){
int vector[MAX], *vectorPtr[MAX];

llenar( vector );
*vectorPtr = arregloPtr( vector, vectorPtr );
mostrar( vectorPtr );

return 0;
}

void llenar( int vector[] ){
int i;
srand ( time(NULL) );

for( i=0; i<MAX; i++ ){
vector[i] = rand() % 100;
}
}

int *arregloPtr( int vector[], int *vectorPtr[] ){
int i;

for( i=0; i<MAX; i++ ){
vectorPtr[i] = &vector[i];
}

return *vectorPtr;
}

void mostrar( int *vectorPtr[] ){
int i;

for( i=0; i<MAX; i++ ){
if( i % 5 == 0 ){
printf( "\n" );
}
printf( " %2d", *vectorPtr[i] );
}
printf( "\n\n" );
}


Desde ya muchas gracias y saludos.
#88
Hola.
Bien entendí y funciona a la perfección, por si alguien más tiene el mismo inconveniente se debe quitar el asterisco de la llamada a las distintas funciones, no sé explicar el porqué. -  

llenar( ptrVector );

Saludos.
#89
Hola, gente, como están. -
La consulta es para que me digan que estoy haciendo mal, si está dentro de la función main tengo que utilizar esta sintaxis(línea 16/20)

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

#define MAX 10

int main(void){
int a[MAX];
int (*ptrVector)[MAX] = &a;
int i;
srand (time(NULL));

printf( "\n" );

for(i=0; i<MAX; i++){
(*ptrVector)[i] = rand() % 50;
}

for(i=0; i<MAX; i++){
printf(" %d ", (*ptrVector)[i]);
}

printf( "\n\n" );

return 0;
}


Y si está en otra función esta otra(línea 33/46)

Yo quisiera utilizar siempre la primera pero no sé cómo pasar el puntero correctamente a las funciones. -

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

#define MAX 25

void llenar( int *ptrVector );
void mostrar( int  const *ptrVector );
void sumar( int const *ptrVector );

int main( void ){
int vector[MAX], ( *ptrVector )[MAX] = &vector;

llenar( *ptrVector );

mostrar( *ptrVector );

//sumar( *ptrVector );

printf( "\n\n" );

return 0;
}


void llenar( int *ptrVector ){
int i;
srand( time(NULL) );

printf( "\n" );

for( i=0; i<MAX; i++){
*(ptrVector+i) = rand() % 100;
}
}

void mostrar( int const *ptrVector ){
int i;

printf( "\n" );

for( i=0; i<MAX; i++){
if( i % 5 == 0 ){
printf( "\n" );
}
printf( "   %2d", *(ptrVector+i) );
}

printf( "\n   ----------------------" );

}

void sumar( int const *ptrVector ){
int i; //resultado=0, indice;
//indice = Fila*Numero de columnas + Columna

printf( "\n" );

for( i=0; i<MAX; i++){
}

printf( "\n---------------" );

}


En cuanto a la función sumar todavía no lo logro, pero ya va a salir, seguramente. -

Saludos y como siempre muchas gracias. -








#90
Bueno todo solucionado, pido mil disculpas a todos los que participaron por utilizar demasiado su tiempo, realmente creí que algo más sencillo, pero evidentemente y como muchas veces me ocurre me cuesta hacer que me entiendan, hubo por ahí un comentario pre juicioso que me pareció que estuvo de más, pero todo bien. -
Dejo el código para demostrar del todo lo que quería lograr, por último, por lo que pedí ayuda no fue algo caprichoso, lo que ocurre es que en casi todas mis practicas suelo llamar a una función dentro del cuerpo de otra y me parece que de esta forma queda más legible. -

#include <stdio.h>

char* a();
void b( char* dos, int x );

int main(void){
int x = 5;
b(a(), x);

return 0;
}

char* a() {
char* dos = "dos";
printf(" frase uno = %s\n", "uno");
return dos;
}

void b(char* dos, int x) {
printf(" frase dos = %s", dos);
printf("\n numero = %d\n", x);
}
   

Saludos y muchas gracias a todos.