Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - alt_369

#1
¡Muchas gracias durasno!, ahora funciona correctamente.

¡Saludos!
#2
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;
printf("numero persones: ");
scanf("%d", &n);
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].nom);
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("%d", &v[i].dni);
scanf(" %c", &v[i].sexe);
}
qsort(v,n,sizeof(persona *),ordenar);
printf("cognom a buscar: ");
scanf(" %s", p.cognom1);
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");
else printf("sexe: dona\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
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;;
printf("a: ");
scanf("%d", &a);
do{
printf("b: ");
scanf("%d", &b);
}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
¡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{
                printf("introduiu n: ");
                scanf("%d", &n);
        }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
¡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): ");
                scanf("%d", &n);
        }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!
#6
Solo empezar ya he visto esto:

Citarv[i-1]==0

es con un =.

No he seguido mirando (tengo que irme).

Si siguen los problemas miraré más
#7
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
¡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
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;
}