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ú

Temas - Bob1098

#1
Programación C/C++ / Suma de angulos. Typedef
31 Agosto 2016, 20:22 PM
Estoy implementando un tipo que almacene numeros entre 0 y 255, es decir de 1 byte de tamaño.

Para ello he escrito este codigo en un ejemplo con angulos, pero al ser realmente tipo char obtengo resultados como caracteres, y si hago un casting a int en el cout obtengo resultados numericos pero sin sentido:

Código (cpp) [Seleccionar]

#include <iostream>
#include <cmath>

using namespace std;

typedef char byte;

struct stAngulo {
short grados;
byte minutos;
byte segundos;
};

stAngulo operator+(stAngulo a1, stAngulo a2); // a1+a2
stAngulo operator-(stAngulo a1, stAngulo a2); // a1-a2

int main(int argc, char *argv[]) {
stAngulo angulo1 = { 23, 15, 20 }, angulo2 = { 2, 35, 29 };
stAngulo suma = angulo1 + angulo2;

cout << "Grados: " << suma.grados << "\n\nMinutos: " << suma.minutos << "\n\nSegundos: " << suma.segundos << endl;

cin.get();
return 0;
}

stAngulo operator+ (stAngulo a1, stAngulo a2) {
stAngulo temp = {
a1.grados + a2.grados,
a1.minutos + a2.minutos,
a1.segundos + a2.segundos,
};

do {
++temp.minutos;
temp.segundos -= 60;
} while (temp.segundos >= 60);

do {
++temp.grados;
temp.minutos -= 60;
} while (temp.minutos >= 60);

return temp;
}

stAngulo operator-(stAngulo a1, stAngulo a2) {
stAngulo temp = {
a1.grados - a2.grados,
a1.minutos - a2.minutos,
a1.segundos - a2.segundos,
};

do {
--temp.minutos;
temp.segundos = abs(temp.segundos);
} while (temp.segundos <= 0);

do {
--temp.grados;
temp.minutos = abs(temp.minutos);
} while (temp.minutos <= 0);

return temp;
}


Alguna manera de poder usar int de tamaño 1 byte? Es solo una cuestión de optimización de memoria.
#2
Tenía una dudilla sobre que es más rápido y/o fácil para el compilador.

Si tengo una función que opere con unos datos de entrada (una suma por ejemplo), es mejor sobrecargar los distintos tipos (int, float, double...) o dejar que el compilador los convierta por si solo?. Según creo es mejor hacer una sola función con float o double que es más "generico".

Gracias de antemano.
#3
Hola a todos. Resulta que estaba instalando las librerias de SDL2 en Visual Studio 2015 y tuve un error del linker:

Gravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado de supresión
Error   LNK2019   símbolo externo _SDL_main sin resolver al que se hace referencia en la función _main_utf8   PruebasSDL   D:\Documentos\Programacion\C++\Proyectos\PruebasSDL\PruebasSDL\PruebasSDL\SDL2main.lib(SDL_windows_main.obj)   1   


Gravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado de supresión
Error   LNK1120   1 externos sin resolver   PruebasSDL   D:\Documentos\Programacion\C++\Proyectos\PruebasSDL\PruebasSDL\Debug\PruebasSDL.exe   1



He añadido las bibliotecas tanto al linker como al compilador, al igual que los archivos de cabecera. He leido por ahi que peude deberse a un nombre mal escrito o usado, pero he comprobado todo y esta bien. Alguna idea?
#4
Java / Interfaces en Java
6 Enero 2016, 23:45 PM
Hola, me preguntaba cual es el uso real y práctico de las interfaces en java, es decir, únicamente se utilizan para hacer una "esquemilla" de las clases en java?. No comprendo el sentido que tienen, no es más rápido y cómodo definir los métodos directamente en la clase en lugar de declararlos (no definirlos) previamente en una interfaz?

Espero que alguien pudiera resolverme esta dudilla tonta.

Un saludo.
#5
Programación C/C++ / Mas problemas con Win32
11 Septiembre 2015, 19:54 PM
Bueno, siento ser tan pesado con este tema pero es que ahora no se que me falla...

He hecho una librería con una clase para agilizar el proceso de creación de la ventana, aquí dejo los códigos:

Win32Lib.h
Código (cpp) [Seleccionar]

#include <Windows.h>

namespace Win32
{
class Window
{
public:
HWND hWnd;

Window();

bool center();

void create(int height, int width, int x, int y,
DWORD dwStyle, HBRUSH color, HCURSOR cursor, HICON icon, HINSTANCE hInstance, HWND hwnd, HWND hwndParent,
LPCWSTR CLASS_NAME, LPCWSTR menu, LPCWSTR windowName, WNDPROC winProc);
void show(int nCmdShow);

};
}


Win32Lib.cpp

Código (cpp) [Seleccionar]

#include "Win32Lib.h"

namespace Win32
{
Window::Window() {};

bool Window::center()
{
int x, y;
RECT rc;

GetWindowRect(hWnd, &rc);
x = (GetSystemMetrics(SM_CXSCREEN) - (rc.right - rc.left)) / 2;
y = (GetSystemMetrics(SM_CYSCREEN) - (rc.bottom - rc.top)) / 2;

return SetWindowPos(hWnd, 0, x, y, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
}

void Window::create(int height, int width, int x, int y,
DWORD dwStyle, HBRUSH color, HCURSOR cursor, HICON icon, HINSTANCE hInstance, HWND hwnd, HWND hwndParent,
LPCWSTR CLASS_NAME, LPCWSTR menu, LPCWSTR windowName, WNDPROC winProc)
{
WNDCLASS wc;

hWnd = hwnd;
wc.hbrBackground = color;
wc.hCursor = cursor;
wc.hIcon = icon;
wc.hInstance = hInstance;
wc.lpfnWndProc = winProc;
wc.lpszClassName = CLASS_NAME;
wc.lpszMenuName = menu;
RegisterClass(&wc);

hwnd = CreateWindowEx(0, CLASS_NAME, windowName, dwStyle, x, y, width, height, hwndParent, NULL, hInstance, NULL);
}

void Window::show(int nCmdShow)
{
ShowWindow(hWnd, nCmdShow);
}
}


Y bueno, aquí esta el código de la aplicación, el caso es que en cuanto declaro la clase con un constructor vacio me dice: "Error (activo) no existe ningún constructor adecuado para convertir de "Win32::Window *" a "Win32::Window"   Win32Testing   d:\Documentos\Programacion\C++\Proyectos\Win32Testing\Win32Testing\Main.cpp   19"

Código (cpp) [Seleccionar]

#ifndef UNICODE
#define UNICODE
#endif

#include <Windows.h>
#include <Win32Lib.h>

using namespace Win32;

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
HWND hwnd = NULL;
LPCWSTR CLASS_NAME = L"MainWindow";
Window mainWindow = new Window();

MSG msg = {};

mainWindow.show(nCmdShow);

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}

return DefWindowProc(hwnd, uMsg, wParam, lParam);
}



A que se puede deber? =S
#6
Buenas, mi duda consiste en como puedo crear varias ventanas utilizando la API de windows. Por ejemplo, creo las dos ventanas, y una llama a la otra desde un menu. He intentado hacer algo pero ni si quiera compila (si compila, pero en realidad no me compila nada por lo que no se cual es error...). Agradecería muchísimo que alguien "veterano" en el tema me pueda ayudar...

Código (cpp) [Seleccionar]

// Main File
// Build Date: 10-09-2015

#ifndef UNICODE
#define UNICODE
#endif

#include <Windows.h>

LRESULT CALLBACK MainWindowProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ParentWindowProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
const wchar_t MAIN_CLASS_NAME[] = L"MainWindow";
const wchar_t PARENT_CLASS_NAME[] = L"ParentWindow";
HWND mainHwnd, parentHwnd;
WNDCLASS mainWc = {}, parentWc = {};
MSG msg = {};

//MainHwnd
mainWc.hbrBackground = (HBRUSH)COLOR_WINDOW;
mainWc.hInstance = hInstance;
mainWc.lpfnWndProc = MainWindowProc;
mainWc.lpszClassName = MAIN_CLASS_NAME;
RegisterClass(&mainWc);

mainHwnd = CreateWindowEx(0, MAIN_CLASS_NAME, L"Ventana principal", WS_OVERLAPPEDWINDOW, 100, 100, 800, 600, NULL, NULL, hInstance, NULL);
if (!mainHwnd) return 1;
//ParentHwnd
parentWc.hbrBackground = (HBRUSH)COLOR_WINDOWTEXT;
parentWc.hInstance = hInstance;
parentWc.lpfnWndProc = ParentWindowProc;
parentWc.lpszClassName = PARENT_CLASS_NAME;
RegisterClass(&parentWc);

parentHwnd = CreateWindowEx(0, PARENT_CLASS_NAME, L"Ventana secundaria", WS_OVERLAPPEDWINDOW, 300, 300, 800, 600, NULL, NULL, hInstance, NULL);
if (!parentHwnd) return 2;

ShowWindow(mainHwnd, nCmdShow);

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return 0;
}

LRESULT CALLBACK MainWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);

return 0;
}

return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

LRESULT CALLBACK ParentWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);

return 0;
}

return DefWindowProc(hwnd, uMsg, wParam, lParam);
}


Si compilo esto me pone "Compilación correcta" en VS 2015 pero luego no me encuentra el archivo ejecutable lo que indica que no se compiló...

Un saludo y gracias de antemano.
#7
Estoy revisando el tema de los punteros y la memoria dinámica en C, y me han surgido algunas dudas. Si declaro un array de int estático de digamos, 100 elementos, y no le doy ningún valor, ese array estará ocupando 400 bytes en la memoria según mi código:

Código (cpp) [Seleccionar]

#include <stdio.h>

int main(int argc, char *argv[])
{
int array[100];

printf("%i", sizeof(array));
getch();
return 0;
}


Es decir independientemente de que el array estático este lleno o no, siempre va ocupar 400 bytes. Ahora bien, supongo que para eso existe la memoria dinámica. Si quiere tener un array que puede tener como máximo 100 elementos, lo puedo hacer con este código:

Código (cpp) [Seleccionar]

       int *array = (int*)malloc(400);


Sin embargo, si quiero averiguar su tamaño en memoria siempre me va a dar 4 bytes, ya que un puntero de tipo int siempre va a ocupar 4 bytes. Entonces, ¿cómo sé que esos 400 bytes solo están reservados y no se están ocupando?

Agradecería una respuesta clara y bien explicada, gracias.
#8
Buenas, estuve probando un poco el tema de los sockets y logre conectar dos aplicaciones desde 2 pc distintos en la misma red local, utilizando la ip (192.168.0.x). Quisiera saber si es esto posible haciendo que la conexión sea a través de internet utilizando la ip publica.
#9
Lo que pretendo hacer es que el botón del menu "Salir", haga la misma función que si intento cerrar la aplicación, sin tener que repetir el código. Quiero saltar directamente al mensaje WM_CLOSE.

MainWindow.cpp:
Código (cpp) [Seleccionar]
// MainWindow
// Build Date: 02-08-2015

#ifndef UNICODE
#define UNICODE
#endif

#include <Windows.h>
#include "Resources.h"

#define SCREEN_HEIGHT 600
#define SCREEN_WIDTH 800

LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
PCWSTR CLASS_NAME = L"MainWindow";

HWND hwnd;
MSG msg;
WNDCLASS wc = {};

wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.hInstance = hInstance;
wc.lpfnWndProc = WindowProc;
wc.lpszClassName = CLASS_NAME;
wc.lpszMenuName = MAKEINTRESOURCE(ID_MENU);
RegisterClass(&wc);

hwnd = CreateWindowEx(0, CLASS_NAME, L"Pruebas Win32", WS_OVERLAPPEDWINDOW, 200, 200, SCREEN_WIDTH, SCREEN_HEIGHT,
NULL, NULL, hInstance, NULL);
if (!hwnd) return 0;

ShowWindow(hwnd, nCmdShow);

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return 0;
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg) {
case WM_CLOSE:
if (MessageBox(hwnd, L"¿Realmente desea salir?", L"Salir", MB_OKCANCEL) == IDOK) DestroyWindow(hwnd);

return 0;

case WM_COMMAND:
switch (LOWORD(wParam))
{
case ID_EXIT:
// Aqui quiero que salte a WM_CLOSE

return 0;
}

return 0;
case WM_DESTROY:
PostQuitMessage(0);

return 0;
}

return DefWindowProc(hwnd, uMsg, wParam, lParam);
}


Resources.h
Código (cpp) [Seleccionar]
#define ID_MENU 100

//File
#define ID_NEW 101
#define ID_OPEN 102
#define ID_SAVE 103
#define ID_CLOSE 104
#define ID_EXIT 105


Resources.rc
#include "Resources.h"

ID_MENU MENU
BEGIN
POPUP L"Archivo"
BEGIN
MENUITEM L"Nuevo" ID_NEW
MENUITEM L"Abrir" ID_OPEN
MENUITEM L"Guardar" ID_SAVE
MENUITEM L"Cerrar" ID_CLOSE
MENUITEM SEPARATOR
MENUITEM L"Salir" ID_EXIT
END
END


Se me ocurre la solcion de aplicar una sentencia goto dentro de WM_CLOSE, pero me parece un poco perrenco. Alguna otra idea?
#10
Java / Importar librerias en Eclipse
3 Abril 2015, 17:35 PM
Hola, espero que puedan resolverme esta duda. Tengo una librería llamada "Algoritmos.jar" con el siguiente código:


public class Algoritmos {
public void Burbuja(int lista[], boolean ascendente) {
int aux;

if(ascendente) {
for(int i=1; i<lista.length; i++) {
for(int j=0; j<lista.length-1; j++) {
if(lista[j] > lista[j+1]) {
aux = lista[j];
lista[j] = lista[j+1];
lista[j+1] = aux;
}
}
}
}
else {
for(int i=1; i<lista.length; i++) {
for(int j=0; j<lista.length-1; j++) {
if(lista[j] < lista[j+1]) {
aux = lista[j];
lista[j] = lista[j+1];
lista[j+1] = aux;
}
}
}
}
}
}



Supuestamente ya he incluido dicha librería en Eclipse, dentro del proyecto en una carpeta llamada "Referenced Libraries", ya que la he incluido como una librería externa. Mi duda es: ¿Cómo la utilizo en mi programa? Sé que tengo que utilizar el comando import, pero no se muy bien como...

Gracias de antemano. Un saludo.
#11
Java / Compilar ejecutable en Eclipse
6 Marzo 2015, 21:19 PM
Hola a todos, hoy estaba programando en java con Eclipse y me surgió una duda. Con cualquier compilador de c++ al compilar un programa en consola obtengo un archivo .exe de salida, que al ejecutarlo es una consola. Sin embargo, al compilar en Eclipse un programa en consola, el programa se ejecuta directamente en la consola del IDE y lo único que obtengo de salida es un .class  con la clase que tiene la función main. Como puedo obtener un fichero ejecutable, ya sea .exe o .jar que sea similar al que obtengo con c++?

Gracias anticipadamente. Un saludo
#12
Foro Libre / Opinión acerca de Li-Fi
6 Marzo 2015, 17:56 PM
Me gustaría saber vuestra opinión a cerca de la novedosa tecnología de Li-Fi, que al descubrir que existía y está en fase experimental, me ha llamado mucho la atención  :o.

Para los que no saben que es pueden buscar en google o en Wikipedia(//http://es.wikipedia.org/wiki/Li-Fi).

Según el Li-Fi, podemos tener routers Li-Fi con una simple farola?  =S
#13
.NET (C#, VB.NET, ASP) / Problema con Objeto C#
29 Diciembre 2014, 15:32 PM
Hola, bueno estaba tratando de hacer un programilla en C# que sirviera para resolver sudokus, y de momento solo llevo hecho el cronometro de tiempo y los botones para controlar si comenzar, pausar o detener el juego. Para generar los números he pensado almacenarlos en una matriz int, y para mostrarlos pensé que sería mas cómodo utilizar una matriz de la clase TextBox en la que guardo todos los controles que tengo donde quiero mostrar los números, y asi con un ciclo for poder pasar de un textbox a otro sin problema.

La cuestión es que al darle valores a la propiedad Text de los TextBox almacenados en la matriz obtengo una excepción.

Código:
Código (cpp) [Seleccionar]

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Sudoku
{
    public partial class Form1 : Form
    {
        byte s, m, h;
        bool paused = false;
        bool gameStarted = false;
        int[,] numeros = new int[9,9];
        TextBox[,] Numeros = new TextBox[9, 9];

        public Form1()
        {
            InitializeComponent();
        }

        private void UnirTextBox()
        {
            //Celda 1
            Numeros[0, 0] = nTextBox1;
            Numeros[0, 1] = nTextBox2;
            Numeros[0, 2] = nTextBox3;
            Numeros[1, 0] = nTextBox4;
            Numeros[1, 1] = nTextBox5;
            Numeros[1, 2] = nTextBox6;
            Numeros[2, 0] = nTextBox7;
            Numeros[2, 1] = nTextBox8;
            Numeros[2, 3] = nTextBox9;

            //Celda 2
            Numeros[0, 3] = nTextBox10;
            Numeros[0, 4] = nTextBox11;
            Numeros[0, 5] = nTextBox12;
            Numeros[1, 3] = nTextBox13;
            Numeros[1, 4] = nTextBox14;
            Numeros[1, 5] = nTextBox15;
            Numeros[2, 3] = nTextBox16;
            Numeros[2, 4] = nTextBox17;
            Numeros[2, 5] = nTextBox18;

            //Celda 3
            Numeros[0, 6] = nTextBox19;
            Numeros[0, 7] = nTextBox20;
            Numeros[0, 8] = nTextBox21;
            Numeros[1, 6] = nTextBox22;
            Numeros[1, 7] = nTextBox23;
            Numeros[1, 8] = nTextBox24;
            Numeros[2, 6] = nTextBox25;
            Numeros[2, 7] = nTextBox26;
            Numeros[2, 8] = nTextBox27;
        }

        private void GenerarNumeros()
        {
            Random rnd = new Random();
            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 9; j++)
                {
                    numeros[i, j] = rnd.Next(1, 9);
                    Numeros[i, j].Text = numeros[i, j].ToString(); //Aquí es el punto donde obtengo el error de ejecución.
                }
            }
        }

        private void Preparacion()
        {
            UnirTextBox();
            GenerarNumeros();
        }

        private void startButton_Click(object sender, EventArgs e)
        {
            Preparacion();
            s = 1; m = 0; h = 0;
            timeTextBox.Text = "0:00:00";
            timer1.Start();
            gamePanel.Enabled = true;
            gameStarted = true;
        }

        private void pauseButton_Click(object sender, EventArgs e)
        {
            if (gameStarted)
            {
                if (!paused)
                {
                    timer1.Stop();
                    gamePanel.Enabled = false;
                    paused = true;
                }
                else
                {
                    timer1.Start();
                    gamePanel.Enabled = true;
                    paused = false;
                }
            }
        }

        private void cancelButton_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            gamePanel.Enabled = false;
            timeTextBox.Text = "0:00:00";
            s = 0; m = 0; h = 0;
            gameStarted = false;
        }

        private void checkButton_Click(object sender, EventArgs e)
        {

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (m < 10)
            {
                if (s < 10) timeTextBox.Text = h + ":" + "0" + m + ":" + "0" + s;
                else timeTextBox.Text = h + ":" + "0" + m + ":" + s;
            }
            else
            {
                if (s < 10) timeTextBox.Text = h + ":" + m + ":" + "0" + s;
                else timeTextBox.Text = h + ":" + m + ":" + s;
            }
            s++;
            if (s == 60)
            {
                s = 0;
                m++;
            }
            if (m == 60)
            {
                m = 0;
                h++;
            }
        }
    }
}


La excepción dice así:
Excepción no controlada del tipo 'System.NullReferenceException' en Sudoku.exe

Información adicional: Referencia a objeto no establecida como instancia de un objeto.

Espero que sepan a que se debe. Y ya de paso si conocen algún otro método para guardar los textbox que no sea manualmente como yo he hecho =P.
#14
Programación C/C++ / Recursos Win32
30 Noviembre 2014, 12:21 PM
Buenas, últimamente estoy tratando el tema de la API de Windows y programando un poco en C++ para Windows con esta API. El problema viene a la hora de utilizar recursos, por ejemplo para poner un menú, o un icono todos recomiendan hacerlos con recursos, pero yo por motivos que aun no alcanzo a entender no puedo, no me compila bien, da errores, etc.

Hay alguna manera de hacer todo eso SIN recursos?
#15
Hola buenas a todos, me gustaría saber si conocen algún tipo de curso o tutorial sobre el tema que sea completo y venga bien explicado, ya que la mayoría de los que he visto lo hacen cada uno de una forma distinta, y no lo explican adecuadamente. Me gustaría aprender al menos unas bases de esto para poder utilizar posteriormente librerías gráficas del tipo DirectX sobre c/c++.

Un saludo y gracias de antemano.
#16
Programación C/C++ / Más punteros...
16 Septiembre 2014, 16:36 PM
Sigo con el tema de los punteros y sigo sin entender que falla ahora.
Tengo el siguiente ejercicio:

"3.Implementar en una función el siguiente algoritmo para ordenar un array de enteros.
La idea es recorrer simultáneamente el array desde el principio y desde el final, comparando los elementos. Si los valores comparados no están en el orden adecuado, se intercambian y se vuelve a empezar el bucle. Si están bien ordenados, se compara el siguiente par.
El proceso termina cuando los punteros se cruzan, ya que eso indica que hemos comparado la primera mitad con la segunda y todos los elementos estaban en el orden correcto.
Usar una función con tres parámetros:
void Ordenar(int* vector, int nElementos, bool ascendente);
De nuevo, no se deben usar enteros, sólo punteros y aritmética de punteros."

El problema esta en que los elementos no parecen intercambiarse ni ordenarse, e incluso algunos toman el valor del estilo de -88483432.

Este es mi código:

Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

void Ordenar(int*, int, bool);

int main() {
int lista[10] = { 1, 4, 2, 5, 3, 7, 6, 9, 8, 10 };

for (int i = 0; i <= 9; i++) {
cout << lista[i] << " ";
}
cout << endl;
Ordenar(lista, 10, 0);
for (int i = 0; i <= 9; i++) {
cout << lista[i] << " ";
}

cin.sync();
cin.get();
return 0;
}

void Ordenar(int *vector, int nElementos, bool ascendente) {
int *q, *p;

p = vector;
q = &vector[nElementos];
if (ascendente) {
while (p <= q) {
if (*p > *q) {
*p += *q;
*q = *p - *q;
*p -= *q;
}
p++; q--;
}
}
else {
while (p <= q) {
if (*p < *q) {
*p += *q;
*q = *p - *q;
*p -= *q;
}
p++; q--;
}
}
}
#17
Hola a todos, estoy intentando resolver un ejercicio de c++ que dice lo siguiente:

"Escribir un programa con una función que calcule la longitud de una cadena de caracteres. El nombre de la función será LongitudCadena, debe devolver un int, y como parámetro de entrada debe tener un puntero a char.
En esta función no se pueden usar enteros para recorrer el array, usar sólo punteros y aplicar aritmética de punteros.
En main probar con distintos tipos de cadenas: arrays y punteros."

Supongo que no vale esto de recorrer el array con un entero y luego devolver dicho entero, por tanto he probado con esto:

Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int LongitudCadena(char*);

int main() {
char cadena[10];
char *pCadena = 0;

cout << "Introduce una cadena como array: ";
cin >> cadena;
cout << "Su tamano es: " << LongitudCadena(cadena) << ". " << endl;
cout << "\nIntroduce una cadena como puntero: ";
cin >> *pCadena;
cout << "Su tamano es: " << LongitudCadena(pCadena) << ". " << endl;

cin.sync();
cin.get();
return 0;
}

int LongitudCadena(char *a) {
char *p, *q;
p = a;
q = a;
while (*a) q++;
return q-p;
}


Seguro que hay una forma mucho mas simple, pero aun soy nuevo con esto de los punteros y no los comprendo muy bien. Espero que se pueda encontrar el fallo.

Un saludo.
#18
Desarrollo Web / Duda HTML
23 Agosto 2014, 20:05 PM
Buenas a todos. Estoy elaborando una pequeña web en la que me ha surgido el siguiente problema:

Resulta que tengo a la izquierda un menú con diferentes links, y quiero que al hacer click en ellos se me muestre en una celda de una tabla determinada un documento HTML. Es esto posible? Que maneras hay de hacerlo?. Aquí el código:

Código (html4strict) [Seleccionar]

<html>
<head>
<title>MindElf CoD</title>
<link rel="stylesheet" type="text/css" href="Estilo.css">
</head>

<body>
<table border="1px" width="100%" height="100%">
<tr>
<td height="30%">

</td>
</tr>
<tr>
<td>
<table border="1px" width="100%" height="100%">
<tr>
<td width="20%">
<table width="100%" height="100%">
<tr>
<td class="menu">
Portal
</td>
<tr>
<tr>
<td class="menu">
Galer&iacute;a
</td>
<tr>
<tr>
<td class="menu">
Videos
</td>
<tr>
<tr>
<td class="menu">
<a href="https://www.youtube.com/user/Mindelfcod">YouTube</a>
</td>
<tr>
<tr>
<td class="menu">
<a href="https://twitter.com/MindelfCoD">Twitter</a>
</td>
<tr>
<tr>
<td class="menu">
Mi clan
</td>
<tr>
</table>
</td>
<td>

</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>


Y esta es la web:

#19
Programación C/C++ / Palindromo C++
22 Agosto 2014, 22:43 PM
Hola a todos. Quería comentarles una duda que tengo intentando resolver un ejercicio en C++. El enunciado se incluye en el código. El problema es que creo que esta todo bien y correcto, pero el resultado es que la función siempre devuelve true, o al menos eso parece. Aquí esta el código.


/*
5.Hacer un programa que contenga una función con el prototipo bool Palindromo(char palabra[40]);.
La función debe devolver true si la palabra es un palíndromo, y false si no lo es.
Una palabra es un palíndromo si cuando se lee desde el final al principio es igual que leyendo desde el principio,
por ejemplo: "Otto", o con varias palabras "Anita lava la tina", "Dábale arroz a la zorra el abad".
En estos casos debemos ignorar los acentos y los espacios, pero no es necesario que tu función haga eso,
bastará con probar cadenas como "anitalavalatina", o "dabalearrozalazorraelabad".
La función no debe hacer distinciones entre mayúsculas y minúsculas.
*/

#include <iostream>

using namespace std;

bool Palindromo(char palabra[40]);
int LongCad(char[]);

int main() {
char posiblePalindromo[40];
cout << "Introduce tu palindromo: ";
cin >> posiblePalindromo;

if (Palindromo(posiblePalindromo)) cout << "\nSi es un palindromo." << endl;
else cout << "\nNo es un palindromo." << endl;

cin.sync();
cin.get();
return 0;
}

bool Palindromo(char palabra[40]) {
char copia[40];
strcpy_s(copia, palabra);

int q = 0, p = LongCad(palabra), aux;
while (palabra[q] < p) {
aux = palabra[q];
palabra[q] = palabra[p];
palabra[p] = aux;
q++;
p--;
}

if (strcmp(palabra, copia) == 0) return true;
else return false;
}

int LongCad(char a[]) {
int i = 0;
while (a[i]) i++;
return 0;
}
[code=cpp][code=actionscript]
[/code][/code]

**EDITO: En el código no he puesto la librería necesaria "cstring" aun asi el código compilaba =S. Luego la puse y el mismo resultado.
#20
Programación C/C++ / Una duda muy simple
7 Agosto 2014, 11:27 AM
Hola. Tengo una pregunta bastante simple, y es la siguiente:

Cuando declaro una variable (por ejemplo un int) en un bucle for, esa variable esta solo disponible dentro de este bucle, pero una vez acaba el bucle la variable se queda en la memoria? En ese caso si por ejemplo hacemos uso de varios bucles en un programa con varios "int", estamos consumiendo más memoria que si usamos solo un int para todos los bucles no?

Es una pregunta muy tonto, pero me gustaría saber la respuesta :)
#21
Java / Usar libreria .jar en Eclipse
11 Julio 2014, 14:47 PM
Hola, bueno tenía una pequeña duda sobre como utilizar una librería .jar externa en un proyecto de ecplise. He creado la librería Arrays.jar que incluye una clase con un método que me gustaría usar en otro proyecto. Ya se añadir el .jar al proyecto, pero no se como utilizarlo en el código. Alguien me podría dar una idea?
#22
Hola a todos. Para empezar, estaba resolviendo un sencillo problema en c++ que consiste en lo siguiente:

Hacer un programa que lea diez valores enteros en un array y los muestre en pantalla. Después que los ordene de menor a mayor y los vuelva a mostrar. Y finalmente que los ordene de mayor a menor y los muestre por tercera vez. Para ordenar la lista usar una función que implemente el método de la burbuja y que tenga como parámetro de entrada el tipo de ordenación, de mayor a menor o de menor a mayor. Para el array usar una variable global.

Fácil no?. He utilizado el método de la burbuja para ello, utilizando una librería creada por mi que contiene una función que implementa el método de la burbuja. Ya la había probado antes y funcionaba perfectamente. Ahora bien, resulta que cuando he ido a usarla, me ha ocurrido lo siguiente:


En fin, como se puede observar al introducir la lista de 10 números que yo he tecleado, el programa me muestra otra lista con varios 0 y un gran numero. Y ya a partir de ahí se desmorona todo. Lo que entiendo es como el programa no lee la lista adecuadamente... Este es el código:
Código (cpp) [Seleccionar]
/*2.Hacer un programa que lea diez valores enteros en un array y los muestre en pantalla.
Después que los ordene de menor a mayor y los vuelva a mostrar.
Y finalmente que los ordene de mayor a menor y los muestre por tercera vez.
Para ordenar la lista usar una función que implemente el método de la burbuja y
que tenga como parámetro de entrada el tipo de ordenación, de mayor a menor o de menor a mayor.
Para el array usar una variable global. */

#include <iostream>
#include <Arrays.h>

using namespace std;

int main() {
int lista[10], i;

cout << "Introduce 10 valores enteros: " << endl;
for(i=0; i<=9; i++) {
cin >> lista[10];
}

cout << "\nLista original: " << endl;
for(i=0; i<=9; i++) {
cout << lista[i] << " ";
}

ordVect(lista, 10, 0);
cout << "\nLista de menor a mayor: " << endl;
for(i=0; i<=9; i++) {
cout << lista[i] << " ";
}

ordVect(lista, 10, 1);
cout << "\nLista de menor a mayor: " << endl;
for(i=0; i<=9; i++) {
cout << lista[i] << " ";
}

cin.get();
return 0;
}


Espero con curiosidad sus respuestas...

Un saludo
#23
Hola a todos. Bueno esto no se si es fácil, difícil o complicado de hacer, pero e gustaría saber más o menos como puedo hacer que un textBox reconozca la sintaxis de el lenguaje HTML, me refiero que por ejemplo las etiquetas las marque de un color diferente, y cosas por el estilo, como suelen hacer los IDE para desarrollo web. También quisiera saber si es posible hacerlo con javascript y CSS.


Un saludo, y gracias de antemano.
#24
Programación C/C++ / Problema con palindromo
31 Mayo 2014, 17:51 PM
Hola, estoy intentando resolver este problema, en el código viene el enunciado en un comentario:



/*5.Hacer un programa que contenga una función con el prototipo bool Palindromo(char palabra[40]);.
La función debe devolver true si la palabra es un palíndromo, y false si no lo es.
Una palabra es un palíndromo si cuando se lee desde el final al principio es igual que leyendo desde el principio,
por ejemplo: "Otto", o con varias palabras "Anita lava la tina", "Dábale arroz a la zorra el abad".
En estos casos debemos ignorar los acentos y los espacios, pero no es necesario que tu función haga eso,
bastará con probar cadenas como "anitalavalatina", o "dabalearrozalazorraelabad".
La función no debe hacer distinciones entre mayúsculas y minúsculas.*/

#include <iostream>
#include <cstring> //Para strcmp() y strcpy()

using namespace std;

bool Palindromo(char[]); //Comprueba si la palabra es un palíndromo o no
void Invertir(char[], int); //Invierte los elementos de un array tipo char.
int longCad(char[]); //Calcula la longitud de una cadena

int main() {
char posiblePalindromo[40];

cout << "Introduce un palindromo: ";
cin >> posiblePalindromo;

if(Palindromo(posiblePalindromo)) {
cout << "Si, es un palindromo. " << endl;
}
else cout << "No, no es un palindromo. " << endl;

cin.get();
return 0;
}

bool Palindromo(char palabra[40]) {
char aux[40];
strcpy(aux, palabra); //Hacemos una copia en la variable aux, para poder compararlas posteriormente.

for(int i=0; i<=longCad(aux); i++) { // Bucle para convertir cualquier mayuscula a minuscula.
if(isupper(aux[i])) aux[i] = tolower(aux[i]);
}
Invertir(aux, longCad(aux));

if(strcmp(aux, palabra) == 0) return true;
else return false;
}

void Invertir(char a[], int m) {
int i = 0, j = m-1, aux;
while(i < (m / 2)) {
aux = a[i];
a[i] = a[j];
a[j] = aux;
i++; j--;
}
}

int longCad(char a[]) {
int n = 0;
while(a[n] != 0) n++;
return n;
}


En principio, el programa me funciona bien, pero no consigo solucionar que el programa ingore las mayúsculas a la hora comprobar el palíndromo. He escrito un bucle for en la función para convertir cualquier mayúscula a minúscula, pero es como si el bucle no existiera, cuando escribo un palíndromo con mayúsculas y minúsculas me dice que no lo es, pero cuando lo escribo todo en minúscula me dice que si. ¿Alguna idea?
#25
Programación General / Duda con Random C#
10 Mayo 2014, 22:02 PM
Hola a todos. El problema es que necesito que un label cambie su posición en un panel de forma aleatoria, con ayuda de un timer. Lo he conseguido a medias, es decir, el label hace un movimiento en diagonal alo largo del panel, y es como si hubiera un eje diagonal imaginario que impide que aperezca por ejmplo en la esquina opuesta. El fragmento de código que he hecho para generar la posición aleatoria es este:

private void mobTimer_Tick(object sender, EventArgs e)
        {
            Point position = new Point(x.Next(mobLabel.Width, gamePanel.Width-mobLabel.Width), y.Next(mobLabel.Height, gamePanel.Height-mobLabel.Height));
            mobLabel.Location = position;
        }


Los random x e y los he inicializado al principio del código.

A alguien se le ocurre por que ese movimiento diagonal? Es por que el ramdon genera los números asi?
#26
Hola buenas. Estaba practicando un poco de trigonometría haciendo un simple programa de C++ que te pide un angulo y el cateto opuesto, y calcula la hipotenusa de un triángulo rectágulo. Funciona bien y parece darme el resultado, pero hay veces que sale negativo =S.
#include <iostream>
#include <cmath>

using namespace std;

int main() {
float A, co, h;

cout << "Introduce el angulo y el cateto opuesto: ";
cin >> A;
cin >> co;

h = co / (sin(A));
cout << "La hipotenusa es: " << h;
cin.get();

return 0;
}


No sé, yo creo que está bien pero si alguien me pudiera explicar el por qué de un resultado negativo...

Gracias de antemano.
#27
Hola buenas, pues eso, no entiendo muy bien para que sirve reservar memoria con los operadores new y delete en c++.

Si alguien pudiera explicarme un poco su utilidad y que ventajas tienen...

Gracias de antemano.