|
Mostrar Mensajes
|
Páginas: [1]
|
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! #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct{ char carrer[16]; char num[5]; char poblacio[16]; char codiPostal[5]; }adreca; typedef struct{ char nom[11]; char cognom1[16]; char cognom2[16]; adreca dir; int dni; char sexe; }persona; int ordenar(const void *,const void *); int main(void){ int n, i; persona *v, *trobat, p, *ap; if(n <1){ printf("no hi ha suficients persones\n"); exit(1); } v = (persona *)malloc(n *sizeof(persona )); if(v ==NULL ){ printf("no hi ha memoria\n"); exit(1); } for(i=0; i<n; i++){ scanf(" %s", v [i ]. cognom1); scanf(" %s", v [i ]. cognom2); scanf(" %s", v [i ]. dir. carrer); scanf(" %s", v [i ]. dir. num); scanf(" %s", v [i ]. dir. poblacio); scanf(" %s", v [i ]. dir. codiPostal); scanf(" %c", &v [i ]. sexe); } qsort(v ,n ,sizeof(persona *),ordenar ); ap = &p; trobat = (persona *)bsearch(ap ,v ,n ,sizeof(persona *), ordenar ); if(trobat ==NULL ){ printf("no s'ha trobat %s\n", p. cognom1); exit(1); } printf("nom: %s\n", trobat ->nom ); printf("primer cognom: %s\n", trobat ->cognom1 ); printf("segon cogmon: %s\n", trobat ->cognom2 ); printf("carrer: %s\n", trobat ->dir. carrer); printf("numero del carrer: %s\n", trobat ->dir. num); printf("poblacio: %s\n", trobat ->dir. poblacio); printf("codi postal: %s\n", trobat ->dir. codiPostal); printf("DNI: %d\n", trobat ->dni ); if(trobat ->sexe =='H') printf("sexe: home\n"); return 0; } int ordenar(const void *a1, const void *a2){ persona p1, p2; int k; p1 = *(persona *)a1; p2 = *(persona *)a2; k = strcmp(p1. cognom1,p2. cognom1); if(k!=0) return k; return p1.dni - p2.dni; }
|
|
|
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: #include <stdio.h> int main(void){ int a, b, q, r, a1, b1;; do{ }while(!b); a1=a; b1=b; q = a/b; r = a-b*q; printf("%d = (%d)(%d)+%d\n", a , b , q , r ); while(r){ a = b; b = r; q = a/b; r = a -b*q; printf("%d = (%d)(%d)+%d\n", a , b , q , r ); } printf("\n\tMaxim comu divisor: %d\n", b ); printf("\tMinim comu multiple: %d\n", (a1 *b1 )/b ); return 0; }
¡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: #include <stdio.h> int main(void){ int n, i, j, k, cont[11]={0}, contador=0, posicio=0; char par[20][11]; do{ }while(n<0 || n>11); printf("introduiu les %d paraules: ", n ); for(i =0; i <n ; i ++) scanf(" %[^\n]s", par [i ]); for(i=0; i<n; i++){ for(j=i+1; j<=n; j++){ for(k=0; par[i][k]!='\0' && contador==0; k++) if(par[i][k]!=par[j][k]) contador++; if(contador==0 && par[j][k]=='\0') cont[i]++; contador=0; } } for(i=0; i<n; i++){ if(cont[i]>contador){ contador = cont[i]; posicio = i; } } if(contador !=0) printf("\nLa paraula que mes es repeteix es: %s\n", par [posicio ]); else printf("no es repeteix cap paraula\n"); return 0; }
|
|
|
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): #include <stdio.h> int main(void){ int n, i, contador[11]={0}; char palabras[20][11]; do{ printf("introducir n (menor que 12): "); }while(n<0 || n>11); printf("introducir la secuencia de n palabras: "); for(i =0; i <n ; i ++) scanf("%[^\n]s", palabras [i ]);
¡Gracias por vuestro tiempo!
|
|
|
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: 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: #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; }
|
|
|
|
|
|
|