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]
1  Programación / Programación C/C++ / Re: Problemas con qsort y bsearch en: 19 Mayo 2013, 09:30 am
¡Muchas gracias durasno!, ahora funciona correctamente.

¡Saludos!
2  Programación / Programación C/C++ / Problemas con qsort y bsearch en: 18 Mayo 2013, 22:11 pm
Buenas,

es la primera vez que utilizo las funciones qsort y bsearch, y miro y miro el código y no entiendo qué hago mal, así que si alguien lo ve, me haría un gran favor al decírmelo.

El programa se trata de crear una lista que ordene por el primer apellido (cognom1), y, si se da el caso de que hubieran dos iguales, se escribe la información sobre el DNI menor.

aquí lo dejo, y ante todo, ¡muchas gracias por vuestro tiempo!

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. typedef struct{
  5. char carrer[16];
  6. char num[5];
  7. char poblacio[16];
  8. char codiPostal[5];
  9. }adreca;
  10. typedef struct{
  11. char nom[11];
  12. char cognom1[16];
  13. char cognom2[16];
  14. adreca dir;
  15. int dni;
  16. char sexe;
  17. }persona;
  18. int ordenar(const void *,const void *);
  19. int main(void){
  20. int n, i;
  21. persona *v, *trobat, p, *ap;
  22. printf("numero persones: ");
  23. scanf("%d", &n);
  24. if(n<1){ printf("no hi ha suficients persones\n"); exit(1); }
  25. v = (persona *)malloc(n*sizeof(persona));
  26. if(v==NULL){ printf("no hi ha memoria\n"); exit(1); }
  27. for(i=0; i<n; i++){
  28. scanf(" %s", v[i].nom);
  29. scanf(" %s", v[i].cognom1);
  30. scanf(" %s", v[i].cognom2);
  31. scanf(" %s", v[i].dir.carrer);
  32. scanf(" %s", v[i].dir.num);
  33. scanf(" %s", v[i].dir.poblacio);
  34. scanf(" %s", v[i].dir.codiPostal);
  35. scanf("%d", &v[i].dni);
  36. scanf(" %c", &v[i].sexe);
  37. }
  38. qsort(v,n,sizeof(persona *),ordenar);
  39. printf("cognom a buscar: ");
  40. scanf(" %s", p.cognom1);
  41. ap = &p;
  42. trobat = (persona *)bsearch(ap,v,n,sizeof(persona *), ordenar);
  43. if(trobat==NULL){ printf("no s'ha trobat %s\n", p.cognom1); exit(1); }
  44. printf("nom: %s\n", trobat->nom);
  45. printf("primer cognom: %s\n", trobat->cognom1);
  46. printf("segon cogmon: %s\n", trobat->cognom2);
  47. printf("carrer: %s\n", trobat->dir.carrer);
  48. printf("numero del carrer: %s\n", trobat->dir.num);
  49. printf("poblacio: %s\n", trobat->dir.poblacio);
  50. printf("codi postal: %s\n", trobat->dir.codiPostal);
  51. printf("DNI: %d\n", trobat->dni);
  52. if(trobat->sexe=='H') printf("sexe: home\n");
  53. else printf("sexe: dona\n");
  54. return 0;
  55. }
  56. int ordenar(const void *a1, const void *a2){
  57. persona p1, p2;
  58. int k;
  59. p1 = *(persona *)a1;
  60. p2 = *(persona *)a2;
  61. k = strcmp(p1.cognom1,p2.cognom1);
  62. if(k!=0) return k;
  63. return p1.dni - p2.dni;
  64. }
3  Programación / Programación C/C++ / Re: maximo comun divisor y minimo comun multiplo en: 15 Marzo 2013, 21:11 pm
Hace un tiempo hice exactamente eso para practicar para clases de aritmética. Te lo dejo aquí, y si no entiendes algo pregunta:

Código
  1. #include <stdio.h>
  2. int main(void){
  3. int a, b, q, r, a1, b1;;
  4. printf("a: ");
  5. scanf("%d", &a);
  6. do{
  7. printf("b: ");
  8. scanf("%d", &b);
  9. }while(!b);
  10. a1=a; b1=b;
  11. q = a/b;
  12. r = a-b*q;
  13. printf("%d = (%d)(%d)+%d\n", a, b, q, r);
  14. while(r){
  15. a = b;
  16. b = r;
  17. q = a/b;
  18. r = a -b*q;
  19. printf("%d = (%d)(%d)+%d\n", a, b, q, r);
  20. }
  21. printf("\n\tMaxim comu divisor: %d\n", b);
  22. printf("\tMinim comu multiple: %d\n", (a1*b1)/b);
  23. return 0;
  24. }


¡Saludos!
4  Programación / Programación C/C++ / Re: [C] [?] Problema con vector de caracteres en: 13 Enero 2013, 23:30 pm
¡Muchas gracias durasno!

Tras batallar un rato al final salió.

Aquí dejo el código por si alguien quiere aportar algo o simplemente aprender:

Código
  1. #include <stdio.h>
  2. int main(void){
  3.        int n, i, j, k, cont[11]={0}, contador=0, posicio=0;
  4.        char par[20][11];
  5.        do{
  6.                printf("introduiu n: ");
  7.                scanf("%d", &n);
  8.        }while(n<0 || n>11);
  9.        printf("introduiu les %d paraules: ", n);
  10.        for(i=0; i<n; i++) scanf(" %[^\n]s", par[i]);
  11.        for(i=0; i<n; i++){
  12.                for(j=i+1; j<=n; j++){
  13.                        for(k=0; par[i][k]!='\0' && contador==0; k++) if(par[i][k]!=par[j][k]) contador++;
  14.                        if(contador==0 && par[j][k]=='\0') cont[i]++;
  15.                        contador=0;
  16.                }
  17.        }
  18.        for(i=0; i<n; i++){
  19.                if(cont[i]>contador){
  20.                        contador = cont[i];
  21.                        posicio = i;
  22.                }
  23.        }
  24.        if(contador!=0) printf("\nLa paraula que mes es repeteix es: %s\n", par[posicio]);
  25.        else printf("no es repeteix cap paraula\n");
  26.        return 0;
  27. }
5  Programación / Programación C/C++ / [C] [?] Problema con vector de caracteres en: 13 Enero 2013, 20:17 pm
¡Saludos!

Estoy tratando de hacer el siguiente problema: dado un número natural n y una secuencia de n palabras, indicar cual es la palabra más frecuente.

Quiero hacerlo guardando las n palabras en una tira de caracteres, pero a la hora de utilizarla, no sé cómo hacerlo, ya que cuando hago por ejemplo palabras[1], llama a toda la palabra, no carácter por carácter (de ahí el problema para compararlo con otra).

No quiero hacer el problema a través de funciones programadas, sino crearla yo mismo.

Dejo el código por si sirve de algo (ahí es donde me que quedado parado):
Código
  1. #include <stdio.h>
  2. int main(void){
  3.        int n, i, contador[11]={0};
  4.        char palabras[20][11];
  5.        do{
  6.                printf("introducir n (menor que 12): ");
  7.                scanf("%d", &n);
  8.        }while(n<0 || n>11);
  9.        printf("introducir la secuencia de n palabras: ");
  10.        for(i=0; i<n; i++) scanf("%[^\n]s", palabras[i]);
  11.  

¡Gracias por vuestro tiempo!
6  Programación / Programación C/C++ / Re: detectar valores negativos vector en: 11 Diciembre 2012, 17:06 pm
Solo empezar ya he visto esto:

Citar
v[i-1]==0

es con un =.

No he seguido mirando (tengo que irme).

Si siguen los problemas miraré más
7  Programación / Programación C/C++ / Re: [C] [?] Problemas con suma de polinomios en: 28 Noviembre 2012, 22:34 pm
Muchas gracias por la ayuda prestada!!

Ya he mirado cómo poner lo de las etiquetas GeSHi, para la próxima ya lo sé.

¡saludos!
8  Programación / Programación C/C++ / Re: [C] [?] Problemas con suma de polinomios en: 24 Noviembre 2012, 15:49 pm
¡Muchas gracias!

Lo he retocado para que no me imprima nada si la suma da 0:

Código:
for(i=1; i<=n-1; i++){
while((polin_n[i]+polin_m[i])==0 && i<n) i++;
printf(" %+g%s", polin_n[i]+polin_m[i], x[i-1]);
        }
if((polin_n[i]+polin_m[i])!=0){
printf(" %+g%s\n", polin_n[i]+polin_m[i], x[i-1]);
}else{
printf("\n");
}

¡Saludos!
9  Programación / Programación C/C++ / [C] [?] Problemas con suma de polinomios en: 24 Noviembre 2012, 12:29 pm
Buenas!

El programa ha de sumar dos polinomios p(x) y q(x). Al imprimir los polinomios y la suma lo han de hacer con sus correspondientes x (x^2, x^3...), y la base de los polinomios puede ser hasta 10.

No entiendo qué hago mal, porque cuando entro los siguientes datos:
3 1.2 0 -4.4 1.             (los 3 del inicio corresponden al grado de los poliomios, y lo siguiente a las cifras)
3 -2. 1. 3.3 -1.
 
me imprime:
p(x) +1.2 -4.4x^2 +1x^3                                                                                      
q(x) -2 +1x +3.3x^2 -1x^3                                                                                    
                                                                                                              
suma: -0.8 +1x -1.1x^2 -2

Es el -2 en negrita el que no entiendo.

Les dejo el código por si ven algún error, y muchas gracias de antemano:
Código:
#include <stdio.h>
int main(void){
int n, m, i;
float polin_n[10]={0}, polin_m[10]={0};
char x[9][4]={{"x"},{"x^2"},{"x^3"},{"x^4"},{"x^5"},{"x^6"},{"x^7"},{"x^8"},{"x^9"}};
do{ /*introduccion de datos*/
printf("introducir el grado de p(x): ");
scanf("%d", &n);
}while(n<0 || n>10);
for(i=0; i<=n; i++){
scanf("%f", &polin_n[i]);
}
do{
printf("introducir el grado de q(x): ");
scanf("%d", &m);
}while(m<0 || m>10);
for(i=0; i<=m; i++){
scanf("%f", &polin_m[i]);
}
if(polin_n[0]!=0){ /*imprimir el primer polinomio*/
printf("\np(x) %+g", polin_n[0]);
i=1;
}else{
i=0;
}
for(i=i; i<=n; i++){
while(polin_n[i]==0) i++;
printf(" %+g%s", polin_n[i], x[i-1]);
}
if(polin_m[0]!=0){ /*imprimir el segundo polinomio*/
printf("\nq(x) %+g", polin_m[0]);
i=1;
}else{
i=0;
}
for(i=i; i<=m; i++){
while(polin_m[i]==0) i++;
printf(" %+g%s", polin_m[i], x[i-1]);
}
if(m>n) n=m; /*imprimir la suma del los polinomios*/
printf("\n\nsuma: %+g", polin_n[0]+polin_m[0]);
for(i=1; i<=n; i++){
while((polin_n[i]+polin_m[i])==0) i++;
printf(" %+g%s", polin_n[i]+polin_m[i], x[i-1]);
}
printf("\n");
return 0;
}
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines