|
1171
|
Programación / Programación C/C++ / Re: calcular media aritmética con while
|
en: 8 Noviembre 2012, 22:49 pm
|
Con system creo que necesitas cstdlib: #include<iostream> #include <cstdlib> using namespace std; int main(){ double suma=0,n; int contador=0; cout << "Introduzca numero: " ; cin>>n; while(n>0){ suma+=n; contador+=1; cout << "Introduzca numero: " ; cin>>n; } cout<<suma/contador<<endl; system("pause"); return 0; }
Saludos!.
|
|
|
1172
|
Programación / Programación C/C++ / Re: RETOS C++
|
en: 8 Noviembre 2012, 22:37 pm
|
15-(Similar al anterior)Crear un programa que obtenga el numero phi o aureo a partir de la serie de Fibonacci (el bucle tiene que tener un minimo de 30 ciclos) . 15p
Pues aquí está una posible solución: #include <iostream> #include <iomanip> using namespace std; int main() { long num,cont=0; long f0=0,f1=1; while (cont<=30) { long f2 = f0 + f1; f0 = f1; f1 = f2; if (cont==30) cout << (float) f1/f0; cont++; } return 0; }
Saludos!. ... y puntos, puntos
|
|
|
1173
|
Programación / Programación C/C++ / Re: Corrección de programa en C
|
en: 7 Noviembre 2012, 06:28 am
|
Tienes varios errores más, como en algunos printf, en poner en lugar de sueldo la Zona, usar el formato %d en los case en lugar de %c, ya que se va a tomar una letra la ausencia del caso default. En fin, creo que ya te funciona: #include <stdio.h> #include <stdlib.h> #include<conio.h> main() { /* Mis variables */ int horas; float ZonA=62.33, ZonaB=60.57, ZonaC=59.08, sueldo; char opc; do { /* Lectura del número de horas trabajadas */ printf("Ingrese el numero de horas trabajadas:" ); scanf("%d", &horas); printf("Introduzca la zona geografica que le corresponda:\n" ); printf("\n a. ZonA. \n b. ZonaB. \n c. ZonaC. \n d. Salir "); /*system("cls");*/ opc=getche(); switch(opc) { case'a':("Selecciono ZonA\n"); scanf("%c", &ZonA); sueldo = ZonA * horas; printf("\nSu sueldo es: %1.2f\n\n ", sueldo); system("pause"); break; case'b':("Selecciono ZonaB \n"); scanf("%c", &ZonaB); sueldo =ZonaB * horas; printf("\nSu sueldo es: %1.2f\n\n ", sueldo); system("pause"); break; case'c':("Selecciono ZonaC \n"); scanf("%c", &ZonaC); sueldo = ZonaC * horas; printf("\nSu sueldo es: %1.2f\n\n ",sueldo); system("pause"); break; case'd': printf("\n\nAdios\n"); system("pause"); break; printf("\n\n OpcionInvalida"); default: printf("\n\n OpcionInvalida\t");break; }/*Fin dela Selección Múltiple*/ }while (opc!='d'); return 0; }
Saludos!.
|
|
|
1174
|
Programación / Programación C/C++ / Re: Manejar valores más altos que los de un int
|
en: 7 Noviembre 2012, 05:47 am
|
Hola buenas, necesito en un programa manejar valores más altos que los máximos de los int (ya sabéis, 2^31 - 1). Más concretamente, necesito manejar valores entre 1.000.000 y 9.999.999. Puedes usar la libreria de C: #include <inttypes.h>. En ella el entero en lugar de ser int es uint64_t y el formato %llu, en lugar de %d: #include <stdio.h> #include <inttypes.h> //Definición de funciones int cantidadDigitos(int num); int sumaDigitos(int num); int ultimoDigito(int num); void comprobaciones(int numero); //Cuerpo del programa int main() { //Número de tarjeta de crédito uint64_t numero; printf("Mete el numero de la tarjeta de credito: "); //Hasta meter un número positibo, no saldrá del bucle do{ scanf("%llu", &numero); if(numero < 0) { printf("\nEl numero tiene que ser positibo! Metelo otra vez: "); } }while(numero < 0); comprobaciones(numero); printf("\nIntro para salir..."); fflush(stdin); getchar(); return 0; } int cantidadDigitos(int num) { int i = 0; //Para contar el número de dígitos int numAux = num; //Variable auxiliar while(numAux > 0) //Hasta que no sea 0... { numAux /= 10; //...pasamos al siguiente dígito i++; //...y un dígito más que tenemos } return i; } int sumaDigitos(int num) { int suma = 0; //para guardar la suma entre los 9 primeros digitos del numero de la tarjeta int divisor = 1000000000; //Para sacar los dígitos de uno en uno, empezando por el más significativo int resto = num; //auxiliar, para avanzar de dígito en dígito int ultimo_digito = 0; //Batuketaren azken digitua gordeko duen aldagaia int i; //Buklerako for(i=0; i<9; i++) { suma += (resto/divisor); //la suma entre los dígitos resto = resto % divisor; //pasamos al siguiente dígito divisor /= 10; //y para sacar el siguiente digito } ultimo_digito = ultimoDigito(suma); //El último dígito de la suma return ultimo_digito; } int ultimoDigito(int num) { int digito = 0; digito = num % 10; return digito; } void comprobaciones(int numero) { int cantidad = 0; int suma_digitos = 0; //Calculamos en número de dígitos cantidad = cantidadDigitos(numero); //Si la cantidad de dígitos es correcta (10) if(cantidad == 10) { printf("\nLa cantidad de digitos es correcta.\n"); //Si el último dígito de la suma de los primeros 9 dígitos es igual al último dígito de la tarjeta: if(sumaDigitos(numero) == ultimoDigito(numero)) { printf("\nSe cumplen las condiciones.\n"); } else { printf("\nEl numero de tarjeta de credito no cumple las condiciones.\n"); } } //Si el número de dígitos no es el correcto else { printf("\nEl numero de digitos no es el adecuado.\n"); } }
Saludos!.
|
|
|
1175
|
Programación / Programación C/C++ / Re: [C][?]Como determinar que imprima ciertos caracteres
|
en: 6 Noviembre 2012, 23:11 pm
|
Esto imprime todas las combinaciones de letras mayus/minus con números Perdona mi observación, pero construir una función que lo haga todo no tiene como mucho sentido, para eso lo incluyes en la función main. En el lado opuesto está mi función, que hace algo repetitivo y que puede ser invocada cada vez desde main. Fíjate en la simplicidad: un solo for y nigún if. Con números, mayúsculas y minúsculas quedaría así: #include <stdio.h> void uno(int MIN, int MAX) ; void uno(int MIN, int MAX) { int i; for(i=MIN; i<=MAX; i++) { printf("%c ", i); } } int main(){ int MIN1 =48,MAX1 =57,MIN2=65,MAX2= 90,MIN3=97,MAX3= 122; uno(MIN1,MAX1); puts("\n"); uno(MIN2,MAX2); puts("\n"); uno(MIN3,MAX3); return 0; }
Saludos!.
|
|
|
1176
|
Programación / Programación C/C++ / Re: función random
|
en: 6 Noviembre 2012, 20:18 pm
|
En tu programa el uso de la sentencia "continue;" no es necesario ya que, si revisas con cuidado, es la ultima sentencia del bucle. Pardillo, que soy un pardillo..... Y los dos cambios al contador se pueden reducir a uno si se utiliza un bucle "while" o "do ... while" Eso ya es lo clásico de un for o un while o do while, pero se agradece la observación. size_t num_opers = sizeof opers; size_t i;
Me asalta la duda, tonta supongo: ¿por qué usar size_t en lugar de int?.Saludos!.
|
|
|
1177
|
Programación / Programación C/C++ / Re: función random
|
en: 6 Noviembre 2012, 16:23 pm
|
una última pregunta en el else de tu código pusiste i-- ¿por qué? no entiendo para qué pusiste ese contador
Si resulta un valor no válido -si entra en el else- habrá que descontarlo, de ahí el i--, si no tendrías menos de cinco valores, ya que se contarían también los valores no válidos Saludos!.
|
|
|
1178
|
Programación / Programación C/C++ / Re: Como planteariais este problema?( en C)
|
en: 5 Noviembre 2012, 22:56 pm
|
.La complejidad de mi algoritmo es simplemente O(n). ( ya sé que no estamos discutiendo eficiencia)
Eso no lo dudo, pero te recuerdo que el algoritmo, tal como lo planteates daría para la serie de números: 121 174 39 158 144 167 76 80 112 167 59 152 161 136 129 max=174 cuasi_max=121, cuando este último debería ser 167. De ahí la introducción de : else if (a[i]>cuasi_maxi ) {cuasi_maxi=a[i];}
Saludos!.
|
|
|
1179
|
Programación / Programación C/C++ / Re: Problemas con el vuelto en monedas
|
en: 5 Noviembre 2012, 22:19 pm
|
....... y la salida:Introduce la cantidad: 1.4 Monedas de 0.25: 5 Monedas de 0.10: 1 Monedas de 0.05: 0 <==aqui deberia ser 1 Monedas de 0.01: 4 <==aqui deberia ser 0
Salida que se obtiene con la ligera modiicación de los valores M, como comenté por los redondeos: #include <stdio.h> #define M1 0.2499 #define M2 0.099 #define M3 0.049 #define M4 0.0099 int main() { int m1, m2, m3, m4; float cantidad; printf("Introduce la cantidad: "); scanf("%f", &cantidad); m1=(int)(cantidad/M1); cantidad-=m1*M1; m2=(int)(cantidad/M2); cantidad-=m2*M2; m3=(int)(cantidad/M3); cantidad-=m3*M3; m4=(int)(cantidad/M4); cantidad-=m4*M4; printf("Monedas de 0.25:\t%d\nMonedas de 0.10:\t%d\nMonedas de 0.05:\t%d\n" "Monedas de 0.01:\t%d\n", m1, m2, m3, m4); return 0; }
Muy aguda la solución !!!. Saludos!.
|
|
|
1180
|
Programación / Programación C/C++ / Re: función random
|
en: 5 Noviembre 2012, 21:38 pm
|
Tal como tienes planteado el if sólo sería cierto en los dos casos en que debe ser falso. Además hay que tener en cuenta si el aleatorio genera un valor no válido, lo que está contemplado en el "else" y para que lo veas he puesto "OTRO", que puedes quitar una vez entiendas como funciona: #include <stdio.h> #include <stdlib.h> #include <time.h> #define OPERACIONES 5 int main() { int i,numero1,numero2,resultado; char operacion; srand(time(0)); for(i=0;i<OPERACIONES;i++) { numero1 = rand()%11; numero2 = rand()%11; operacion = rand()% 6+42; if(operacion==42 || operacion==43 || operacion==45 || operacion==47) { printf("%d %c %d = ",numero1,operacion,numero2); scanf("%d",&resultado); } else { i--;puts ("Otro");continue; } } return 0; }
Saludos!.
|
|
|
|
|
|
|