elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ... 37
81  Programación / Programación C/C++ / Re: Programa para revisar los errores de sintaxis de un programa en C. en: 8 Octubre 2016, 16:42 pm
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  Programación / Programación C/C++ / Programa para revisar los errores de sintaxis de un programa en C. en: 8 Octubre 2016, 14:54 pm
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. -

Citar
Ejercicio 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. -
83  Programación / Programación C/C++ / Re: Arreglo de cadenas con memoria dinámica (realloc) lenguaje C. en: 4 Octubre 2016, 16:29 pm

Yo que hice??? en fin, slds

http://foro.elhacker.net/programacion_cc/arreglo_de_apuntadores_vs_arreglo_comun_en_lenguaje_c-t458486.0.html
84  Programación / Programación C/C++ / Re: Arreglo de cadenas con memoria dinámica (realloc) lenguaje C. en: 4 Octubre 2016, 12:59 pm
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. -

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX_CHAR 30
  6.  
  7. void limpiar( void );
  8. void mostrar( char **frases, int numStrings );
  9. void liberar( char **frases, int numStrings );
  10.  
  11. int main( void ){
  12. char **frases = NULL, tmp_frase[MAX_CHAR], *p=NULL;
  13. int i, numStrings = 0, ch;
  14.  
  15. while( 1 ){
  16. limpiar();
  17. if( numStrings > 0){
  18. mostrar( frases, numStrings );
  19. }
  20. printf( "\n Introduzca una cadena (Enter para finalizar)......: ");
  21. fgets(tmp_frase, MAX_CHAR, stdin );
  22. if((p=strchr(tmp_frase, '\n'))){
  23. *p='\0';
  24. }
  25. else{
  26. while((ch = getchar()) !='\n' && ch!=EOF);
  27. }
  28.    if (strlen(tmp_frase) == 0){
  29. break;
  30.    }
  31.    frases = (char **) realloc (frases, (numStrings+1) * sizeof(char *));
  32. if( frases!=NULL ){
  33.     frases[numStrings++] = strdup(tmp_frase);
  34. }else{
  35. printf( "\n Error, no se pudo asignar memoria" );
  36. printf( "\n Pulse [Enter] para finalizar..." ); getchar();
  37. liberar( frases, numStrings );
  38. exit(1);
  39. }
  40. }
  41. liberar( frases, numStrings );
  42.  
  43. return 0;
  44. }
  45.  
  46. void limpiar( void ){
  47. system("cls||clear");
  48. }
  49.  
  50. void mostrar( char **frases, int numStrings ){
  51. int i;
  52.  
  53. printf("\n ========================= Ingresos ========================= " );
  54. for(i=0; i < numStrings; i++){
  55. printf("\n %s", frases[i]);
  56. }
  57. printf("\n ============================================================\n\n " );
  58. }
  59.  
  60. void liberar( char **frases, int numStrings ){
  61. int i;
  62. for (i=0; i < numStrings; i++){
  63. free (frases[i]);
  64. }
  65.  
  66. free (frases);
  67. }

Un fuerte abrazo para todos.
85  Programación / Programación C/C++ / Re: Arreglo de cadenas con memoria dinámica (realloc) lenguaje C. en: 4 Octubre 2016, 01:37 am
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  Programación / Programación C/C++ / Arreglo de cadenas con memoria dinámica (realloc) lenguaje C. en: 3 Octubre 2016, 23:02 pm
Hola a todos.
Alguien me podría decir como solucionar el siguiente error:
Citar
repaso.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.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX_CHAR 30
  6.  
  7. void limpiar( void );
  8.  
  9. int main( void ){
  10. size_t contador=0, ch, n;
  11. char *frases=NULL, *tmpFrases=NULL, ingreso[MAX_CHAR], salir, *p=NULL;
  12.  
  13. do{
  14. limpiar();
  15. printf("\n Ingrese frase(maximo %d)....: ", MAX_CHAR);
  16. fgets( ingreso , MAX_CHAR, stdin );
  17. if((p=strchr(ingreso, '\n'))){
  18. *p='\0';
  19. }
  20. else{
  21. while((ch = getchar()) !='\n' && ch!=EOF);
  22. }
  23. contador++;
  24.  
  25. tmpFrases = (char*)realloc( frases, contador * sizeof(char) );
  26.  
  27. if( tmpFrases!=NULL ){
  28. frases=tmpFrases;
  29. frases[contador-1] = *ingreso ;
  30. }
  31. else{
  32. free( frases );
  33. puts( "Error (re)allocating memory" );
  34. exit(1);
  35. }
  36.  
  37. printf("\n Para continuar \"S\" para finalizar \"N\"....:");
  38. scanf("%c", &salir);
  39. while((ch = getchar()) !='\n' && ch!=EOF);
  40. }while ( salir != 'n' && salir != 'N' );
  41.  
  42. printf ("\n Frases introducidas.....: ");
  43. for( n=0; n < contador-1; n++ )
  44. printf( "\n %s ", frases[n] );
  45.  
  46. free( frases );
  47.  
  48.  
  49. return 0;
  50. }
  51.  
  52. void limpiar( void ){
  53. system("cls||clear");
  54. }
dato000 gracias por ocuparte del tema anterior. -
Saludos
87  Programación / Programación C/C++ / Arreglo de apuntadores vs. arreglo común en lenguaje C. en: 1 Octubre 2016, 04:02 am
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?

Código
  1. // Viernes 30 sep 2016 20:39:55 ART  Arreglo de apuntadores
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6.  
  7. #define MAX 25
  8.  
  9. void llenar( int vector[] );
  10. int *arregloPtr( int vector[], int *vectorPtr[] );
  11. void mostrar( int *vectorPtr[] );
  12.  
  13.  
  14. int main(int argc, char **argv){
  15. int vector[MAX], *vectorPtr[MAX];
  16.  
  17. llenar( vector );
  18. *vectorPtr = arregloPtr( vector, vectorPtr );
  19. mostrar( vectorPtr );
  20.  
  21. return 0;
  22. }
  23.  
  24. void llenar( int vector[] ){
  25. int i;
  26. srand ( time(NULL) );
  27.  
  28. for( i=0; i<MAX; i++ ){
  29. vector[i] = rand() % 100;
  30. }
  31. }
  32.  
  33. int *arregloPtr( int vector[], int *vectorPtr[] ){
  34. int i;
  35.  
  36. for( i=0; i<MAX; i++ ){
  37. vectorPtr[i] = &vector[i];
  38. }
  39.  
  40. return *vectorPtr;
  41. }
  42.  
  43. void mostrar( int *vectorPtr[] ){
  44. int i;
  45.  
  46. for( i=0; i<MAX; i++ ){
  47. if( i % 5 == 0 ){
  48. printf( "\n" );
  49. }
  50. printf( " %2d", *vectorPtr[i] );
  51. }
  52. printf( "\n\n" );
  53. }

Desde ya muchas gracias y saludos.
88  Programación / Programación C/C++ / Re: Diferencia con puntero a vector en lenguaje C (dentro y fuera de main). en: 29 Septiembre 2016, 21:59 pm
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é. -  

Código
  1. llenar( ptrVector );

Saludos.
89  Programación / Programación C/C++ / Diferencia con puntero a vector en lenguaje C (dentro y fuera de main). en: 29 Septiembre 2016, 19:00 pm
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)

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define MAX 10
  6.  
  7. int main(void){
  8. int a[MAX];
  9. int (*ptrVector)[MAX] = &a;
  10. int i;
  11. srand (time(NULL));
  12.  
  13. printf( "\n" );
  14.  
  15. for(i=0; i<MAX; i++){
  16. (*ptrVector)[i] = rand() % 50;
  17. }
  18.  
  19. for(i=0; i<MAX; i++){
  20. printf(" %d ", (*ptrVector)[i]);
  21. }
  22.  
  23. printf( "\n\n" );
  24.  
  25. return 0;
  26. }

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. -

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define MAX 25
  6.  
  7. void llenar( int *ptrVector );
  8. void mostrar( int  const *ptrVector );
  9. void sumar( int const *ptrVector );
  10.  
  11. int main( void ){
  12. int vector[MAX], ( *ptrVector )[MAX] = &vector;
  13.  
  14. llenar( *ptrVector );
  15.  
  16. mostrar( *ptrVector );
  17.  
  18. //sumar( *ptrVector );
  19.  
  20. printf( "\n\n" );
  21.  
  22. return 0;
  23. }
  24.  
  25.  
  26. void llenar( int *ptrVector ){
  27. int i;
  28. srand( time(NULL) );
  29.  
  30. printf( "\n" );
  31.  
  32. for( i=0; i<MAX; i++){
  33. *(ptrVector+i) = rand() % 100;
  34. }
  35. }
  36.  
  37. void mostrar( int const *ptrVector ){
  38. int i;
  39.  
  40. printf( "\n" );
  41.  
  42. for( i=0; i<MAX; i++){
  43. if( i % 5 == 0 ){
  44. printf( "\n" );
  45. }
  46. printf( "   %2d", *(ptrVector+i) );
  47. }
  48.  
  49. printf( "\n   ----------------------" );
  50.  
  51. }
  52.  
  53. void sumar( int const *ptrVector ){
  54. int i; //resultado=0, indice;
  55. //indice = Fila*Numero de columnas + Columna
  56.  
  57. printf( "\n" );
  58.  
  59. for( i=0; i<MAX; i++){
  60. }
  61.  
  62. printf( "\n---------------" );
  63.  
  64. }

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  Programación / Programación C/C++ / Re: Llamas a función y pasar como argumento otra llamada a función [C] en: 25 Septiembre 2016, 17:54 pm
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. -

Código
  1. #include <stdio.h>
  2.  
  3. char* a();
  4. void b( char* dos, int x );
  5.  
  6. int main(void){
  7. int x = 5;
  8. b(a(), x);
  9.  
  10. return 0;
  11. }
  12.  
  13. char* a() {
  14. char* dos = "dos";
  15. printf(" frase uno = %s\n", "uno");
  16. return dos;
  17. }
  18.  
  19. void b(char* dos, int x) {
  20. printf(" frase dos = %s", dos);
  21. printf("\n numero = %d\n", x);
  22. }
   

Saludos y muchas gracias a todos.
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ... 37
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines