elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18 19
81  Foros Generales / Dudas Generales / Re: Que es mejor Win7 o Ubuntu? en: 13 Enero 2012, 14:27 pm
Ubuntu es el sistema operativo ideal, y por ello es el que se estudia en las universidades, Windows más que nada se ve un poco por encima porque tuvo una buena entrada al mercado y consiguió que se usara tanto.

Citar
Se ve que muy experta no es esa gente que mencionas si dicen eso jeje. Windows 7 y ubuntu NO SE PARECEN EN NADA, no digo que uno sea mejor que otro sino que no tienen nada que ver y por tanto no deberian compararse dado que repito NO SE PARECEN EN NADA, asi que copias descaradas nada de nada.
Por otro lado decir que xp es mejor que el windows 7 y hacerlo asi reconociendo encima que ni siquiera se a probado el windows 7 es cuanto menos ridiculo. Sin duda el windows 7 le da tropecientas vueltas al xp que no es mas que un OBSOLETO sistema operativo de 10 años de antiguedad que no se puede para nada poner a la altura del windows 7 en ningun aspecto.

¿Que Windows XP/7 es qué...?... macho, la primera actualización de Windows XP pesaba tanto como el propio sistema operativo y Windows 7 no se quedó muy lejos; Windows no es un sistema operativo repleto de fallos y chapuzas informáticas, Windows en si es un bug.

WINDOWS 2000 = WINDOWS XP = WINDOWS 7, leed un poco de estructura de sistemas operativos, es exactamente lo mismo, acarrea los mismos fallos, el mismo consumo inmenso de recursos, la base algorítmica es idéntica.

¿QUE WINDOWS 7 VA MÁS RÁPIDO QUE WINDOWS XP?, LOL!, ¿NO TENDRÁ ALGO QUE VER QUE WINDOWS 7 NECESITE 1GB MÍNIMO PARA ARRANCAR Y QUE SI QUIERES QUE TARDE MENOS DE 10 MINUTOS EN ABRIR UNA CARPETA NECESITAS 3-4GB?.

Y por último, WINDOWS NO ES UNA COPIA DE UBUNTU, no se parecen en nada, como he dicho antes Linux y en particular la distribución Ubuntu es el sistema operativo ideal por su estructura y los algoritmos que lo componen.

MIS OJOS!, LO QUE LEO:

Citar
UBUNTU ES MIL VECES MEJOR! eso no se preunta, windows sirve para los usuarios que no saben mucho de computación, ahora el linux sirve para la gente como nosotros, interesados en la informática, ahora.. no se comparan solo así por así, no le puedes bajar el nivel tanto a ubuntu! xD saludos
Eso seguramente lo dice alguien que tiene instalado Windows y lo usa regularmente. Incluso mas que el SO del que habla... Tio, pero ni siquiera das fundamentos.

Citar
Ubuntu y todas las distros Linux son - más seguras, rápidas.
Lo de que sean mas rápidas es tan falso como que los cerdos pueden volar. Todo depende de las especificaciones del PC. Y dirás, pues usa otro entrono.. y yo diré.. pues usare Xp en vez de 7.. Pues acaba siendo lo mismo...

Lo de la seguridad Falso también. Si, puede que sean mas seguras por su manera de llevar los permisos y el control de usuarios. Pero, cualquier SO seria 100% seguro, si no hubiese un usuario.

En primer lugar, ningun informático que se deje preciar usa Windows. Como ha apuntado el compañero Windows solo lo usan usuarios que no tienen mucha idea de computación porque sabiendo los fallos que tiene y cómo está programado seguro que excepto Bill Gates pocos más lo usuarían... No hace falta estudiar una carrera para saber esto, basta con leer un poco.

En segundo lugar, Windows es una carpeta "C/" y ala todo dentro, Ubuntu es un SO con una estructura definida donde los niveles inferiores no pueden acceder a niveles superiores y por tanto es muchísimo más seguro. ¿No dice nada el hecho de que el 90% de los servidores sean Linux?, yo creo que el 10% restante es de servidores de Microsoft y compañías relacionadas con ella.

Y en tercer lugar, Ubuntu corre sin problemas en PC's que considerabas chatarra, Windows pide en todas sus versiones un PC exagerado; y aqui falta comentar que los PC's se fabrican pensando principalmente en Windows puesto que es el sistema operativo que más se usa, imaginaos que se fabricaran inclinados a Linux...

Tendría que subir las transparencias de la facultad donde puedes ver la comparación entre Windows y Ubuntu, pero tengo que preguntar si se pueden subir a foros.

Aqui nadie ha hablado de Apple, y es un caso especial puesto que no se identifica solo por SO sino también por el hardware fabricado de forma específica para él; esto le da muchos parámetros que no tienen otros PC's.

Ya en serio, si quieres un buen PC, Windows es la peor opción a la que puedes tirar, que no te engañe el hecho de que sea el SO más usado porque sea el más antiguo...

Citar
UBUNTU ES MIL VECES MEJOR! eso no se preunta, windows sirve para los usuarios que no saben mucho de computación, ahora el linux sirve para la gente como nosotros, interesados en la informática, ahora.. no se comparan solo así por así, no le puedes bajar el nivel tanto a ubuntu! xD saludos

Chapó, a ver si os informáis un poco como él acerca de sistemas operativos más allá de la páginas de Microsoft antes de decir tantas barbaridades.
82  Foros Generales / Dudas Generales / Re: Gestion de procesos en: 13 Enero 2012, 14:01 pm
Buenas:

Te puedo indicar cómo se gestionan de forma básica los procesos en Linux desde la terminal (en particular para Ubuntu):

top: muestra los procesos en ejecución y permite cerrarlos
ps: muestra la lista de procesos del usuario
kill ID: cierra un proceso
fg ID: sitúa en primer plano un proceso (que esté pausado o en segundo plano)
bg ID: pasa a segundo plano un proceso
&: se pone al final de un comando y sirve para ejecutarlo en segundo plano


Nota: Donde pone "ID" hay que sustituirlo por el número-ID del proceso

Lógicamente hay muchos más comandos, te basta con buscar un poco por internet.

Saludos.
83  Foros Generales / Noticias / Re: Un iPad 'sobrevive' a una caída libre desde el espacio en: 13 Enero 2012, 13:39 pm
La velocidad depende de la aceleración y del rozamiento, el rozamiento depende de la masa...

Todos los objetos son atraidos por la tierra a 9'8 m/s^2, lo cual quiere decir que por cada segundo el objeto aumentará su velocidad 9'8, esto es la situación ideal (sin ningún tipo de rozamiento).

Ahora, en el caso real, la aceleración se ve afectada por el rozamiento (fuerza que se opone al movimiento por el contacto entre dos superficies), por ejemplo, si empujamos una caja en una superficie de arena nos costará más que empujarla sobre una pista de hielo, el rozamiento del hielo es muy pequeño (que no es lo mismo que nulo) mientras que la arena ofrece mayor rozamiento.

En el caso de la pluma y la piedra, la pluma tarda más en caer no porque tenga mayor aceleración (todos los objetos sienten la misma atracción por la Tierra) sino porque el propio aire choca contra ella reduciendo la velocidad, y por tanto aunque acelere, la velocidad que ha ganado por segundo (9'8) gracias a la aceleración, la pierde por el choque con el aire.

PD: Sobre el vídeo solo es otra estrategema más para vender.
84  Programación / Programación C/C++ / Re: Un struct dentro de una matriz en: 13 Enero 2012, 12:36 pm
No comprendo muy bien qué preguntas, ¿quieres guardar en la matriz los datos según se vayan introduciendo?, en ese caso debes usar dos bucles anidados como has puesto en tu código:

Código
  1. for(i=0;i<n;i++)
  2.      {  for(j=0;j<m;j++)
  3.         {
  4.          printf("ingrese numero de lesionados para la interseccion entre [Avenida %d,Calle %d]: ",i,j);
  5.  
  6.          scanf("%d",&cruce [j].(*R).lesionados);
  7.  
  8. printf("ingrese cantidad de vehiculos involucrados en la interseccion[Avenida %d,Calle %d]: ",i,j);
  9.  
  10.          scanf("%d",&cruce [j].(*R).vehiculos);
  11.  
  12. printf("ingrese fecha del accidente en la interseccion [Avenida %d,Calle %d]: ",i,j);
  13.  
  14.          scanf("%d",&cruce [j].(*R).fecha);
  15.         }
  16.         }

Pero esto no es correcto:

Código:
&cruce [j].(*R).lesionados

En primer lugar "cruce" es una tabla bidimensional, no puedes dejar uno de los parámetros vacíos asi que debes poner también el número de filas (i):

Código
  1. &cruce[i][j].DATO

No entiendo muy bien qué ese "(*R)", pero no es necesario... a la tabla debes acceder con estos códigos:

Código
  1. cruce[i][j].lesionados
  2. cruce[i][j].vehiculos
  3. cruce[i][j].fecha

Lo cual tampoco te va a funcionar si no defines la tabla como tipo "accidente", es decir, asi:

Código
  1. void Llenar(accidente cruce[10][20],int n, int m,int accidentes) //En la función
  2.  
  3. int main()   //En el main
  4. {
  5.  
  6.    accidente cruce[10][20];
  7. .
  8. .
  9. .
  10. }

Otra cosa es que usas variables que no has declarado, como por ejemplo la tabla "a" no está declarada en el main ni la variable "accidentes" (la primera se la pasas a la función "Mostrar" y la segunda a la función "Llenar").

Y por último en los codicionales haces lo siguiente:

Código
  1. If
  2. {
  3. //Instrucciones
  4. }
  5. {
  6. else
  7. //Instrucciones
  8. }

El else no va dentro de las llaves, la estructura es siempre:

Código
  1. Instrucción principal
  2. {
  3. Instrucciones que la componen.
  4. }

Con esto el programa funciona correctamente. Te he anotado los fallos pero los has cometido en varios lados del algoritmo, asi que revísalo entero.

Saludos.
85  Programación / Programación C/C++ / Re: errores de programa en C al compilar gcc en: 13 Enero 2012, 11:52 am
Buenas:

Te comento los errores:

Código
  1. #include define N=10

Eso no está bien escrito, el "define" se usa sin "include":

Código
  1. #define N=10

El cuerpo del programa se compone de:

Código
  1. int main()
  2. {
  3. }

En tu algoritmo no has puesto las llaves.

En el bucle has puesto:
Citar
tabla=tabla[i-1] + tabla[i-2];

Siempre hay que declarar la posición en la tabla a la que haces referencia, deberías poner:

Código
  1. tabla[i]=tabla[i-1] + tabla[i-2];

Creo que el "end" final lo has puesto para finalizar el bucle tipo Pascal ¿no? lol; en C/C++ cuando el bucle tiene más de una instrucción se usa llaves para señalar el inicio y fin:

Código
  1. for (i=2; i<=10; i++)
  2. {       //Inicio
  3.        //Instrucciones que componen el bucle
  4. }     //Fin

Y por último los "%d" van entre comillas. Aqui te dejo el algoritmo corregido:

Código
  1. #include <stdio.h>
  2. #define N=10
  3.  
  4. int main ()
  5. {
  6. int tabla[10];
  7. int i;
  8. int aux;
  9.  
  10. printf("%d", 0);
  11. scanf("%d",&tabla[0]);
  12. printf("%d\n", 1);
  13. scanf("%d",&tabla[1]);
  14.  
  15. for (i=2;i<=10;i++)
  16. {
  17. tabla[i]=tabla[i-1] + tabla[i-2];
  18. scanf("%d",tabla);
  19. }
  20. }

Saludos.
86  Programación / Programación C/C++ / Re: Error en la linea¡¡ en: 9 Enero 2012, 14:22 pm
¿Y si pruebas asi?:

Código:
#include <iostream>
using namespace std;

int main()
{
cout << "Hello World!\n";
return 0;
}

Es lo mismo pero quizá asi no te dé error.
87  Foros Generales / Noticias / Cualquier palabra podrá ser usada como dominio de Internet en: 9 Enero 2012, 14:14 pm
Esta semana comienza la expansión de nombres de dominios. En contra de la voluntad de algunas grandes empresas, a partir del jueves 12 de enero cualquier persona o empresa podrá registrar cualquier palabra como extensión de una página web.

En la actualidad hay alrededor de 22 tipos de dominios de primer nivel como .com o .org, además de los códigos de países como .es para España. Las empresas creen que ya es suficiente, y 40 granes corporaciones, como por ejemplo Coca Cola, se han quejado de que con la expansión del dominio se elevan los costes y aumenta el riesgo de fraude y suplantación.

Este podría suponer uno de los mayores cambios en Internet desde su creación hace décadas, y estará coordinado por ICANN (Internet Corporation for Assigned Names and Numbers), que es una organización sin ánimo de lucro que opera a nivel internacional, y es responsable de asignar espacio de direcciones numéricas de protocolo de Internet (IP), así como la administración del sistema de nombres de dominio de primer nivel genéricos (gTLD) y de códigos de países (ccTLD).

El lanzamiento de los llamados "puntos de la marca" es el último gran cambio en las estrictas normas que rigen la nomenclatura de Internet desde el lanzamiento de .com en 1985. El mayor cambio reciente se produjo el año pasado cuando se puso en marcha el .xxx para dar a los sitios web para adultos su propio espacio en Internet. Este dominio cuenta con 250.000 sitios web en nueve meses.

Sin embargo, este nuevo cambio lleva la personalización de las páginas web a un nuevo nivel. De esta forma, muchas marcas o instituciones ven en ello muchas posibilidades, aunque otras ven problemas de suplantación de identidad. Proteger la marca les podría costar millones.

Los solicitantes tienen hasta el 12 de abril para inscribirse, y después tendrá lugar un proceso de evaluación de ocho meses. Los primeros sitios de nivel superior de dominio se espera que sean efectivos para 2013. Mientras tanto, ICANN espera que haya hasta 4.000 aplicaciones.

Fuente: http://www.20minutos.es/noticia/1270649/0/palabras/dominios/internet/
88  Foros Generales / Noticias / Re: WikiLeaks no afloja en: 29 Septiembre 2011, 11:28 am
Es deprimente saber como está el mundo.
89  Programación / Programación C/C++ / Re: Ejemplos de funciones en c en: 19 Septiembre 2011, 09:38 am
Buen aporte, seguro que le servirá a más de uno, pero te aconsejo para la próxima vez que uses la etiqueta "code".

Saludos.
90  Programación / Programación C/C++ / Calculadora básica con interfaz [Win API][Terminada] en: 17 Septiembre 2011, 14:35 pm
Bueno, finalmente he acabado una calculadora muy sencilla con interfaz poniendo en práctica lo que he aprendido de la API de Windows; la cuelgo aqui por si le sirve a alguien de ejemplo (todas las funciones y códigos van comentados).

main.cpp:

Código
  1. #include <windows.h>
  2. #include <tchar.h>
  3. #include <stdio.h>
  4. #include <math.h>
  5.  
  6. //ID´s
  7. enum {ID_LABEL, ID_EDIT, ID_BOTONIGUAL, ID_BOTONRESET, ID_BOTONRESET2, ID_BOTONSUMAR, ID_BOTONRESTAR, ID_BOTONMULTIPLICAR, ID_BOTONDIVIDIR, ID_BOTONPORCENTAJE, ID_BOTONPOTENCIA, ID_BOTONRAIZ, ID_BOTONPI, ID_BOTONCOMA, ID_BOTONSIGNO, ID_BOTONCERO, ID_BOTON1, ID_BOTON2, ID_BOTON3, ID_BOTON4, ID_BOTON5, ID_BOTON6, ID_BOTON7, ID_BOTON8, ID_BOTON9};
  8.  
  9.  
  10. //Prototipos
  11. LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
  12.  
  13. void imprimirEdit (int i);                                                  //Funcion que concatena los numeros al hacer clic en los botones
  14. double calcular (double primer_num, double segundo_num, int operacion);     //Funcion que realiza las operaciones
  15.  
  16. HINSTANCE estancia;
  17. HWND label;
  18. HWND edit;
  19. //Iconos
  20. HICON iconoPotencia;
  21. HICON iconoRaiz;
  22. HICON iconoPi;
  23. //Botones
  24. HWND boton1;
  25. HWND boton2;
  26. HWND boton3;
  27. HWND boton4;
  28. HWND boton5;
  29. HWND boton6;
  30. HWND boton7;
  31. HWND boton8;
  32. HWND boton9;
  33. HWND boton0;
  34. HWND botonComa;
  35. HWND botonSigno;
  36. HWND botonIgual;
  37. HWND botonReset;
  38. HWND botonReset2;
  39. HWND botonSumar;
  40. HWND botonRestar;
  41. HWND botonMultiplicar;
  42. HWND botonDividir;
  43. HWND botonPorcentaje;
  44. HWND botonPotencia;
  45. HWND botonRaiz;
  46. HWND botonPi;
  47.  
  48.  
  49. char szClassName[ ] = "CodeBlocksWindowsApp";
  50.  
  51. int WINAPI WinMain (HINSTANCE hThisInstance,
  52.                     HINSTANCE hPrevInstance,
  53.                     LPSTR lpszArgument,
  54.                     int nCmdShow)
  55. {
  56.    HWND hwnd;               /* This is the handle for our window */
  57.    MSG messages;            /* Here messages to the application are saved */
  58.    WNDCLASSEX wincl;        /* Data structure for the windowclass */
  59.  
  60.    estancia = hThisInstance;
  61.  
  62.    /* The Window structure */
  63.    wincl.hInstance = hThisInstance;
  64.    wincl.lpszClassName = szClassName;
  65.    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
  66.    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
  67.    wincl.cbSize = sizeof (WNDCLASSEX);
  68.  
  69.    /* Use default icon and mouse-pointer */
  70.    wincl.hIcon = LoadIcon (estancia, "ICONO");
  71.    wincl.hIconSm = LoadIcon (estancia, "ICONO");
  72.    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
  73.    wincl.lpszMenuName = NULL;                 /* No menu */
  74.    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
  75.    wincl.cbWndExtra = 0;                      /* structure or the window instance */
  76.  
  77.    //Cargamos los iconos de los botones
  78.    iconoPotencia = LoadIcon (estancia, "POTENCIA");
  79.    iconoRaiz = LoadIcon (estancia, "RAIZ");
  80.    iconoPi = LoadIcon (estancia, "PI");
  81.  
  82.    //Color de fondo de la aplicacion
  83.    wincl.hbrBackground = (HBRUSH) CreateSolidBrush (RGB(88, 145, 192));
  84.  
  85.    if (!RegisterClassEx (&wincl))
  86.        return 0;
  87.  
  88.    hwnd = CreateWindowEx (
  89.           0,                   /* Extended possibilites for variation */
  90.           szClassName,         /* Classname */
  91.           "Calculadora by Alien-Z",
  92.           WS_OVERLAPPEDWINDOW, /* default window */
  93.           CW_USEDEFAULT,       /* Windows decides the position */
  94.           CW_USEDEFAULT,       /* where the window ends up on the screen */
  95.           300,                 /* The programs width */
  96.           300,                 /* and height in pixels */
  97.           HWND_DESKTOP,        /* The window is a child-window to desktop */
  98.           NULL,                /* No menu */
  99.           hThisInstance,       /* Program Instance handler */
  100.           NULL                 /* No Window Creation data */
  101.           );
  102.  
  103.    /* Make the window visible on the screen */
  104.    ShowWindow (hwnd, nCmdShow);
  105.  
  106.    /* Run the message loop. It will run until GetMessage() returns 0 */
  107.    while (GetMessage (&messages, NULL, 0, 0))
  108.    {
  109.        /* Translate virtual-key messages into character messages */
  110.        TranslateMessage(&messages);
  111.        /* Send message to WindowProcedure */
  112.        DispatchMessage(&messages);
  113.    }
  114.  
  115.    /* The program return-value is 0 - The value that PostQuitMessage() gave */
  116.    return messages.wParam;
  117. }
  118.  
  119.  
  120. /*  This function is called by the Windows function DispatchMessage()  */
  121.  
  122. LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  123. {
  124.    PAINTSTRUCT ps;
  125.    HDC hdc;
  126.    TCHAR greeting[] = _T("Alien-Z");
  127.    COLORREF color1 = RGB (192, 192, 192);
  128.  
  129.    //Variables
  130.    char cadenaEditMain [31];
  131.    static int operacion;
  132.    static double primer_num, segundo_num, resultado, signo;
  133.  
  134.  
  135.    switch (message)
  136.    {
  137.        case WM_CREATE:
  138.        {
  139.            //Elementos de la calculadora
  140.            label = CreateWindow ("Static", NULL, BS_CENTER | WS_CHILD | WS_VISIBLE, 20, 20, 250, 25, hwnd, 0, estancia, 0);
  141.            edit = CreateWindowEx (WS_EX_CLIENTEDGE, "edit", 0, ES_RIGHT | ES_NUMBER | WS_BORDER | WS_CHILD | WS_VISIBLE, 20, 50, 250, 25, hwnd, (HMENU)ID_EDIT, estancia, 0);
  142.  
  143.            boton1 = CreateWindow ("Button", "1", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 90, 40, 25, hwnd, (HMENU) ID_BOTON1, estancia, 0);
  144.            boton2 = CreateWindow ("Button", "2", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 65, 90, 40, 25, hwnd, (HMENU) ID_BOTON2, estancia, 0);
  145.            boton3 = CreateWindow ("Button", "3", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 110, 90, 40, 25, hwnd, (HMENU) ID_BOTON3, estancia, 0);
  146.            boton4 = CreateWindow ("Button", "4", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 120, 40, 25, hwnd, (HMENU) ID_BOTON4, estancia, 0);
  147.            boton5 = CreateWindow ("Button", "5", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 65, 120, 40, 25, hwnd, (HMENU) ID_BOTON5, estancia, 0);
  148.            boton6 = CreateWindow ("Button", "6", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 110, 120, 40, 25, hwnd, (HMENU) ID_BOTON6, estancia, 0);
  149.            boton7 = CreateWindow ("Button", "7", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 150, 40, 25, hwnd, (HMENU) ID_BOTON7, estancia, 0);
  150.            boton8 = CreateWindow ("Button", "8", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 65, 150, 40, 25, hwnd, (HMENU) ID_BOTON8, estancia, 0);
  151.            boton9 = CreateWindow ("Button", "9", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 110, 150, 40, 25, hwnd, (HMENU) ID_BOTON9, estancia, 0);
  152.            boton0 = CreateWindow ("Button", "0", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 180, 40, 25, hwnd, (HMENU) ID_BOTONCERO, estancia, 0);
  153.            botonComa = CreateWindow ("Button", ",", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 65, 180, 40, 25, hwnd, (HMENU) ID_BOTONCOMA, estancia, 0);
  154.            botonSigno = CreateWindow ("Button", "+/-", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 110, 180, 40, 25, hwnd, (HMENU) ID_BOTONSIGNO, estancia, 0);
  155.            botonSumar = CreateWindow ("Button", "+", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 165, 90, 40, 25, hwnd, (HMENU) ID_BOTONSUMAR, estancia, 0);
  156.            botonRestar = CreateWindow ("Button", "-", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 165, 120, 40, 25, hwnd, (HMENU) ID_BOTONRESTAR, estancia, 0);
  157.            botonMultiplicar = CreateWindow ("Button", "*", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 165, 150, 40, 25, hwnd, (HMENU) ID_BOTONMULTIPLICAR, estancia, 0);
  158.            botonDividir = CreateWindow ("Button", "/", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 165, 180, 40, 25, hwnd, (HMENU) ID_BOTONDIVIDIR, estancia, 0);
  159.            botonPorcentaje = CreateWindow ("Button", "%", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 210, 90, 40, 25, hwnd, (HMENU) ID_BOTONPORCENTAJE, estancia, 0);
  160.            botonPotencia = CreateWindow ("Button", "x ²", BS_ICON | BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 210, 120, 40, 25, hwnd, (HMENU) ID_BOTONPOTENCIA, estancia, 0);
  161.            botonRaiz = CreateWindow ("Button", "Raiz", BS_ICON | BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 210, 150, 40, 25, hwnd, (HMENU) ID_BOTONRAIZ, estancia, 0);
  162.            botonPi = CreateWindow ("Button", "Pi", BS_ICON | BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 210, 180, 40, 25, hwnd, (HMENU) ID_BOTONPI, estancia, 0);
  163.            botonIgual = CreateWindow ("Button", "=", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 220, 40, 25, hwnd, (HMENU) ID_BOTONIGUAL, estancia, 0);
  164.            botonReset = CreateWindow ("Button", "C", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 65, 220, 40, 25, hwnd, (HMENU) ID_BOTONRESET, estancia, 0);
  165.            botonReset2 = CreateWindow ("Button", "CE", BS_DEFPUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 110, 220, 40, 25, hwnd, (HMENU) ID_BOTONRESET2, estancia, 0);
  166.  
  167.            //Cambiar fuente de letra del lablel
  168.            static HFONT hFont = CreateFont (16, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, VARIABLE_PITCH | FF_SWISS, "Comic Sans MS");
  169.            SendMessage(label, WM_SETFONT, (WPARAM) hFont, true);
  170.  
  171.            //Enviar iconos a los botones
  172.            SendMessage(botonPotencia, BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) iconoPotencia);
  173.            SendMessage(botonRaiz, BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) iconoRaiz);
  174.            SendMessage(botonPi, BM_SETIMAGE, (WPARAM) IMAGE_ICON, (LPARAM) iconoPi);
  175.  
  176.            //Bloquear el boton "maximizar"
  177.            DWORD dwStyle = (DWORD)GetWindowLong(hwnd, GWL_STYLE);
  178.            dwStyle &= ~WS_MAXIMIZEBOX;
  179.            SetWindowLong(hwnd, GWL_STYLE, (DWORD)dwStyle);
  180.            RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE | RDW_FRAME | RDW_ERASENOW);
  181.  
  182.            //Bloquear la opcion de cambiarle el tamaño a la ventana
  183.            dwStyle &= ~WS_SIZEBOX;
  184.            SetWindowLong(hwnd, GWL_STYLE, (DWORD)dwStyle);
  185.            RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE | RDW_FRAME | RDW_ERASENOW);
  186.        }
  187.  
  188.        case WM_COMMAND:
  189.        {
  190.            switch (wParam)
  191.            {
  192.                case ID_BOTON1:                  //Al presionar el boton 1 se llama a la funcion "imprimirEdit" y se le envia el valor "1" que es lo que queremos que se concatene a lo que ya haya en el edit
  193.                {
  194.                    imprimirEdit (1);
  195.                    break;
  196.                }
  197.                case ID_BOTON2:
  198.                {
  199.                    imprimirEdit (2);
  200.                    break;
  201.                }
  202.                case ID_BOTON3:
  203.                {
  204.                    imprimirEdit (3);
  205.                    break;
  206.                }
  207.                case ID_BOTON4:
  208.                {
  209.                    imprimirEdit(4);
  210.                    break;
  211.                }
  212.                case ID_BOTON5:
  213.                {
  214.                    imprimirEdit(5);
  215.                    break;
  216.                }
  217.                case ID_BOTON6:
  218.                {
  219.                    imprimirEdit(6);
  220.                    break;
  221.                }
  222.                case ID_BOTON7:
  223.                {
  224.                    imprimirEdit(7);
  225.                    break;
  226.                }
  227.                case ID_BOTON8:
  228.                {
  229.                    imprimirEdit(8);
  230.                    break;
  231.                }
  232.                case ID_BOTON9:
  233.                {
  234.                    imprimirEdit(9);
  235.                    break;
  236.                }
  237.                case ID_BOTONCERO:
  238.                {
  239.                    imprimirEdit(0);
  240.                    break;
  241.                }
  242.                case ID_BOTONCOMA:
  243.                {
  244.                    GetWindowText (edit, cadenaEditMain, 30);        //Se obtiene lo que hay en el edit y se guarda en "CadenaEditMain"
  245.                    if (strstr (cadenaEditMain, ".") == NULL)        //Analizamos "cadenaEditMain" y si no posee una coma se ejecuta lo que hay dentro del if (en caso de que ya tenga una coma no hace nada)
  246.                    {
  247.                        strcat (cadenaEditMain, ".");                //Se le añade una coma a lo que hay en "CadenaEditMain"
  248.                        SetWindowText (edit, cadenaEditMain);        //Se imprime el nuevo numero en el edit
  249.                    }
  250.                    break;
  251.                }
  252.                case ID_BOTONSIGNO:                                  //Boton que cambia el signo del numero
  253.                {
  254.                    GetWindowText (edit, cadenaEditMain, 30);        //Se obtiene lo que hay en el edit y se guarda en "CadenaEditMain"
  255.                    signo = atof (cadenaEditMain);                   //Transforma la cadena obtenida en un double y lo guarda en "signo"
  256.                    signo *= -1;                                     //Se multiplica el numero por -1 (si es positivo se quedara negativo, y viceversa)
  257.                    sprintf (cadenaEditMain, "%f", signo);           //Se transforma el double obtenido en una cadena y se guarda en "cadenaEditMain"
  258.                    SetWindowText (edit, cadenaEditMain);            //Se imprime el nuevo numero en el edit
  259.                    break;
  260.                }
  261.                case ID_BOTONSUMAR:
  262.                {
  263.                    operacion = 1;                                    //Cambia el valor de "operacion" para indicar que se va a sumar
  264.                    GetWindowText (edit, cadenaEditMain, 30);         //Obtiene el numero ingresado en el edit
  265.                    primer_num = atof (cadenaEditMain);               //Transforma la cadena obtenida en un double y lo guarda en "primer_num"
  266.                    SetWindowText (edit, "");                         //Limpia el edit
  267.                    break;
  268.                }
  269.                case ID_BOTONRESTAR:
  270.                {
  271.                    operacion = 2;                                    //Cambia el valor de "operacion" para indicar que se va a restar
  272.                    GetWindowText (edit, cadenaEditMain, 30);
  273.                    primer_num = atof (cadenaEditMain);
  274.                    SetWindowText (edit, "");
  275.                    break;
  276.                }
  277.                case ID_BOTONMULTIPLICAR:
  278.                {
  279.                    operacion = 3;                                    //Cambia el valor de "operacion" para indicar que se va a multiplicar
  280.                    GetWindowText (edit, cadenaEditMain, 30);
  281.                    primer_num = atof (cadenaEditMain);
  282.                    SetWindowText (edit, "");
  283.                    break;
  284.                }
  285.                case ID_BOTONDIVIDIR:
  286.                {
  287.                    operacion = 4;                                    //Cambia el valor de "operacion" para indicar que se va a dividir
  288.                    GetWindowText (edit, cadenaEditMain, 30);
  289.                    primer_num = atof (cadenaEditMain);
  290.                    SetWindowText (edit, "");
  291.                    break;
  292.                }
  293.                case ID_BOTONPORCENTAJE:
  294.                {
  295.                    operacion = 5;                                    //Cambia el valor de "operacion" para indicar que vamos a hallar el porcentaje
  296.                    GetWindowText (edit, cadenaEditMain, 30);
  297.                    primer_num = atof (cadenaEditMain);
  298.                    SetWindowText (edit, "");
  299.                    break;
  300.                }
  301.                case ID_BOTONPOTENCIA:
  302.                {
  303.                    operacion = 6;                                    //Cambia el valor de "operacion" para indicar que vamos a hallar una potencia
  304.                    GetWindowText (edit, cadenaEditMain, 30);
  305.                    primer_num = atof (cadenaEditMain);
  306.                    SetWindowText (edit, "");
  307.                    SetWindowText (label, "¿A cuánto está elevado el número?");
  308.                    break;
  309.                }
  310.                case ID_BOTONRAIZ:
  311.                {
  312.                    operacion = 7;                                    //Cambia el valor de "operacion" para indicar que vamos a hallar la raiz
  313.                    GetWindowText (edit, cadenaEditMain, 30);
  314.                    primer_num = atof (cadenaEditMain);
  315.                    SetWindowText (edit, "");
  316.                    SetWindowText (label, "¿A cuánto está elevada la raiz?");
  317.                    break;
  318.                }
  319.                case ID_BOTONPI:
  320.                {
  321.                    SetWindowText (edit, "3.141592653589793");        //Imprime en el edit el valor de PI
  322.                    break;
  323.                }
  324.                case ID_BOTONIGUAL:
  325.                {
  326.                    GetWindowText (edit, cadenaEditMain, 30);         //Obtiene el numero ingresado en el edit
  327.                    segundo_num = atof (cadenaEditMain);              //Transforma la cadena obtenida en un double y lo guarda en "segundo_num"
  328.                    resultado = calcular (primer_num, segundo_num, operacion); //El resultado se obtiene apartir de la funcion "calcular", a esta funcion se le envian las variables "primer_num", "segundo_num" y "operacion"
  329.                    sprintf (cadenaEditMain, "%f", resultado);        //Se transforma el double obtenido en una cadena y se guarda en "cadenaEditMain"
  330.                    SetWindowText (edit, cadenaEditMain);             //Se imprime en el edit la cadena donde se encuentra el resultado
  331.                    //Reseteamos las variables
  332.                    primer_num = 0;
  333.                    segundo_num = 0;
  334.                    operacion = 0;
  335.                    break;
  336.                }
  337.                case ID_BOTONRESET:                                  //Boton que limpia las variables y datos para calcular de nuevo
  338.                {
  339.                    primer_num = 0;
  340.                    segundo_num = 0;
  341.                    operacion = 0;
  342.                    SetWindowText (edit, "");
  343.                    SetWindowText (label, "");
  344.                    break;
  345.                }
  346.                case ID_BOTONRESET2:                                 //Boton que borra solo el ultimo numero introducido
  347.                {
  348.                    segundo_num = 0;
  349.                    SetWindowText (edit, "");
  350.                    break;
  351.                }
  352.  
  353.                break;
  354.            }
  355.            break;
  356.        }
  357.  
  358.        case WM_PAINT:
  359.        {
  360.            hdc = BeginPaint(hwnd, &ps);
  361.            SetBkColor (hdc, RGB(88, 145, 192));
  362.            SetTextColor (hdc, color1);
  363.            TextOut(hdc, 230, 240, greeting, _tcslen(greeting));
  364.            EndPaint (hwnd, &ps);
  365.            break;
  366.        }
  367.  
  368.        case WM_DESTROY:
  369.            PostQuitMessage (0);
  370.            break;
  371.        default:
  372.            return DefWindowProc (hwnd, message, wParam, lParam);
  373.    }
  374.  
  375.    return 0;
  376. }
  377.  
  378. void imprimirEdit (int i)                        //Funcion que concatena los numeros al hacer clic en los botones
  379. {
  380.    char cadenaEdit [31];                        //Variable donde se guardara lo que hay en el edit (no es la misma variable que cadenaEditMain)
  381.    char numero [3];                             //Variable donde se guardara el numero de la tecla presionada
  382.    sprintf (numero, "%i", i);                   //Se transforma el numero (i) del tipo entero a una cadena
  383.  
  384.    GetWindowText (edit, cadenaEdit, 30);        //Se obtiene lo que hay en el edit y se guarda en "CadenaEdit"
  385.    strcat (cadenaEdit, numero);                 //Se une lo que hay en "CadenaEdit" y lo que hay en "numero" (es decir, se une lo que habia en el edit y el numero de la tecla presionada) y se queda guardada la nueva cifra en "cadenaEdit"
  386.    SetWindowText (edit, cadenaEdit);            //Se imprime el nuevo numero en el edit
  387. }
  388.  
  389. double calcular (double primer_num, double segundo_num, int operacion)   //Funcion que realiza las operaciones
  390. {
  391.    double resultado;                                                    //Variable donde se guardara el resultado (sera lo que se retorne)
  392.  
  393.    switch (operacion)                                                   //Ver lo que hay en la variable "operacion"
  394.    {
  395.        case 1:                                                          //En caso de que sea "1" se suma el primer numero al segundo
  396.        {
  397.            resultado = primer_num + segundo_num;
  398.            break;
  399.        }
  400.        case 2:                                                          //En caso de que sea "2" se le resta el segundo numero al primero
  401.        {
  402.            resultado = primer_num - segundo_num;
  403.            break;
  404.        }
  405.        case 3:                                                          //En caso de que sea "3" se multiplica el primer numero por el segundo
  406.        {
  407.            resultado = primer_num * segundo_num;
  408.            break;
  409.        }
  410.        case 4:                                                          //En caso de que sea "4" se divide el primer numero entre el segundo
  411.        {
  412.            resultado = primer_num / segundo_num;
  413.            break;
  414.        }
  415.        case 5:                                                          //En caso de que sea "5" se haya el tanto por cierto (primer numero) del segundo numero
  416.        {
  417.            resultado = (primer_num * segundo_num) / 100;
  418.            break;
  419.        }
  420.        case 6:                                                          //En caso de que sea "6" se obtiene la potencia del primer numero elevado al segundo
  421.        {
  422.            resultado = pow (primer_num, segundo_num);
  423.            break;
  424.        }
  425.        case 7:                                                          //En caso de que sea "7" se obtiene la raiz del primer numero (el segundo define si dicha raiz es cubica, cuadrada...)
  426.        {
  427.            resultado = pow (primer_num, 1/segundo_num);
  428.            break;
  429.        }
  430.        default:                                                         //Si no se realiza ninguna operacion se imprime en el label un mensaje, con esto sabriamos si ha habido algun error
  431.        {
  432.            SetWindowText (label, "No se ha realizado ninguna operacion.");
  433.            break;
  434.        }
  435.    }
  436.  
  437.    SetWindowText (label, "");                                           //Limpiamos el label
  438.    return resultado;                                                    //Devuelve el resultado
  439. }
  440.  

recursos.rc:

Código
  1. ICONO ICON "icono.ico"
  2. POTENCIA ICON "potencia.ico"
  3. RAIZ ICON "raiz.ico"
  4. PI ICON "pi.ico"
  5.  

Iconos (no he encontrado ningún servidor para subir .ico que acepte fondo transparente asi que he optado por MU): http://www.megaupload.com/?d=ZMPELBPE

Notas:
-Los iconos deben estar dentro de la carpeta del proyecto.
-Aun no he solucionado un pequeño inconveniente y es que solo opera con los dos últimos números introducidos, por ejemplo, si presionas 2+2*5 el resultado será 10 porque la última operación es 2*5, pero si después de cada cálculo presionas el botón igual hará todas las operaciones que le mandes sin problema.
-La función del botón "porcentaje" suele variar según la calculadora, en este caso hayas el X por ciento de Y, por ejemplo, 50 % 10 = 5 (el 50 por ciento de 10 es 5).


Espero que le sirva a alguien. Saludos.
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18 19
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines