Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - leosansan

#791
Programación C/C++ / Re: Tablero ajedrez c++
19 Mayo 2013, 20:43 PM
Cita de: JohnMcb en 19 Mayo 2013, 19:22 PM
..................................................................
pero ahora necesito mostrar ese mismo vector en un tablero decente, es decir que las casillas sean a color tal cual como en un tablero de ajedrez (casillas intercaladas blanco y negro), pero necesito hacer esto en dev c++ y sin necesidad de instalar librerías adicionales, alguien sabe como hacerlo ?
Gracias.

Creo que lo siguiente te podría servir ya que permite elegir el color de la letra y del fondo, pudiendo ir cambiándola. Lo mejor es construirse una función con la instrucción e invocarla cada vez que se quiera cambiar:

Código (cpp) [Seleccionar]
#include <windows.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

int main()
{
    SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), 105 );
    cout << "Azul sobre fondo amarillo" << endl;
    SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), 44 );
    cout << "Rojo sobre fondo verde" << endl;
    SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), 7 );
    cout << "Vuelvo a Blanco sobre fondo negro" << endl;
    return 0;
}


Y el modo de funcionamiento, o mejor elección de colores es:

Citar
SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE),X);
Con este comando se le puede cambiar el color de texto y de fondo a lo que se muestre despues de que la linea se ejecute, siendo X un numero entre 0 y 255.
Ahora bien, siendo los colores:
¿como calcular X? Simple:

X=A*16+B

A=color de fondo
B=color de texto


Asi, si queremos por ejemplo un texto azul claro sobre fondo amarillo:

X=6(fondo amarillo)*16+9(texto azul claro)= 105

0 = Negro
1 = Azul
2 = Verde
3 = Aguamarina
4 = Rojo
5 = Purpura
6 = Amarillo
7 = Blanco
8 = Gris
9 = Azul claro

A = Verde claro=10
B = Aguamarina claro=11
C = Rojo claro=12
D = Purpura claro=13
E = Amarillo claro=14
F = Blanco brillante=15


Saluditos!. ... ...
#792
Cita de: kaiserr en 19 Mayo 2013, 15:58 PM
Hay ingenierias que utilizan python.
Se estudia C porque es la base de casi todo. En mi carrera el primer año se estudia C y luego C++, y el siguiente año python.

No obstante existen universidades en que en el primer semestre dan python y luego C/C++. El objetivo es que manejen lo básico, variables, bucles y funciones y, sobre todo, aprendan la importancia de la indentación en los códigos, obligatorio a la fuerza en python donde no se usan llaves para delimitar el "cuerpo" y que tanto se peca en C/C++ por defecto. Claro que luego al pasar a C/C++ se hacen un lío, no por las llaves, sino por el uso de arrays de un solo tipo, en python un array puede contener valores de distintos tipos, y ni te cuento lo de los punteros.

Vamos que para gustos colores.

Saluditos!. .... ...
#793
Cita de: Caster en 19 Mayo 2013, 15:45 PM
Quería probar el código pero estoy volviendo a tener problemas con el compilador del Qt Creator, ya cree un posts aparte con esto y lo había resuelto pero vuelve a fallar, a ver si doy con la solución y lo pruebo.


¿No usas Code:Blocks?.

Pruébalo y seguro que te encantará, con sus ventanitas y múltiples pestañas, su opción para C11 su ....... vamos no digo que dejes de usar el Qt Creator pero no te cuesta nada probar "don Code:Blocks" .

Saluditos!. ... ..
#794
Cita de: Caster en 19 Mayo 2013, 15:06 PM En este mismo código declaras la variable longi, pero no veo que uso tiene.


Ninguna utilidad, fue una variante que intenté, pero al final no me hizo falta usarla :-)

Ya he reeditado el post anterior y la he eliminado. Bien observado, aunque no hace mal sobra del código.

Saluditos!. .... ..
#795
Cita de: CCross en 17 Mayo 2013, 20:40 PM
Hola leosansan excelete codigo lo de itoa no lo sabia muy bueno pero aun
no logro enterder del todo este codigo:

Código (cpp) [Seleccionar]
return divide > 0 ? binario(divide) * 10 + resto : resto;

Especificamente en la parte de la multiplicacion por diez y luego la suma me gustaria saber que valor devuelve la funcion de cada llama a ella yo supongo que seria cero.


Es cuestión de "escribir" lo que va haciendo el código. Suelen ser peleonas las funciones recursivas y no muy eficientes.

Te dejo un par de casos para que veas como actúa. Observa que  devuelve los dígitos en orden correcto, no hay que darles la vuelta:


Citar

binario(11)=b(11)=
=10*b(5)+1=
=10*(10*b(2)+1)+1=100*b(2)+11=
=100*(10*b(1))+0)+11=1000*b(1)+11=
=1000*(1)+11=1011

binario(12)=b(12)=
=10*b(6)+0=
=10*(10*(b(3)+0)=100*b(3)=
=100*(10*b(1))+1)=1000*b(1)+100=
=1000*(1)+100=1100



Saluditos!. .... ...
#796
Cita de: edr89 en 19 Mayo 2013, 08:22 AM
Hola,
Necesito calcular la raiz cuadrada de un numero, encontre en la red una funcion que no necesita de la libreria math.h, todo ejecuta pero no termino de entender el for loop de la raiz:

El 20del for es como un número mínimo de aproximaciones sucesivas. En realidad está mal implementado el código ya que en números pequeños se alcanza el valor correcto en la  tercerao cuarta iteración o aproximación, resultando inútiles las demás, dependiendo el número de aproximaciones del tamaño del numero. Más bien debería de comparar el valor de x calculado con el anterior y si son iguales se acaba.

Por ejemplo, la salida para raiz de 2 es:

Código (cpp) [Seleccionar]
Escribe el numero: 2
La raiz de 2 es: 1.500000
La raiz de 2 es: 1.416667
La raiz de 2 es: 1.414216
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214

La raiz de 2 es: 1.41421


Fíjate que en la cuarta ya se tiene el valor deseado resultando inútiles las demás.


Citar
¿Porqué i<20?, num es el dato que el usuario va a teclear que es = x, entonces mientras el loop corre ¿qué le pasa a x?

x1 = las operaciones indicadas con el dato que escribe el usuario.
x2 = las mismas operaciones ahora con el nuevo dato resultado de x1.
x3 = operaciones con el dato que se genero en x2.
xn = ...

es asi como sucede?


Tal y com ves en la salida que te he puesto, es así.

Citar
sospecho que la condicion en for() y la expresion de X se reducen a meras formulas matematicas, no recuerdo muy bien como resolver una raiz cuadrada con precision y cifras significativas.

La condición del for es una chapuza, ya te comente que debería ser mejor con un while comparando valor actual y valor anterior, es un número el 20 de "mínimos" para asegurar la convergencia para números muy grandes, pero para números cortos es demasiado elevado. Y el valor de x es que el que resulta de un cálculo "a mano", mira en Wikipedia que lo explica bien.


Observa en cambio ésta salida y compárala con la original:

Código (cpp) [Seleccionar]
Escribe el numero: 2
La raiz de 2 es: 1.500000
La raiz de 2 es: 1.416667
La raiz de 2 es: 1.414216
La raiz de 2 es: 1.414214
La raiz de 2 es: 1.414214

La raiz de 2 es: 1.41421


Como ves he comparado cada valor obtenido en cada iteración con el anterior y en el momento que son iguales paro. Me ahorro unas cuantitas iteraciones. Y el código, con una pequeña modificación para evitar bucles si en lugar de un número se introduce una letra:

Código (cpp) [Seleccionar]
#include<stdio.h>
#include <stdlib.h>

float SquareRoot(float num);
void main()
       {
       int input,cont;
       char ch;
       float square;
       do {
           cont=0
           printf("Escribe el numero: ");
           cont=scanf("%d",&input);
           while( (ch = getchar()) != '\n' );
           if(input<=0)
               printf("La raiz de un numero negativo no esta definida, por favor intenta de nuevo.\n");
       }while (cont==0 || input<=0);
       square = SquareRoot(input);
       printf("\n La raiz de %d es: %.5f",input, square);
       getch();
       }

float SquareRoot(float num)
{
   float x = num,x1;
   int i;
   do{
       x1=x;
       x = (((x * x) + num) / (2 * x));
       printf(" La raiz de %g es: %f\n",num, x);
   }while (x!=x1);
   return x;
}


Citar
Trato de pensar en alguna funcion que resuelva con dos numeros de raiz entera como (4, 9) para buscar raices en dicho intervalo. La cuestion es que no puedo usar sqrt() de math.h.

Tendrías que escanear dos números en lugar de uno y usando un for pasar los  números comprendidos entre esos dos a la función

y meter el código que te calculala raiz en un for que va desde num1 a num2. Una salida a esta opción sería:

Código (cpp) [Seleccionar]
Escribe el primer numero: 2
Escribe el segundo numero: 16

La raiz de 2 es: 1.41421
La raiz de 3 es: 1.73205
La raiz de 4 es: 2.00000
La raiz de 5 es: 2.23607
La raiz de 6 es: 2.44949
La raiz de 7 es: 2.64575
La raiz de 8 es: 2.82843
La raiz de 9 es: 3.00000
La raiz de 10 es: 3.16228
La raiz de 11 es: 3.31662
La raiz de 12 es: 3.46410
La raiz de 13 es: 3.60555
La raiz de 14 es: 3.74166
La raiz de 15 es: 3.87298
La raiz de 16 es: 4.00000


con el siguiente código:

Código (cpp) [Seleccionar]

#include<stdio.h>
#include <stdlib.h>

float SquareRoot(float num);
void main()
       {
       int flag1=0,flag2=0,num1,num2,cont1,cont2,i;
       chat ch;
       float square;
       do {
           cont1=cont2=flag1=flag2=0;
           printf("Escribe el primer numero: ");
           cont1=scanf("%d",&num1);
           if (cont1==0)
               flag1++;
           while( (ch = getchar()) != '\n' );
           printf("Escribe el segundo numero: ");
           cont2=scanf("%d",&num2);
           if (cont2==0)
               flag1++;
           while( (ch = getchar()) != '\n' );
           if(num1<=0 || num2<=0){
               printf("La raiz de un numero negativo no esta definida, por favor intenta de nuevo.\n");
               flag2++;
           }

       }while (flag1!=0 || flag2!=0);
       for (i=num1;i<=num2;i++){
           square = SquareRoot(i);
           printf("\n La raiz de %d es: %.5f",i, square);
       }
}

float SquareRoot(float num)
{
   float x = num,x1;
   int i;
   do{
       x1=x;
       x = (((x * x) + num) / (2 * x));
       //printf(" La raiz de %g es: %f\n",num, x);
   }while (x!=x1);
   return x;



}


Está hecho a toda pastilla, por lo que habría que testearlo un poco a ver si falla o no, pero para que veas más o menos como sería la cosa.

Saluditos!. .... ..
#797
El error principal es que tenías declarada la variable" respuesta" como int, mientras que cuando luego la escaneas y usas en los case lo haces como char.

El otro es que no tienes bien usada total_cal.

Mejor lo ves en el código corregido:


Código (cpp) [Seleccionar]
#include<stdio.h>
int main()
{
   int cal, total_cal=0, food, foodfor;
   char respuesta;
   printf("\t\tPrograma de calorias\n\n");
    printf("1. Cuanto has comido hoy? \n");
    printf("2. Indice de Masa Corporal \n");
    printf("3. Salir: \n");
    do{
           scanf(" %c", &respuesta);
   switch (respuesta)
           {
               case '1':
                   {
                       printf("Ingresa los datos de los alimentos.\n\n ");
                       printf("Cuantos alimentos comiste?: ");
                       scanf("%d",&food);
                       printf("Teclea las calorias de cada alimento: ");
                       for(foodfor = 0;foodfor<food;foodfor++)
                           {
                               scanf("%d",&cal);
                               total_cal +=cal;
                           }
                       printf("Has comido %d calorias.",total_cal);
                       break;
                   }
               case '2':
                   {
                       printf("Indice de Masa Corporal\n");
                       printf("Please Wait...\n");
                       break;
                   }
               case '3':
                   {
                       printf("Adios!");
                       return 1;
                   }
               default:
                   printf("Opcion no valida, intenta de nuevo\n");
           }
   }while(respuesta<'1'|| respuesta>'3');
   return 0;
}


Saluditos!. ..... ..
#798
Cita de: amchacon en 19 Mayo 2013, 01:02 AM
Como te picas Leosan  ;-)

Estimado y respetado amchacon, no era un pique sino una sugerencia a posibles maneras de no usar goto en tus planteamientos.

Ya aclare que yo soy el primero en usarlo y sólo quería poner de manifiesto que su uso por comodidad no es aconsejable ni la manera más efiente en según qué situaciones.

Así que de "piques" nada de nada, y mucho menos contigo, sólo eran una pequeña y humilde aportación al tema.

Saluditos!. .... . .

#799
Programación C/C++ / Re: PROGRAMACION EN C
18 Mayo 2013, 22:52 PM
Cita de: DANONITA en 18 Mayo 2013, 22:24 PM
sorry soy nueva, estoy aprendiendo a usar el foro :-[

Disculpas aceptadas  ;)  y espero no haberte ofendido, pero las normas son las normas y una de ellas es que no se hacen tareas, o sea desde cero. Si se ayuda, en la medida de nuestros conocimientos, modestos en mi caso, a resolver dudas o corregir errores.

Saluditos!. .... ..
#800
Programación C/C++ / Re: PROGRAMACION EN C
18 Mayo 2013, 22:19 PM
Cita de: CodeSource en 18 Mayo 2013, 21:00 PM
esto va en la sección de C ................

Si no lo han cambiado estamos en "Programación C/C++", por lo tanto corresponde a la sección. Pero eso de no presentar un código con unos mínimos avances es, por decirlo finamente, demasiado cómodo.

Saluditos!. ... ..