1

Debo escribir un programa que visualice valores de modo secuencial según el valor de entrada, utilice una variable para almacenar el valor ingresado.

Un ejemplo de lo que debe realizar el programa
Datos de Entrada: Ingrese un valor. 8
Datos de salida: 8.1, 8.12, 8.123, 8.1234, 8.12345, 8.123456, 8.1234567

Lo que debe suceder en el programa es: que al momento de escribir cualquier numero se despliegan los siguientes números de manera decimal pero se detiene en un número menor al inicial.

Por favor ayúdenme a corregir mis errores.
Lo que llevo es esto:

#include <iostream>  
#include <stdio.h>  
#include <stdlib.h>  
#include <windows.h>  
#include <math.h>  

 using namespace std;

 int main()

{ float N_inicial, N_final, N, secuencia;  
char valor;

cout<<"\n"; 
cout<<" \t \t Bienvendido/a... \n Secuencia de numeros \n"; 
cout<<"\n"; 

cout<<"Ingrese un valor: \n"; cin>>N_final; 

    {


    secuencia= N_final+N; 
for (float N = N_inicial; N_inicial = N_final-1; N <= N_final);
        {
            cout<<N_final<<(".");
        for ( char valor = 1; 1<=valor; valor++ );
            {
            cout<<valor;
            }

            cout<<endl; 
        }   

    }
}

2 Answers2

0

Hay errores de sintaxis y de lógica. Los for no terminan en ;, hay unas llaves flotantes antes de secuencia= N_final+N; que no tienen ningún uso. La forma más fácil de hacer lo que solicitas es, por cada iteración, ir sumandole al numero la iteracion / (10^iteracion). O sea algo así:

6 + 0/(10^0) = 6
6 + 1/(10^1) = 6.1
6.1 + 2/(10^2) = 6.12
6.12 + 3/(10^3) = 6.123
... y así sucesivamente

Debido a que C++ omite más de 6 decimales, se usó la instrucción setprecision para que imprimiera a la fuerza los decimales que se solicitan

#include <iostream>
#include <math.h> // pow
#include <iomanip> // setprecision

using namespace std;

int main() {
    int N;
    double N_final, secuencia;

    cout << "\n";
    cout << "Bienvendido/a... \n[ Secuencia de numeros ]\n";
    cout << "\n";
    cout << "Ingrese un valor: "; cin >> N_final;

    cout << fixed;
    secuencia = N_final - 1;
    for (N=0; N<=secuencia; N++) {
        N_final = N_final + N/(pow(10, N));
        cout << setprecision(N) << N_final;
        cout<<endl;
    }
    return 0;
}

Otra forma de resolver el problema sería manejando todo como caracteres, y solo se va concatenando al final de la cadena con el número de la iteración.

aeportugal
  • 7,106
  • 2
  • 9
  • 21
  • [``](https://en.cppreference.com/w/c/numeric/math) es una librería de [tag:c] no de [tag:c++]. Si necesitas usarla usa su equivalente de C++: [``](https://en.cppreference.com/w/cpp/header/cmath). – PaperBirdMaster Sep 13 '18 at 05:57
  • Mmm no sabia, a mi me habían dicho que la podía usar, pero gracias por aclararme esa acerca de las cabeceras... – Marianne Stewart Sep 14 '18 at 01:20
0

Dado que has etiquetado la pregunta como C++, deberías usar el lenguaje adecuadamente:

  • Las cabeceras <stdio.h> , <stdlib.h> y <math.h> son de no de . Estas cabeceras disponen de una versión adaptada a C++ que tiene el prefijo c y carece de extensión. Si realmente necesitas usar las cabeceras de C (que nunca será el caso) debes usar los equivalentes de C++ <cstdio> , <cstdlib> y <cmath> . Lee este hilo para saber por qué.
  • Incluyes <stdio.h> (incorrectamente, mira el punto anterior) y no usas ninguna de sus funciones: no la incluyas.
  • No hay obligación de usar la cláusula using namespace std; pues es sólo es una ayuda a la escritura de código; si decides usar esta cláusula no lo hagas en el ámbito global, úsala en el ámbito más pequeño posible. Lee este hilo para saber por qué.
  • Evita abusar de std::endl (pues puede causar problemas de rendimiento) y favorece el uso del salto de línea explícito (\n). Lee este hilo para saber por qué.

Llegados a este punto, el resto de correcciones tendrían que ver con tu estilo (deberías mejorarlo: el código es ilegible).

Propuesta.

¿Por qué no escribes el número como texto y luego lo pasas a número? Puedes ayudarte de std::stringstream :

int N;
cout << "\nBienvendido/a... \n[ Secuencia de numeros ]\n\n"
        "Ingrese un valor: ";
cin >> N;

// Añadimos el separador decimal.
stringstream ss;
ss << N << ".";

// Añadimos los números de 1 a N
for (int i = 1; i < N; ++i)
    ss << i;

Después puedes pasar éste texto a número así:

double N_final;
ss >> N_final;
PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82