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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 8 [9] 10
81  Programación / Programación C/C++ / Cuando utilizar signed y cuando unsigned (lenguaje C) en: 17 Agosto 2014, 15:58 pm
Hola a todos.-

Bueno simplemente eso, no me queda muy claro si es simplemente para obtener un número mayor o tiene otro significado, recuerdo que en una oportunidad(en este foro) me daba un error por declarar una variable como unsigned, no puedo encontrar el post, por lo tanto hago esta consulta a Uds. que seguramente con tanta práctica y sapiencia me lo podrán aclarar.-

Saludos.
Daniel
82  Programación / Programación C/C++ / Matriz con puntos de silla (lenguaje C) en: 12 Agosto 2014, 19:54 pm
Hola gente.
Tengo un error con la validación de datos en este programa y por más que práctico no logro dar con la tecla.-
Debo reconocer que puedo estar cometiendo un error que ya debería resolver por mi mismo pero me pase 2 días de 8 horas cada uno para hacer que funcionara la matriz de punto de silla y cuando lo logré (bueno creo que lo logré porque lo corrí más de 50 veces y nunca me sale la tabla con la coincidencia) me aparece este error que deseo que me ayuden a resolver porque quiero dejar perfectamente establecida la forma correcta de utilizar fgets.-

Código
  1. /*
  2. Se dice que una matriz tiene un punto de silla si alguna posición de la matriz
  3. es el menor valor de su fila, y a la vez el mayor de su columna.-
  4. */
  5.  
  6. #include<stdio.h>
  7. #include<stdlib.h>
  8. #include<string.h>
  9. #include<time.h>  
  10. #include <ctype.h>
  11.  
  12. #define MAX_VECTOR 2
  13. #define MAX_F_C 10
  14.  
  15.  
  16. void verificaFil(int *intFil);
  17. void verificaCol(int *intFil);
  18. void ingreso(int matriz[], int intFil, int intCol);
  19. void puntoDeSilla(int matriz[], int intFil, int intCol);
  20.  
  21.  
  22. int main(void){
  23. int intFil=0, intCol=0, *matriz=NULL;
  24.  
  25. printf("\n\n ===== El programa le mostrara los puntos de silla (si los hay) =====\n\n");
  26. verificaFil(&intFil);
  27. verificaCol(&intCol);
  28. matriz = malloc(intFil * intCol * sizeof(int));
  29.  
  30. ingreso(matriz, intFil, intCol);
  31.  
  32. puntoDeSilla(matriz, intFil, intCol);
  33.  
  34. free(matriz);
  35. printf("\n\n");
  36. return 0;
  37. }
  38.  
  39. void verificaFil(int *intFil){
  40. char charFil[MAX_F_C+1]={'\0'}, *p=NULL;
  41. unsigned int ch=0, i=0, ok=0;
  42.  
  43. do{
  44. printf(" Ingrese un entero para establecer la cantidad de filas (m%cximo %d)......:", 160,MAX_F_C);
  45. fgets(charFil,  MAX_F_C, stdin);
  46.  
  47. if((p=strchr(charFil, '\n'))!=0){
  48. *p='\0';
  49. }
  50. else{
  51. while((ch = getchar()) !='\n' && ch!=EOF);
  52. }
  53.  
  54. ok=0;
  55. for(; charFil[i]; i++){
  56. if(!isdigit(charFil[i])){
  57. ok++;
  58. }
  59. }
  60. if(ok==0){
  61. *intFil = atoi(charFil);
  62. (*intFil == 0 || *intFil > MAX_F_C) ? ok=1 : ok;
  63. }
  64. }while(ok !=0);
  65. }
  66.  
  67. void verificaCol(int *intCol){
  68. char charCol[MAX_F_C+1]={'\0'}, *p=NULL;
  69. unsigned int ch=0, i=0, ok=0;
  70.  
  71. printf("\n");
  72. do{
  73. printf(" Ingrese un entero para establecer la cantidad de columnas (m%cximo %d)...:", 160,MAX_F_C);
  74. fgets(charCol,  MAX_F_C, stdin);
  75.  
  76. if((p=strchr(charCol, '\n'))!=0){
  77. *p='\0';
  78. }
  79. else{
  80. while((ch = getchar()) !='\n' && ch!=EOF);
  81. }
  82.  
  83. ok=0;
  84. for(; charCol[i]; i++){
  85. if(!isdigit(charCol[i])){
  86. ok++;
  87. }
  88. }
  89.  
  90. if(ok==0){
  91. *intCol = atoi(charCol);
  92. (*intCol == 0 || *intCol > MAX_F_C) ? ok=1 : ok;
  93. }
  94. }while(ok !=0);
  95. }
  96.  
  97. void ingreso(int matriz[], int intFil, int intCol){
  98. unsigned int hora = time(NULL), i=0, j=0, indice=0;
  99. srand(hora);  
  100.  
  101. for(; i < intFil; i++){
  102. for(j=0; j < intCol; j++){
  103. indice = i * intCol + j;
  104. matriz[indice] = rand ()% 100;
  105. }
  106. }
  107.  
  108. printf("\n");
  109. for(i=0; i<intFil; i++){
  110. for(j=0; j<intCol; j++){
  111. indice = i * intCol + j;
  112. printf(" %3d", matriz[indice]);
  113. }
  114. if(j%intCol==0) printf("\n");
  115. }
  116.  
  117. }
  118.  
  119. void puntoDeSilla(int matriz[], int intFil, int intCol){
  120. int i, j, elMenor=0, colMen=0, indice=0, noPds;
  121.  
  122. for(i = 0; i < intFil; i++){
  123. noPds = 0;
  124. indice = intCol * i;
  125. elMenor=matriz[indice];
  126. colMen =  indice-(intCol*i);
  127.  
  128. for(j=0; j < intCol; j++){
  129. if(matriz[indice] < elMenor){
  130. elMenor = matriz[indice];
  131. colMen =  indice-(intCol*i);
  132. }
  133. indice++;
  134. }
  135.  
  136. for(j=0; j < intFil; j++){
  137. indice = j * intCol + colMen;
  138. if(matriz[indice] > elMenor){
  139. noPds++;
  140. }
  141. }
  142. if(noPds == 0)
  143. printf("\n en la fila %d columna %d hay punto de silla", i, colMen);
  144. }
  145. }

  Uno de los ingresos incorrectos:
  Ingreso…: -4 (incorrecto)
  Ingreso…: aa (incorrecto)
  Ingreso…: 11 (incorrecto)
  Ingreso…: -4 (correcto)

Bueno espero que me puedan ayudar y no vacilen en cambiar todo lo que deseen cambiar de mi código, es así como puedo aprender cosas que no están en los manuales.- 
   
Saludos y un gran abrazo
Daniel.
83  Programación / Programación C/C++ / Sustituir cada palabra de 4 letras con asteriscos(lenguaje c) en: 5 Agosto 2014, 19:35 pm
Hola a todos.
Me pase con este tema unas cuantas horas y hasta aquí llegue, espero que me puedan ayudar a resolverlo.-

En primer lugar les pongo el enunciado.


Lo que llevo hecho es lo siguiente.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(void){
  5. char tempFrase[] = "La casa de Juan es de color azul", *token, frase[32];
  6. int ocurrencias=0;
  7.  
  8. strcpy(frase, tempFrase);
  9.  
  10. token = strtok(tempFrase," ");
  11. while (token != NULL){
  12. printf("\n En la direccion %p se encuentra la palabra...: %s\n", token ,token);
  13. (strlen(token) == 4) ? ocurrencias++ : ocurrencias;
  14. token = strtok(NULL," ");
  15. }
  16.  
  17. printf("\n La frase \"%s\" contiene %d palabras de 4 letras\n\n", frase, ocurrencias);
  18.  
  19. return 0;
  20. }
  21.  
  22.  
  23.  
  24. /*
  25. #include <stdio.h>
  26. #include <string.h>
  27.  
  28. #define MAX_FRASES 5
  29. #define MAX_LONGITUD 30
  30.  
  31. void verificaIngreso(char frases[][MAX_LONGITUD], int i);
  32.  
  33. int main(void){
  34. char frases[MAX_FRASES][MAX_LONGITUD];
  35. int i=0, j=0, ocurrencias=0, com=0, fin=0;
  36.  
  37. for(; i<MAX_FRASES; i++){
  38. printf("\n Ingrece frase[%d]...:", i+1);
  39. fgets(frases[i], MAX_LONGITUD, stdin);
  40. verificaIngreso(frases, i);
  41. }
  42.  
  43. for(i=0; i<MAX_FRASES; i++){
  44. printf("\n La frase[%d] tiene una longitud de %d caracteres", i+1,  strlen(frases[i]));
  45. }
  46.  
  47. for(i=0; i<MAX_FRASES; i++){
  48. for(j=0; frases[i][j]; j++){
  49. if(frases[i][j] == 32)
  50. com = frases[j]
  51.  
  52. }
  53. }
  54.  
  55. printf("\n %d", espacios);
  56. printf("\n\n");
  57. return 0;
  58. }
  59.  
  60. void verificaIngreso(char frases[][MAX_LONGITUD], int i){
  61. char *p=NULL;
  62. unsigned int ch=0;
  63.  
  64. if((p=strchr(frases[i], '\n'))!=0){
  65. *p='\0';
  66. }
  67. else{
  68. while((ch = getchar()) !='\n' && ch!=EOF);
  69. }
  70.  
  71. }*/

Lo que no puedo saber es ¿Qué referencia debo utilizar para acceder a la variable frase y sustituir todas las palabras de 4 letras con asteriscos ?.- 
 
Saludos y desde ya muchas gracias por el tiempo.-
Daniel
84  Foros Generales / Sugerencias y dudas sobre el Foro / Poner el motivo del porque se modificó el post (C/C++) en: 8 Abril 2014, 21:32 pm
Hola a todos y que tengan un muy buen día.-
Les traigo una sugerencia, ¿podrían poner  una opción en el sub-foro de c/c++ para que el que edite el post tenga “obligatoriamente“que especificar el motivo de la modificación?,  les traigo esta idea porque analizando las modificaciones y más en el caso de leo que http://foro.elhacker.net/programacion_cc/prioridad_y_asociatividad_de_los_operadores_en_c_programa_propio-t412169.0.html después de la sugerencia escribió casi una biblia, a los que estamos pidiendo ayuda y a los que ayudan porque no nos resultaría harto beneficioso, por lo menos es lo que yo creo.-

Saludos.
Daniel
85  Programación / Programación C/C++ / Prioridad y asociatividad de los operadores en C. (Programa propio) en: 6 Abril 2014, 21:16 pm
Hola a todos y que tengan un muy buen día.-
Por el enunciado se darán cuenta de lo que deseo hacer, si me dejan ser prejuicio muchos dirán que ganas de complicarse por algo que el compilador de C lo efectúa perfectamente, si bien esto es cierto tengo mucha fe que este hilo me proporcionara mucho conocimiento (intuición, corazonada).-
Lo primero que deseo hacer es poner en una variable int (9 - 2) y borrarlo de la variable cadena, si bien logro extraer la cadena con un inicio correcto pero no logro el corte en el último paréntesis.-
Por último ¿lo harian de otra manera?.-     

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(){
  5. char cadena[100] = "3 * 5 + (9 - 2) + 5", *enc = NULL;
  6.  
  7. enc = strchr(cadena, '(');
  8.  
  9. printf("\n %s", enc);
  10.  
  11. printf("\n\n");
  12. return 0;
  13. }

Saludos y desde ya muchas gracias.
Daniel
86  Programación / Programación C/C++ / Operadores, Prioridad y asociatividad en lenguaje C. en: 4 Abril 2014, 02:55 am
Hola a todos y que tengan un muy buen día.-
En este caso estoy estudiando operadores, Prioridad y asociatividad y realmente estoy trabado, en el programa, la segunda sentencia logro establecer qué el resultado sea 119 (creo estar en lo correcto).-

Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4. int a = 3 + 4 *(8 * (4 - ( 9 + 3) /6)); //67
  5. int b = 4 * 3 * 5 + 8 * 4 * 2 - 5; //119
  6.  
  7. printf("\n El resultado de 3 + 4 *(8 * (4 - ( 9 + 3) /6)) es...: %d", a);
  8. printf("\n\n El resultado de 4 * 3 * 5 + 8 * 4 * 2 - 5 es........: %d", b);
  9.  
  10. printf("\n\n");
  11. return 0;
  12. }

 
Citar

  4 * 3 * 5 + 8 * 4 * 2 - 5

 4 * 3 = 12
 12 * 5 = 60

 8 * 4 = 32
 32 * 2 = 64

 64 + 60 = 124

 124 – 5 = 119


Pero la primera ni hay logro plasmar los pasos, bueno espero como siempre que me ayuden a descifrar el enigma que me tiene bastante ocupado.-
Por otro lado, quisiera saber si les parece muy difícil hacer un programa para emular el compilador, o sea, mostrar paso a paso la fórmula para llegar al resultado final, alguien lo hizo alguna vez.-   
   
Saludos.
Daniel
87  Programación / Programación C/C++ / Descomponer un numero entero en lenguaje C. en: 31 Marzo 2014, 16:00 pm
Hola a todos y que tengan un muy buen dia.

Lenguaje………………....: “C”
Sistema operativo……: Windows XP
Compilador……………...: MinGW
Problema………………...: No puedo concluir el programa porque no logro mover
                                asía la izquierda los dígitos restantes e insertar el ‘\0’.-                                                   
Error………………………...: Ninguno.
Otras Observaciones: Para todo aquellos que tengan mucho tiempo, me
                                podrían indicar que debo cambiar para obtimizarlo .     
Código……………………..:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4. #include <string.h>
  5.  
  6. int verifica(char ingreso[], int ok, int longitud, int maxDescartar);
  7.  
  8. int main(){
  9. unsigned int descartar=0, numeroFinal=0, i=0, ok=0, longitud=11;
  10. char digitos[12] = {'\0'}, cualDescartar[2] = {'\0'};
  11. printf("\n ---------- Programa que descompone un numero entero sin signo ----------");
  12. do{
  13. ok=0;
  14. printf("\n\n Ingrece un numero entero sin signo [minimo 100 maximo %u].........: ", UINT_MAX);
  15. fgets(digitos, longitud, stdin);
  16. ok = verifica(digitos, ok, longitud, i);
  17. }while(ok);
  18.  
  19. printf("\n\n");
  20. for(; digitos[i] != NULL; i++){
  21. printf(" [%d] = %c \n", i, digitos[i]);
  22. }
  23.  
  24. do{
  25. longitud=2;
  26. ok=0;
  27. printf("\n\n Indique con un entero sin signo del [0] al [%d] que numero desea descartar..: ", i-1);
  28. fgets(cualDescartar, longitud, stdin);
  29. ok = verifica(cualDescartar, ok, longitud, i);
  30. }while(ok);
  31.  
  32. descartar = atoi(cualDescartar);
  33. //En este lugar va lo que me falta...
  34.  
  35. printf("\n\n");
  36. return 0;
  37. }
  38.  
  39.  
  40. int verifica(char ingreso[], int ok, int longitud, int maxDescartar){
  41. long long temp=0, auxiliar=0;
  42. int ch=0, i=0, ingresoInt=0;
  43. char *p=NULL;
  44.  
  45. if((p=strchr(ingreso, '\n'))){
  46. *p='\0';
  47. }
  48. else{
  49. ingreso[longitud] = '\0';
  50. while((ch = getchar()) !='\n' && ch!=EOF);
  51. }
  52.  
  53. for(; ingreso[i] != NULL; i++){
  54. if(ingreso[i] <= 47 || ingreso[i] >= 58){
  55. ok=1;
  56. return ok;
  57. }
  58. }
  59.  
  60. if(longitud == 11){
  61. for(i=0; ingreso[i] != NULL; i++){
  62. auxiliar = ingreso[i] - 48;
  63. temp=10*temp+auxiliar;
  64. }
  65.  
  66. if(temp <= 99 || temp > UINT_MAX){
  67. ok=1;
  68. return ok;
  69. }
  70. }
  71. else{
  72. ingresoInt = atoi(ingreso);
  73. if(ingresoInt > maxDescartar){
  74. ok=1;
  75. return ok;
  76. }
  77. }
  78. return ok;
  79. }
  80.  
  81. /*
  82. sprintf(digitos, "%d", 56789);
  83. */

Saludos y muchas pero muchas gracias por el tiempo dedicado a este tema.-
Daniel
88  Programación / Programación C/C++ / De minúscula a mayúscula a nivel de bits (lenguaje C.) en: 18 Marzo 2014, 22:53 pm
Hola a todos.

Lenguaje………………..: "C"

Sistema operativo.….: Windows XP

Compilador……………..: MinGW

Problema………………..:Esta estructura puede tener el mismo problema que plantea rir3760 en este post. 
                              http://foro.elhacker.net/programacion_cc/operadores_a_nivel_de_bits_lenguaje_c-t410671.0.html
                                                        
Error…………….…….….: Ninguno.

Otras Observaciones..:http://foro.elhacker.net/programacion_cc/de_minuscula_a_mayuscula_a_nivel_de_bits_en_lenguaje_c-t405856.0.html


Código…………………….:


//Con uniones y campos de bit.

Código
  1. #include <stdio.h>
  2.  
  3. union caracteres
  4. {
  5. unsigned char c;
  6. struct c_bits
  7. {
  8. unsigned b0:1;
  9. unsigned b1:1;
  10. unsigned b2:1;
  11. unsigned b3:1;
  12. unsigned b4:1;
  13. unsigned b5:1;
  14. unsigned b6:1;
  15. unsigned b7:1;
  16. } bits;
  17. };
  18.  
  19. int main(void){
  20. union caracteres caracter = {110};
  21.  
  22. printf("\n\n union caracteres caracter = {110};");
  23. printf("\n\n La variable caracter contiene la letra...: \"%c\"", caracter.c);
  24.  
  25. printf("\n\n caracter.bits.b5 = 0; //Apaga el bits 5 para que la letra 'n' se transforme en 'N'");
  26. caracter.bits.b5 = 0;
  27. printf("\n\n Ahora la variable caracter contiene la letra...: \"%c\"", caracter.c);
  28.  
  29. printf("\n\n");
  30. return 0;
  31. }
  32.  

//Con máscaras y operaciones a nivel de bit.

Código
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4. char letra = 'n';
  5.  
  6. printf("\n\n char letra = 'n';");
  7. printf("\n\n La variable letra contiene la letra...: \'%c\'", letra);
  8.  
  9. letra &=0xDF;
  10. printf("\n\n letra &=0xDF; // 0xDF es en binario = 1101 1111 --> pones a 0 el bit 5");
  11.  
  12. printf("\n\n Ahora la variable letra contiene la letra...: \'%c\'", letra);
  13.  
  14. printf("\n\n");
  15. return 0;
  16. }
  17.  

Saludos y como siempre muchas gracias.
Daniel 
89  Programación / Programación C/C++ / Operadores a nivel de bits (lenguaje C). en: 16 Marzo 2014, 02:48 am
Hola a todos.
Estoy estudiando “Operadores a nivel de bits” y no sólo deseo aprender la sintaxis sino también interpretar lo que hace cada línea de código.-

Lenguaje: “C”

Problema: (dudas) Expuesta en el código. 
                                                                                 
Error: Ninguno.

Otras Observaciones: Ninguna.

Código:


Código
  1. # include <stdio.h>
  2.  
  3. void despriegaBits(unsigned valor);
  4.  
  5. int main(void){
  6. unsigned x; //No entiendo esta declaracion de variable, cual es el tipo?
  7. printf("\n\n Introduzca un entero sin signo....:");
  8. scanf("%u", &x);
  9.  
  10. despriegaBits(x);
  11.  
  12. return 0;
  13. }
  14.  
  15. void despriegaBits(unsigned valor){
  16. unsigned c; //No entiendo esta declaracion de variable, cual es el tipo?
  17.  
  18. unsigned despliegaMascara = 1 << 31; //Esta sentencia como se llama?, pareceria una funcion, pero no
  19.                                             //tiene parentesis, me desconcierta, y lo mas importante, como funciona?, que hace?.
  20.  
  21. printf("\n %10u = ", valor);
  22.  
  23. for(c = 1; c <= 32; c++){
  24. putchar(valor & despliegaMascara ? '1' : '0');
  25. valor <<= 1;
  26.  
  27. if(c % 8 == 0){
  28. putchar(' ');
  29. }
  30. }
  31. putchar('\n');
  32. }

Desde ya muchas gracias por la ayuda que puedan brindarnos.-
Saludos.
Daniel
90  Programación / Programación C/C++ / Pasar a función array de punteros.- en: 20 Enero 2014, 02:36 am
Hola.
rir3760 si en algún post no respondo a tus ayudas es porque me lleva tiempo asimilarlas.-
Voy al grano, sigo con mis prácticas de punteros y el programa que estoy haciendo es para que el operador ingrese por ejemplo 8 nombres y luego ordenarlos.-
Hay 2 cosas que no sé hacer, la primera, alguien me podría decir como pasar un array de punteros a función y la segunda, ¿como puedo hacer para que la cantidad de punteros se pida que se ingrese por teclado y no ponerlo a mano?.-

Código
  1. printf("\n Ingrese un entero para establecer la cantidad de nombres a ordenar...:");

Aclaro que el programita es para poner algo sino me van a tirar de las orejas.-
Otra cosita, la validación de ingreso de entero la copié de un post de rir3760, ya la adopte como definitiva, funciona a la perfección.-

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void ingresoCorrecto(int*, int);
  5.  
  6. int main(void){
  7. char *ptrNombres[] = {"Rosita", "Alberto", "Claudio", "Yanina", "Pedrito", "Jorge", "Daniel", "Leo"};
  8. int indice=0, longitud=0;
  9.  
  10. longitud = sizeof ptrNombres / sizeof *ptrNombres;
  11.  
  12. printf("\n");
  13. for(indice=0; indice<longitud; indice++){
  14. printf("[%d] %s - ", indice, ptrNombres[indice]);
  15. }
  16.  
  17. ingresoCorrecto(&indice,longitud);
  18.  
  19. printf("\n Su eleccion fue...: %s", ptrNombres[indice]);
  20.  
  21. return 0;
  22. }
  23.  
  24. void ingresoCorrecto(int *ingreso, int longitud){
  25. int ch=0, ok=0, temp=0;
  26. do{
  27. printf("\n\n ingrese un entero del [0] al [%d] para extraer un nombre..:", longitud-1);
  28. ok = scanf("%d", &temp) == 1 && temp >= 0 && temp <= longitud-1;
  29. while ((ch = getchar()) != EOF && ch != '\n');
  30. }while(!ok);
  31. *ingreso = temp;
  32. }

Saludos.
Páginas: 1 2 3 4 5 6 7 8 [9] 10
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines