Dev - C++ - datos desordenados/corridos

 
Vista:
sin imagen de perfil

datos desordenados/corridos

Publicado por ivan (8 intervenciones) el 05/10/2015 04:04:08
datos-desordenados-por-columnas

Buenas, soy nuevo en el foro y al mismo tiempo nuevo en programacíon y mi primera consulta es la siguiente: al armar este pequeño pero util programa del metodo de biseccion me surgió este problema que pueden ver......al pasar a la linea en que se dan los valores de a, b, xr, f(a)...etc a partir de una cierta cantidad de iteraciones se me van corriendo los valores cada vez mas a la derecha..........alguien me podria ayudar con esto? desde ya gracias
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
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

datos desordenados/corridos

Publicado por agustin (522 intervenciones) el 05/10/2015 14:42:31
¿como haces para imprimir los valores en columnas? Pon lo que haces para corregirtelo ya que si usas por ejemplo printf es un fallo de formato de salida que se arregla cambiandolo.
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
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

datos desordenados/corridos

Publicado por agustin (522 intervenciones) el 05/10/2015 15:11:41
mira si es esto lo que quieres hacer:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc,char* argv[])
{
   int posCol1=10, posCol2=20;
   int primero=500000, segundo=8000, tercero=55, cuarto=100;
   printf("%-*s", posCol1, "Columna 1");
   printf("%-*s\n", posCol2, "Columna 2");
   printf("%-*s", posCol1, "---------");
   printf("%-*s\n", posCol2, "---------");
   printf("%-*d", posCol1, primero);
   printf("%-*d\n", posCol2, segundo);
   printf("%-*d", posCol1, tercero);
   printf("%-*d\n", posCol2, cuarto);
   system("PAUSE");
   return 0;
}

Con el signo - alinea a la izquierda y sin el signo - alinea a la derecha.
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
sin imagen de perfil

datos desordenados/corridos

Publicado por ivan (8 intervenciones) el 05/10/2015 16:25:01
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
    #include <iomanip> // setprecision
    #include <cmath>
 
    #define PRECISION 6
 
    using namespace std;
 
    void tabula(double a, double b);
    double f(double x);
 
    int main()
    {
       cout << setprecision(PRECISION);
       cout << "\nCalculo de las raices de una funcion aplicando el metodo de la biseccion\n";
       cout << "\nIngrese el intervalo inicial [a,b]:" << endl;
 
       double a, b, tolerancia;
 
       cout << "\na = ";
       cin >> a;
 
       cout << "b = ";
       cin >> b;
 
       tabula(a, b);
 
       cout << "\nEscoja el intervalo adecuado" << endl;
       cout << "\na = ";
       cin >> a;
 
       cout << "b = ";
       cin >> b;
 
       double xr;
 
       if (f(a) * f(b) > 0)
       {
          cout << "\nNo se puede aplicar el metodo de la biseccion\n";
          cout << "porque f(" << a << ") y f(" << b << ") tienen el mismo signo" << endl;
       }
       else
       {
       cout << "Tolerancia = ";
       cin >> tolerancia;
 
!!!!!A partir de acá es donde empieza mi problema......traté de usar el tabulador y espaciarlo para que las columnas esten lo mas separadas posibles pero el problema persiste.....
 
 
       cout << "\na\t\t           b\t\t           x\t\t\           f(a)\t\t\           f(b)\t\t\           f(xr)\n" << endl;
       do
       {
       xr = (a + b) / 2.0;
       cout << a << "\t\t           " << b << "\t\t           " << xr << "\t\t           " << f(a) << "\t\t           " << f(b) << "\t\t          " << f(xr) << "\t\t           " << endl;
       if (fabs(f(xr)) <= tolerancia)
       {
       cout << "\n\nPara una tolerancia de " << tolerancia << " la raiz de f es: " << xr << endl;
       break;
       }
       else
       {
       if (f(xr) * f(a) > 0)
       {
       a = xr;
       }
       else if (f(xr) * f(b) > 0) {
       b = xr;
       }
       }
 
       } while (1);
       }
       cin.get();
       cin.get();
       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
0
Comentar
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

datos desordenados/corridos

Publicado por agustin (522 intervenciones) el 05/10/2015 20:36:17
Lee esto donde te explican como hacer lo que quieres. Para tu caso creo que tendrías que usar setw.
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
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

datos desordenados/corridos

Publicado por agustin (522 intervenciones) el 06/10/2015 13:35:18
Te pongo un pequeño 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
//---------------------------------------------------------------------------
#include <iostream>
#include <iomanip>
#include <windows.h>
 
using namespace std;
 
int main(int argc, char* argv[])
{
   int valor[5] = {500, 50, 6, 88, 100000};
   float n[5] = {12.5, 55.100, 100.555, 5000.227, 8.77};
   double m[5] = {1250.5678, 50.12, 12.444, 4.556, 500.087};
   HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
   bool color=false;
 
   //Fila titulo
   SetConsoleTextAttribute(hstdout,0xA0);
   cout << setw(16) << fixed << right << "Columna 1"
        << setw(16) << fixed << right << "Columna 2"
        << setw(16) << fixed << right << "Columna 3" << endl << endl;
 
   //Filas con numeros
   for(int i=0; i<5; i++){
      color = !color;
      SetConsoleTextAttribute(hstdout,(color*0x8)+0x2);
      cout << setw(15) << fixed << right << setprecision(2) << (double)valor[i] << "$"
           << setw(15) << fixed << right << setprecision(2) << n[i] << "$"
           << setw(15) << fixed << right << setprecision(2) << m[i] << "$" << endl;
   }
   SetConsoleTextAttribute(hstdout,0x7);
   cout << endl << "Pulsa intro para salir.";
   cin.get();
   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
sin imagen de perfil

datos desordenados/corridos

Publicado por ivan (8 intervenciones) el 06/10/2015 16:26:44
Desde ya muchas gracias, pude solucionar mi error de interface jajajaj y si, era agregando setw mas set precision y un jusificamiento a la izquierda en cada una de las variables de mi cuadro. Muchas gracias por la ayuda.
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
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

datos desordenados/corridos

Publicado por agustin (522 intervenciones) el 06/10/2015 16:40:18
Puedes hacerlo de otra manera. En vez de poner todo eso en cada línea lo que puedes es cambiar los Flags, haces lo que desees, y restaurar los Flags.
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
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

datos desordenados/corridos

Publicado por agustin (522 intervenciones) el 06/10/2015 17:49:00
Mira esto, aqui cambio la precision y alineacion, luego imprimo todo lo que quiera con esa precision y alineacion y por ultimo restauro la precision y alineacion:
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
47
48
//---------------------------------------------------------------------------
#include <iostream>
#include <iomanip>
#include <windows.h>
 
using namespace std;
 
int main(int argc, char* argv[])
{
   int valor[5] = {500, 50, 6, 88, 100000};
   float n[5] = {12.5, 55.100, 100.555, 5000.227, 8.77};
   double m[5] = {1250.5678, 50.12, 12.444, 4.556, 500.087};
   HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
   bool color=false;
 
   long precisionOriginal = cout.precision(); //Guardamos la precision actual
   long flagsOriginales = cout.flags(); //Guardamos los flags originales
 
   //Fila titulo
   SetConsoleTextAttribute(hstdout,0xA0);
   cout << setw(16) << fixed << right << "Columna 1"
        << setw(16) << fixed << right << "Columna 2"
        << setw(16) << fixed << right << "Columna 3" << endl << endl;
 
   //Cambiamos la precision y la alineacion por lo que deseemos
   cout.precision(2);
   cout.flags(ios::right);
 
   //Filas con numeros
   for(int i=0; i<5; i++){
      color = !color;
      SetConsoleTextAttribute(hstdout,(color*0x8)+0x2);
      cout << setw(15) << fixed << (double)valor[i] << "$"
           << setw(15) << fixed << n[i] << "$"
           << setw(15) << fixed << m[i] << "$" << endl;
   }
 
   //Restauramos precision y flags
   cout.precision(precisionOriginal);
   cout.flags(flagsOriginales);
 
   SetConsoleTextAttribute(hstdout,0x7);
   cout << endl << "Pulsa intro para salir.";
 
   cin.get();
   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
0
Comentar