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

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Temas
Páginas: [1]
1  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. }
2  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!
3  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