Título: Dos Ejercicios en C
Publicado por: Saberuneko en 21 Enero 2011, 13:12 pm
Bueno, ya empezamos con C en clase. Tengo hechos ya cuatro ejercicios, pero dos de ellos no consigo que funcionen bien, son los siguientes: 3.- En una estación de autobuses se requiere un programa que contabilice los billetes vendidos al cabo del día. Teniendo en cuenta que existen tres trayectos A,B,C cuyas tarifas con 6,12,18 € respectivamente. El programa pedirá al viajero que introduzca el número de billetes que desea y el trayecto, finalizando la emisión de billetes al introducir $ en el trayecto. Una vez terminada dicha emisión, el programa visualizará: NºBILLETES TOTAL EUROS A:.............. ................ B:.............. ................ C:............. .................Esto es lo que tengo hasta el momento, no quiero que me lo resuelvan, sino que me digan qué está mal y me orienten un poco sobre qué hay que corregir sin decírmelo literalmente: #include <stdio.h> main() { char opcion; int a=0,b=0,c=0,ap,bp,cp,x; printf("Introduzca un trayecto\n"); printf("Introduzca cantidad\n"); while(opcion!='$') { switch(opcion) { case 'a': a=a+x; break; case 'b': b=b+x; break; case 'c': c=c+x; break; default: } printf("Introduzca un trayecto\n"); printf("Introduzca cantidad\n"); } ap=a*6; bp=b*12; cp=c*18; printf("\tNºBILLETES\tTOTAL EUROS"); }
4.- Programa que visualice cuantos números de los N primeros (N introducido por teclado) cumplen las siguientes condiciones: - El producto de sus divisores es múltiplo de 5 - La suma de sus divisores es múltiplo de 3 - Cumple ambas condiciones anteriores a la vezEsto es lo que tengo de momento, lo mismo que en el anterior, quiero ver dónde he fallado para intentar corregirlo, no quiero que me lo den hecho: #include <stdio.h> main() { int cont,actual,n,res5,res3; for(actual=1;actual<=n;actual++) { res5=0; res3=0; while(cont<=actual/2) { if(actual%cont==0) { res5=res5*cont; res3=res3+cont; } } if(res5%5==0) { printf("El producto de los divisores de %d es multiplo de 5\n",actual ); } else { printf("El producto de los divisores de %d no es multiplo de 5\n",actual ); } if(res3%3==0) { printf("La suma de los divisores de %d es multiplo de 3\n",actual ); } else { printf("La suma de los divisores de %d no es multiplo de 3\n",actual ); } if ((res5%5==0)&&(res3%3==0)) { printf("Cumplen ambas condiciones anteriores a la vez\n"); } else { printf("No cumplen ambas condiciones anteriores a la vez\n\n"); } } }
Gracias por adelantado y un saludo, miau!
Título: Re: Dos Ejercicios en C
Publicado por: Shell Root en 21 Enero 2011, 17:55 pm
Joder, hace mucho ratón que no programo en C. Pero recorte y organice un poco el código, no funciona correctamente, pero quizás te servirá de algo... #include <stdio.h> int main(){ char sOption; int sCant = 0; int a = 0; int b = 0; int c = 0; int aT = 0; int bT = 0; int cT = 0; while(sOption != '$'){ printf("Introduzca un trayecto:\n"); printf("Introduzca cantidad:\n"); switch(sOption){ case 'a': a = a + sCant; break; case 'b': b = b + sCant; break; case 'c': c = c + sCant; break; default: } } aT = a * 6; bT = b * 12; cT = c * 18; printf("\tNºBILLETES\tTOTAL EUROS\n"); printf("A\t%d\t\t%d\n", a , aT ); printf("B\t%d\t\t%d\n", b , bT ); printf("C\t%d\t\t%d\n", c , cT ); return 0; }
Resultado, alex@alex:~/Escritorio$ gcc PoC.c alex@alex:~/Escritorio$ ./a.out Introduzca un trayecto: a Introduzca cantidad: 3 $ NºBILLETES TOTAL EUROS A 3 18 B 0 0 C 0 0
Título: Re: Dos Ejercicios en C
Publicado por: diskontrol en 22 Enero 2011, 07:57 am
A simple vista se ven un par de errores en el segundo ejercicio; por ejemplo el acumulador res5 debes inicializarlo a 1, o la variable cont que no esta inicializada ni es incrementada.
Saludos!
Título: Re: Dos Ejercicios en C
Publicado por: Saberuneko en 22 Enero 2011, 14:46 pm
Ahora tienen pinta de funcionar, así me han quedado: #include <stdio.h> main() { char opcion; int a=0,b=0,c=0,ap,bp,cp,x; printf("Introduzca un trayecto\n"); while (opcion!='a'&& opcion!='b'&& opcion!='c' && opcion!='$') { printf("Introduzca un trayecto\n"); } while(opcion!='$') { printf("Introduzca cantidad\n"); switch(opcion) { case 'a': a=a+x; break; case 'b': b=b+x; break; case 'c': c=c+x; break; default: } printf("Introduzca un trayecto\n"); while (opcion!='a'&& opcion!='b'&& opcion!='c' && opcion!='$') { printf("Introduzca un trayecto\n"); } } ap=a*6; bp=b*12; cp=c*18; printf("\tN BILLETES\tTOTAL EUROS\n"); printf("A:\t%d\t\t%d\n",a ,ap ); printf("B:\t%d\t\t%d\n",b ,bp ); printf("C:\t%d\t\t%d\n",c ,cp ); return 0; }
El otro: #include <stdio.h> main() { int cont,actual,n,res5,res3,a=0,b=0,c=0; for(actual=2;actual<=n;actual++) { res5=1; res3=0; cont=2; while(cont<=actual) { if(actual%cont==0) { res5=res5*cont; res3=res3+cont; } cont=cont+1; } if(res5%5==0) a=a+1; if(res3%3==0) b=b+1; if ((res5%5==0)&&(res3%3==0)) c=c+1; } printf("El producto de los divisores es multiplo de 5:\n%d\n",a ); printf("La suma de los divisores es multiplo de 3:\n%d\n",b ); printf("Cumplen ambas condiciones anteriores a la vez:\n%d\n",c ); return 0; }
Gracias por lo de iniciar res5 a 1 que ya me tenía loco. :3
|