Dev - C++ - comenzando con bules For

   
Vista:

comenzando con bules For

Publicado por Rafael (10 intervenciones) el 12/04/2016 00:49:41
Buen dia a todos , bueno espero me puedan ayudar en este ejercicio que me he planteado he estado leyendo un libro De C++ y he tratado de hacer mis propios ejercicios aparte de los que ya da el libro,
bueno la pregunta es la siguiente yo lei en un articulo que uno puede ahorrar de modo que no se note casi (para nuestro bolsillo ) el ahorrar osea ir subiendo el ahorro gradualmente (duplicarlo) la cuestion es la siguiente

Yo quiero hacer un programa que digamos por ejemplo yo diga este mes comenzare ahorrando $0.10 centavos el primer dia , el doble el segundo dia osea el segundo dia depositare en la alcanzia $0.20 centavos bueno yo quiero que el programa me diga cuanto tengo que ingresar a la alcanzia el dia 1,2,3,4,5,6,7, y que me bya diciendo el importe que trngo que haccer y cuanto llevo hasta el momento.

yo llevo algo asi (archivo incluido adjunto) pero la cuestion es que ya hice me diera el dato pero no entiendo porque me tira todo desordenado se que puede ser una tontera pero encerio deceo aprender y quisiera que me dijeran en que estoy fallando.

ejemplo de como lo quiero:
DIa -------------Importe ----------------Acumulado
1 --------------- $0.10--------------------0 (porque es el primer dia)
2----------------$0.20--------------------$0.10
3----------------$0.40(doble dia anterior)----------------------$0.30($0.20 de dia 2 y $0.10 dia 1)
4-----------------$0.80--------------------------$0.70
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

comenzando con bules For

Publicado por Thanatos (72 intervenciones) el 12/04/2016 10:12:52
La librería iomanip tiene funciones que pueden ayudarte a dar ese tipo de formato a la salida del programa. Por ejemplo:

La función setw(int), permite definir el ancho que ocupará la salida. Si lo que quieres mostrar en la pantalla ocupa menos caracteres que el número que se le pasa como argumento a esta función, rellenará el espacio restante con espacios.

setprecision(int) se utiliza para configurar la precisión de la parte decimal, que tendrán los valores de salida de las operaciones con números de punto flotante (float, double).

En los ejemplos que escribí, utilicé cout.precision(streamsize), que es parte de la librería iostream, y cumple la misma función que setprecision(int).

Para que la salida se muestre con la cantidad de decimales que se especificaron con setprecision(int) o cout.precision(streamsize), se utiliza fixed, que también pertenece a iostream.


La salida de este programa, se parece al ejemplo que pusiste:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <iomanip>
 
int main() {
    float importe = 0.1f;
    float acumulador = 0.0f;
 
    std::cout << "Dia"
              << std::setw(14) << "Importe"
              << std::setw(14) << "Acumulado"
              << std::endl;
 
    std::streamsize precisionOriginal = std::cout.precision();
    (void)std::cout.precision(2);
    for (int dia = 1; dia <= 30; ++dia) {
        if (dia > 1) {
            importe *= 2;
        }
        std::cout << std::fixed
                  << std::setw(3) << dia
                  << std::setw(14) << importe
                  << std::setw(14) << acumulador
                  << std::endl;
        acumulador += importe;
    }
    (void)std::cout.precision(precisionOriginal);
 
    return 0;
}

En la línea 13 se almacena el valor original de la precisión, en la variable precisionOriginal de tipo streamsize, para restaurarlo más tarde (línea 26), debido a que en la línea 14 se le asigna el valor 2 para mostrar las cantidades de dinero con 2 cifras decimales.

Si se eliminan las líneas 13 y 26 el programa funcionaría de la misma manera, sólo las puse para que tengas una manera de restaurar la precisión, si necesitas realizar otros cálculos luego de mostrar la tabla de resultados.


El mismo programa, con otro tipo de salida:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <iomanip>
 
int main() {
    float importe = 0.1f;
    float acumulador = 0.0f;
 
    std::cout << " -------------------------------------------------\n";
    std::cout << "|" << std::setw(10)  << "D I A  |"
              << std::setw(18) << "I M P O R T E  |"
              << std::setw(22) << "A C U M U L A D O  |"
              << std::endl;
    std::cout << " -------------------------------------------------\n";
 
    std::streamsize precisionOriginal = std::cout.precision();
    (void)std::cout.precision(2);
    for (int dia = 1; dia <= 30; ++dia) {
        if (dia > 1) {
            importe *= 2;
        }
        std::cout << "|" << std::fixed
                  << std::setw(7) << dia << "  |"
                  << std::setw(13) << importe << " $  |"
                  << std::setw(17) << acumulador << " $  |"
                  << std::endl;
        acumulador += importe;
    }
    std::cout << " -------------------------------------------------\n";
    (void)std::cout.precision(precisionOriginal);
 
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

comenzando con bules For

Publicado por Rafael (10 intervenciones) el 12/04/2016 16:46:31
Hey muchas gracias amigo, la verdad pense ponerle un condicional IF . pero luego pense que lo podria hacer con un for tambien, mira una pregunta veo que algunos programadores usan eso de poner std::cout en lugar de poner la usual using namespace std; te pregunto porque no se o si es asi en la manera que a algunos les enseñaron y se sienten comodos asi, o es por algo en particular.... pero en serio gracias por haber ayudado a comprender mas eso en l que me trabe, la verdad lo habia visto pero no lo explicaban asi mejor, ni un ejemplo. gracias por tu tiempo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

comenzando con bules For

Publicado por Thanatos (72 intervenciones) el 13/04/2016 12:08:47
Los namespaces se utilizan para organizar el código en grupos que tienen alguna relación lógica y pueden contener: clases, funciones, variables, etc. Por ejemplo, podría crearse un namespace llamado "conexion" que contenga el código necesario para conectar una aplicación a un servidor local.

Además de ayudarnos a mantener el código ordenado, también nos permite utilizar los mismos identificadores (nombres de clases, de variables, de funciones), cuando son declarados en namespaces diferentes (aunque es mejor tratar de evitar hacerlo para evitar confusiones). Por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
 
int numero = 0;
 
void saludar() {
    std::cout << "Hola desde el namespacece global" << std::endl;
}
 
 
namespace uno {
    int numero = 1;
 
    void saludar() {
        std::cout << "Hola desde el namespace uno" << std::endl;
    }
}
 
 
namespace dos {
    int numero = 2;
 
    void saludar() {
        std::cout << "Hola desde el namespace dos" << std::endl;
    }
}
 
 
int main() {
    std::cout << "namespace GLOBAL:" << std::endl;
    std::cout << "numero = " << numero << std::endl;
    saludar();
 
    std::cout << std::endl;
 
    std::cout << "namespace UNO:" << std::endl;
    std::cout << "numero = " << uno::numero << std::endl;
    uno::saludar();
 
    std::cout << std::endl;
 
    std::cout << "namespace DOS:" << std::endl;
    std::cout << "numero = " << dos::numero << std::endl;
    dos::saludar();
 
    return 0;
}

Cuando llamamos a todo un namespace, dentro del namespace global (como cuando escribimos using namespace std), podemos utilizar en nuestro código todos los identificadores que estén disponibles en ese namespace. Si nuestro código utiliza algún identificador que ya está presente en el namespace que ha sido llamado, puede darnos problemas que a veces no son fáciles de detectar debido a las ambigüedades al hacer las llamadas. Si escribes esto justo antes de la función main:

1
2
using namespace uno;
using namespace dos;

Seguramente el compilador te mostrará algunas advertencias, debido a que en las líneas 30 y 31, no se ha utilizado el operador de resolución de ámbito ( :: ) para especificar a cuál de las variables numero y a cuál de las funciones saludar() nos estamos refiriendo.

Para hacer llamadas específicas a los miembros del namespace global, se utiliza el operador de resolución de ámbito de esta manera:

1
2
::numero
::saludar()

Al utilizar librerías escritas por otras personas, el problema de la ambigüedad en los identificadores se puede presentar en cualquier momento, por eso es preferible utilizar el operador de resolución de ámbito para evitar dudas y problemas posteriores.

Los libros y cursos iniciales de programación, intentan que los estudiantes le presten más atención al uso de las sentencias básicas y en especial a la lógica para utilizarlas; por eso en C++ es común el uso de la sentencia using namespace std. Esto hace que el código sea más fácil de leer y escribir para las personas que están dando los primeros pasos. En algunos de estos cursos evitan llamar a todo el namespace std, utilizando esta alternativa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
using std::string;
using std::endl;
using std::cout;
using std::cin;
 
int main() {
    string nombre = "";
 
    cout << "Ingresa tu nombre\nnombre = ";
    cin >> nombre;
    cout << "Hola " << nombre << endl;
 
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar

comenzando con bules For

Publicado por Rafael (10 intervenciones) el 13/04/2016 16:16:06
Hey gracias amigo me ayudaste mucho, pues la verdad eso de utilizar solo los using si lo vi en un libro, me parecio asi como cuando usan el Typedef que tu creas tu propia forma de llamar a una determina variable, gracias por tus ejemplos y por tu tiempo al explicarme.

Osea no se si estoy mal el using es algo asi como las "librarias" o mas como el #define verdad, asi a groso modo, mira y para utilizar using namespace std; no hace falta una libreria verdad o esta dentro de <iostream>.


Gracias por tu explicacion , no solo me ayudas ami sino a alguna otra persona que algun dia tenga esta misma duda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

comenzando con bules For

Publicado por agustin (308 intervenciones) el 13/04/2016 16:28:45
Yo diría que lo que más se puede parecer es el alias aunque tampoco mucho jajaja.
O sea:
1
using namespace std::cout
Y:
1
using cout=std::cout
No son lo mismo pero en ambos casos podrías usar cout sin el std:: delante.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar