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");
opcion=getchar();
printf("Introduzca cantidad\n");
scanf("%d",&x);
while(opcion!='$')
{
switch(opcion)
{
case 'a':
a=a+x;
break;
case 'b':
b=b+x;
break;
case 'c':
c=c+x;
break;
default:
printf("Opcion erronea\n");
}
printf("Introduzca un trayecto\n");
opcion=getchar();
printf("Introduzca cantidad\n");
scanf("%d",&x);
}
ap=a*6;
bp=b*12;
cp=c*18;
printf("\tNºBILLETES\tTOTAL EUROS");
printf("A\t%d\t%d",a,ap);
printf("B\t%d\t%d",b,bp);
printf("C\t%d\t%d",c,cp);
}
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 vez
Esto 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;
printf("Introduzca n\n");
scanf("%d",&n);
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!
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");
scanf("%c", &sOption);
printf("Introduzca cantidad:\n");
scanf("%d", &sCant);
switch(sOption){
case 'a':
a = a + sCant;
break;
case 'b':
b = b + sCant;
break;
case 'c':
c = c + sCant;
break;
default:
printf("Error.\n");
}
}
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
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!
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");
scanf("%c",&opcion);
while (opcion!='a'&& opcion!='b'&& opcion!='c' && opcion!='$')
{
printf("Opcion erronea\n");
printf("Introduzca un trayecto\n");
scanf("%c",&opcion);
}
while(opcion!='$')
{
printf("Introduzca cantidad\n");
scanf("%d",&x);
getchar();
switch(opcion)
{
case 'a':
a=a+x;
break;
case 'b':
b=b+x;
break;
case 'c':
c=c+x;
break;
default:
printf("Opcion erronea\n");
}
printf("Introduzca un trayecto\n");
scanf("%c",&opcion);
while (opcion!='a'&& opcion!='b'&& opcion!='c' && opcion!='$')
{
printf("Opcion erronea\n");
printf("Introduzca un trayecto\n");
scanf("%c",&opcion);
}
}
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;
printf("Introduzca n\n");
scanf("%d",&n);
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