• Sábado 24 de Octubre de 2020, 08:08

Mostrar Mensajes

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


Mensajes - ProfesorX

Páginas: [1] 2 3 ... 32
1
Pascal / Re:Matriz de orden n*m
« en: Miércoles 30 de Julio de 2014, 18:08 »
No se hacen tareas.

La forma correcta de preguntar es que tu mismo hagas el codigo, y si tienes dudas o te marca algun error, publiques el codigo que has hecho, y la parte que te esta dando problemas, de esa manera comprobamos que estas trabajando realmente y no que solo quieres que hagan el trabajo/tarea por ti.

Saludos :)

2
Visual C++ / Re:visual studio 2012
« en: Miércoles 16 de Abril de 2014, 22:54 »
Deberias publicar el codigo completo en modo texto, y no solo una imagen, porque con una imagen es imposible saber exactamente cual es el error, ese error puede ser provocado por casi cualquier cosa.

Saludos =)

3
C# / Re:Redondear a más y redondear a menos
« en: Jueves 13 de Marzo de 2014, 08:50 »

4
C# / Re:menu - Switch case - C#
« en: Martes 11 de Marzo de 2014, 20:16 »
Hola eze2k, el problema esta en que Readkey solo admite una sola tecla, te recomiendo dos formas de hacerlo en caso de que necesites mas de 10 opciones

1. utiliza letras para las opciones superiores a 10 (A, B, C, etc.)
2. En lugar de usar Console.Readkey utiliza Console.Readln()

Te dejo el codigo corregido con comentarios.

Código: [Seleccionar]
using System;
using System.Diagnostics;

namespace TestLog
{
    class Program
    {

        static void Main()
        {
            Menu();
        }

        static void Menu()
        {

            char opcion;

            do
            {
                Console.Clear();
                Console.WriteLine("\t************************");
                Console.WriteLine("\t*  1- OPCION1                 *");
                Console.WriteLine("\t*  2- OPCION2                 *");
                Console.WriteLine("\t*  3- Configurar Parametr    *");
                Console.WriteLine("\t************************");
                Console.WriteLine("\t*  [0]- Salir                 *");
                Console.WriteLine("\t************************");
                Console.Write("Opcion: ");
                do
                {
                    opcion = Console.ReadKey(true).KeyChar;
                } while (opcion < '0' || opcion > '3'); //N cualquier valor dependiendo del menu
                Console.WriteLine(opcion + "\n");

                switch (opcion)
                {
                    case '1':
                        Process.Start("cmd.exe", "dir");
                        break;

                    case '2':
                        Process.Start("cmd.exe", "dir");
                        break;

                    case '3':
                        funcionM();
                        break;
                }


            } while (opcion != '0');
        }
        static void funcionM()
        {
            char opcion2;
            do
            {
                Console.Clear();
                Console.WriteLine("\t************************");
                Console.WriteLine("\t*         Configuracion Param        *");
                Console.WriteLine("\t************************");
                Console.WriteLine("\t* [1]- Opcion1                       *");
                Console.WriteLine("\t* [2]- OPCION2                       *");
                Console.WriteLine("\t* [3]- OPCION3                       *");
                Console.WriteLine("\t* [0]- Volver al menu prin           *");
                Console.WriteLine("\t************************");
                Console.Write("Opcion: ");

                do
                {
                    /*
                                        Readkey solo admite una sola tecla, te recomiendo dos formas de hacerlo
                                        en caso de que necesites mas de 10 opciones
                                        1. utiliza letras para las opciones superiores a 10 (A, B, C, etc.)
                                        2. En lugar de usar Console.Readkey utiliza Console.Readln(), Ejemplo:

                                        string opcion2;
                                        opcion2 = Console.ReadLine();
                                        switch (opcion2)
                                        {
                                            // Utiliza "" en lugar de ''
                                            case "10": Console.WriteLine("\t* [10]- Volver al menu prin           *");
                                                break;
                                        }
                    */
                    opcion2 = Console.ReadKey(true).KeyChar;
                } while ((opcion2 < '0') || (opcion2 > '3')); //ESTO se que está mal, pero no sé
                // cómo hacer para que me tome los valores de 2 cifras. El error que me devuelve es:
                // Demasiados caracteres en literal de caracter - CS012
                Console.WriteLine(opcion2 + "\n");
                switch (opcion2)
                {
                    case '1': //Aqui me da problemas con el Case, me dice que 1 ya fue usado antes ...
                        //:S El error que me devuelve es: Demasiados caracteres en literal de caracter - CS012
                        Process.Start("cmd.exe", "dir");
                        break;

                    case '2':
                        Process.Start("cmd.exe", "dir");
                        break;

                    case '3':
                        break;
                }
            } while (opcion2 != '0');
            //}
        }
        /*static void Salir()
        {
            Console.Clear();
            Console.WriteLine("Salir");
        }*/

    }
}


Saludos :)

5
VB .NET / Re:Captura de entrada de datos
« en: Domingo 16 de Febrero de 2014, 21:48 »
Hola korsakof, bueno mencionas que usan un sistema con javascript, no se si utilicen alguna base de datos, pero de ser asi, se me ocurre que podrias diseñar un programa adicional que por medio de un timer, revisara la base de datos cada "X" cantidad de tiempo (se me ocurre cada 5 o 10 minutos) y en caso de haber alguna nueva entrada en la base de datos, mandar el SMS que necesitas, bueno es lo que se me ocurre, saludos y suerte.

6
C# / Re:Necesito a un experto en programación!
« en: Miércoles 12 de Febrero de 2014, 01:55 »
No se hacen tareas.

Si tienes alguna duda, el metodo correcto, es hacerlo tu mismo, y en caso de que tengas algun problema en la compilacion / ejecucion, publicas tu codigo especificando exactamente cual es el problema que tienes, en que parte de tu codigo, y cual es el resultado que deberias obtener en caso que los resultados no coincidan.

Saludos :)

7
C# / Re:Aqui hay unos cuantos skins para formularios de C#
« en: Jueves 6 de Febrero de 2014, 18:05 »
el archivo de media fire no existe , fue broma o que pecks???

No fue broma, solo que piensa con algo de logica.

Los archivos de Mediafire desaparecen despues de 3 o 4 meses, y la persona subio los archivos hace 4 años, solo mira la fecha del Mensaje original, Abril 12 de 2010.

El usuario que los subio tambien tiene mucho tiempo que ya no es un usuario activo.

Asi que les dejo este mensaje para ti y para cualquier futura persona que busque los skins.

Los Skins ya no existen, no hay nadie que los tenga, tampoco nadie que los pueda resubir, asi que ya no pregunten por ellos.

Saludos :)

8
C# / Re:Movimiento en TextBox
« en: Lunes 3 de Febrero de 2014, 19:28 »
No es posible hacer lo que pides, los textbox no utilizan coordenadas.

9
Visual C++ / Re:GRAFICA CON OPENGL
« en: Jueves 12 de Diciembre de 2013, 15:51 »
Google es tu amigo, con tan solo poner "tutorial opengl" encontraras muchas paginas con informacion.

Saludos :)

10
C++ Builder / Re:Una ayudita
« en: Miércoles 4 de Diciembre de 2013, 02:33 »
Cometes el clasico error de muchos que comienzan a trabajar con imagenes.

El que un archivo sea de imagen, no quiere decir que podras cargarlo automaticamente, cada diferente archivo de imagenes (jpg, png tiff, gif, etc) tienen su propio formato, el unico que se puede leer sin ninguna libreria adicional es el BMP (mapa de bits) para poder leer el resto de formatos necesitas una libreria de manejo de imagenes.

Prueba a utilizar FreeImage http://freeimage.sourceforge.net/ o DevIL http://openil.sourceforge.net/

Saludos :)

11
C# / Re:Mostrar imagen en base a coordenadas
« en: Viernes 15 de Noviembre de 2013, 08:33 »
La verdad aun no me queda muy claro que deseas hacer ¿para que sirve el dato de velocidad? ¿acaso quieres que se mueva por al pantalla a una determinada velocidad? ¿o solo es un dato que no debe ser tomado en cuenta y solo deseas que se muestre una figura en la posicion (X,Y)?

Como sea, si solo deseas mostrar una figura en una posicion (x,y) sin que se mueva, deberas usar el evento Paint para hacerlo.

Haz lo siguiente, crea un formulario de 800 x 600, dentro de ese formulario coloca un control PictureBox con la propiedad Dock en Fill, para que llene todo el formulario, y dentro del evento Paint del PictureBox dibujaremos una elipse en las coordenadas que habras leido previamente de tu archivo, aunque en este caso usaremos 2 variables x y y con valores 600 y 300 respectivamente:

Código: [Seleccionar]
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            int x = 600;
            int y = 300;
            e.Graphics.DrawEllipse(new Pen(Brushes.Black), new Rectangle(x, y, 10, 10));
            e.Graphics.FillEllipse(Brushes.Black, new Rectangle(x, y, 10, 10));
        }

Para que funcione adecuadamente, deberas hacer un formulario de tamaño mas grande que la coordenada maxima que vayas a desplegar, en tu caso, si la mayor coordenada es 800 x 300, tu formulario debera ser de 900 x 400 como minimo.

Si la coordenada que deseas mostrar, es mayor que tu resolucion de pantalla, lo que no te permitiria tener un formulario lo suficientemente grande para mostralo, quizas tendrias que hacerlo a escala, por ejemplo, si lo haces a escala 1:2, en lugar de 800 x 300 deberias usar como coordenada 400 x 150, no se si me entiendas, y no se si eso sea lo que necesitas.

Si no es eso, explica un poco mejor.

Saludos :)

12
C# / Re:Error en DataGridView
« en: Viernes 15 de Noviembre de 2013, 07:58 »
A mi parecer, el error esta en el datagrid, que esta vacio y tratas de seleccionar una celda que no tiene nada.

No puedo estar seguro porque no tengo el codigo completo, pero quizas funcione si asignas un valor null al datasource del datagrid cuando dejes el textbox en blanco:

Código: [Seleccionar]
            if (palabra == "")
            {
                MessageBox.Show("¡Escribe por lo menos una palabra a buscar!");
                dataGridView1.DataSource = null;
                return;
            }

Prueba y me dices.

Saludos :)

13
C# / Re:Mostrar imagen en base a coordenadas
« en: Martes 12 de Noviembre de 2013, 18:20 »
No entendi muy bien que es lo que deseas hacer, si pudieras explicarte un poco mejor se agradeceria

14
C# / Re:necesito el codigo del metodo de las "M" en c# con las tablas de iteraciones
« en: Martes 12 de Noviembre de 2013, 18:18 »
NO se hacen tareas

15
SQL Server / Re:Consulta para obtener el pago mas retrasado
« en: Jueves 7 de Noviembre de 2013, 05:39 »
Bueno, yo mismo publicare la solucion, un amigo ya me ayudo con la solucion a mi problema, lo dejare publicado por si alguien llega a tener un problema parecido al mio sepa que hacer :)

Código: [Seleccionar]
select b.contrato_id, b.semana, b.interes, b.abono, b.iva, fecha_pago, pagado
from creditos_abonos b,
(SELECT MIN(c.semana) as semana, c.contrato_id as contrato_id
FROM creditos_abonos c
WHERE c.pagado =0
AND c.fecha_pago < '24/08/2013'
GROUP BY c.contrato_id)
as c where pagado = 0
and fecha_pago < '24/08/2013'
AND b.semana = c.semana
AND c.contrato_id = b.contrato_id
order by b.contrato_id, c.semana;

Igual si alguno tiene alguna otra forma de obtenerlo, no esta de mas.

Gracias a todos :)

16
SQL Server / Consulta para obtener el pago mas retrasado
« en: Jueves 7 de Noviembre de 2013, 01:38 »
Por lo regular yo soy el que da asistencia, pero ahora me toca que me den asistencia a mi XD.

Tengo la siguiente tabla en SQL Server:

Código: [Seleccionar]
create table creditos_abonos
(
contrato_id int not null,
semana int not null,
interes decimal (18,2) not null default 0,
abono decimal (18,2) not null default 0,
iva decimal (18,2) not null default 0,
fecha_pago datetime not null default getdate(),
pagado bit not null default 0,
)

Un ejemplo de los valores de la tabla:

contrato_id   semana   interes   abono   iva   fecha_pago   pagado
5   6   217.50   906.25   34.80   2013-04-30 00:00:00.000   1
5   7   217.50   906.25   34.80   2013-05-07 00:00:00.000   1
5   8   217.50   906.25   34.80   2013-05-14 00:00:00.000   0
5   9   217.50   906.25   34.80   2013-05-21 00:00:00.000   0
5   10   217.50   906.25   34.80   2013-05-28 00:00:00.000   0
9   9   67.50   281.25   10.80   2013-04-30 00:00:00.000   0
9   10   67.50   281.25   10.80   2013-05-07 00:00:00.000   0

Yo lo que quiero es una consulta que me de la semana mas atrasada en pago de todos los contratos, en este caso se considera pagada cuando el campo pago = 1 y no pagada cuando pago = 0

o sea en base a lo anterior necesito que me regrese lo siguiente

contrato_id   semana   interes   abono   iva   fecha_pago   pagado
5   8   217.50   906.25   34.80   2013-05-14 00:00:00.000   0
9   9   67.50   281.25   10.80   2013-04-30 00:00:00.000   0

Tengo la siguiente consulta
Código: [Seleccionar]
select
top 1
b.contrato_id, b.semana, b.interes, b.abono, b.iva, fecha_pago, pagado
from creditos_abonos as b
where pagado = 0
and fecha_pago < '24/08/2013'
and contrato_id = 5
order by contrato_id, semana;

El problema es que solo me regresa la semana mas atrasada de un solo contrato, en este caso el numero 5, y yo necesito la mas atrasada de todos los contratos de la tabla. Lo que he hecho es por medio de un ciclo dentro de un programa, revisar todas las filas de la tabla, cambiando el valor de la condicion contrato_id = 5, pero siento que es un metodo muy ineficiente. Si alguien tiene la manera de obtenerlo por medio de una sola consulta SQL me pareceria excelente.

Gracias de antemano =)

17
C/C++ / [Código Fuente] Re:Método de la Burbuja
« en: Lunes 14 de Octubre de 2013, 17:26 »
mmmm donde esta el codigo

Ves un iconito con forma de clip en el mensaje que dice burbujas.zip? si haces click en el, te descargara el codigo a tu maquina, solo deberas descomprimirlo del archivo.

Saludos :)

18
C/C++ / Re:Duda con puntero a función en lenguaje C.
« en: Viernes 27 de Septiembre de 2013, 01:12 »
excelente explicación profe pero también otra diferencia no sería en el uso de memoria total porque si yo tengo una struct con bastantes campos no es lo mismo pasarlo por copia y duplicar la memoria que pasarlo por puntero y trabajar sobre la misma area de memoria que se habia definido antes? :think:.

ya se que las PC's actuales tienen memoria para derrochar pero a mi me enseñaron que había que exprimir la memoria al máximo xD

Claro, es mucho mas eficiente trabajar directamente con las variables que con una copia, aunque hay algo que debes tener en cuenta, todo depende de lo que necesites hacer, si no vas a realizar modificaciones en los valores, o si los modificas, pero no te afecta en el resultado que debas obtener, entonces puedes usar directamente apuntadores. Si vas a realizar modificaciones en los valores pero por alguna razon te afecta el resultado que necesitas obtener, o necesitas conservar los valores anteriores, entonces necesitas trabajar con una copia si o si.

Cita de: DanielC#
Porque tu código utilizas los *(* contiene el valor de la variable y & contiene la dirección de memoria de la misma)sin declarar y asignar los apuntadores y funciona?.-

No entendi bien la pregunta, podrias elaborarla o explicarla mejor?

19
C/C++ / Re:Duda con puntero a función en lenguaje C.
« en: Jueves 26 de Septiembre de 2013, 22:27 »
Hola DanielC#, bueno para empezar no se si compilaste tu ejemplo, pero esta equivocado, me parece que tu funcion deberia ser void suma() en lugar de int suma(), ya que no tienes nungun return dentro de suma.

Ahora, suponiendo que es void suma(), en el ejemplo que pusiste en realidad no hay ninguna diferencia en el resultado obtenido, porque no estas modificando el valor de a y b dentro de la funcion suma, los parametros por referencia se utilizan cuando necesitamos hacer una modificacion en el valor de un parametro dentro de una funcion y necesitamos que esa modificacion se conserve fuera de la funcion.

En el siguiente ejemplo modificamos los valores de a y b, y ahi si como veras hay diferencia entre usar parametros por valor y por referencia, ya que en el primer caso a y b conservaran sus valores de 5 y 9 y en el segundo caso sus valores seran modificados a 10.

Código: [Seleccionar]
void suma(int a, int b, int *res)
{
    a = 10; b = 10;
    *res = a + b;
}

int main(void)
{
    int a = 5, b = 9, res;

    printf("Valor a = %d; Valor b = %d\n", a, b);
    suma(a,b,&res);
    printf("Valor a = %d; Valor b = %d\n", a, b);
    printf("\n  El resultado es...: %d\n", res);

    printf("\n Pulse una tecla para cerrar la aplicacion..."); getchar();
    return 0;
}

Código: [Seleccionar]
void suma(int *a, int *b, int *res)
{
    *a = 10; *b = 10;
    *res = *a + *b;
}

int main(void)
{
    int a = 5, b = 9, res;

    printf("Valor a = %d; Valor b = %d\n", a, b);
    suma(&a,&b,&res);
    printf("Valor a = %d; Valor b = %d\n", a, b);
    printf("\n  El resultado es...: %d\n", res);

    printf("\n Pulse una tecla para cerrar la aplicacion..."); getchar();
    return 0;
}


Saludos :)

20
C/C++ / Re:Separar la Interfaz de la Implementación
« en: Viernes 13 de Septiembre de 2013, 08:51 »
Hola Matt B, bienvenido al foro.

Mira el error "undefined reference" generalmente indica que falta incluir una libreria al enlazar el archivo, pero en este caso "undefined reference to 'Winmain@16'" indica que estas tratando de compilar una libreria como si fuera un ejecutable.

La funcion winmain o main, es donde comienza la ejecucion de tu programa, pero si estas compilando una libreria, no debe tener punto de inicio, asi que si tratas de compilarla como ejecutable, te dara ese error.

No dices que compilador estas utilizando para tu programa, pero basicamente debes buscar la opcion de tu compilador para compilar tus archivos como libreria, y luego ya que tengas la libreria compilada, la incluyes en el proyecto que tenga tu programa principal, o sea tu main, no se si me explique adecuadamente.

Igual si nos dices que compiladro estas usando, podriamos darte una respuesta mas concreta.

Saludos :)

21
C# / Re:Registros en c#
« en: Domingo 1 de Septiembre de 2013, 19:00 »
Citar
Al decirme esto, me confirmas que es forzoso tener una base de datos para crear un registro??  DE NO SER FORZOSO prefiero no tocar las bases de datos por ahora.

Yo te contesto, no es forzoso hacerlo igual puedes hacerlo por medio de archivos.

Pero no importa lo que eligas, ya que eres principiante, me parece que cualquiera de los dos metodos implicara trabajo.

Te dejo un enlace a lectura/escritura de archivos.

http://www.elguille.info/colabora/NET2005/svalsse_leyendo_y_escribiendo_archivos.htm

Saludos :)

22
C/C++ / Re:Ejercicio basico de punteros
« en: Domingo 1 de Septiembre de 2013, 10:22 »
Hola Oquindracir, bueno mira, algunos puntos de tu pregunta me parece que ya los habia explicado, aun asi tratare de ser un poco mas especifico a ver si te queda mas claro :)

Citar
las variables a y b al ser locales  se almacenan en la pila, es decir sus direcciones 1000 y 1001 se encuentran en la pila ¿porque estas variables no se limpian al salir, si tambien forman parte de la pila?

Porque cuando sales de una funcion no se borra toda la pila, sino solo la parte o fragmento de la pila que estas utilizando en ese momento, en esa funcion.

Por cuestiones de simplicidad utilice las direcciones 1000, 1001, 2000 y 2001, pero recuerda que no son las verdaderas direcciones, es mas la pila en realidad es una sola area contigua y en realidad no crece hacia arriba, sino que crece hacia abajo. Y metiendonos un poco en lo que es lenguaje maquina no solo se guardan variables, en la pila tambien se guarda la direccion de regreso de la funcion y un registro especial del procesador llamando el Stack Pointer, que nos indica hasta donde crece nuestra pila en determinado momento.

Pero bueno, suponiendo que la pila creciera hacia arriba, si queremos ser mas exactos tus variables locales a y b en main() se guardan en las direciones 1000 y 1001, el compilador genera 2 instrucciones push para guardar a y b, cuando llamas a la funcion change, se guarda la direccion de regreso con otro push en la direccion 1003, cuando estas dentro de change, se generan 3 push, 2 para tus parametros x y y en las direcciones 1004 y 1005, y otro mas para tu variable z en la direccion 1006, cuando llegas al final de la funcion change, el compilador revisa cuantos push se hicieron (3 en este caso) y entonces genera 3 instrucciones pop para eliminar los datos de la pila, regresando el stack pointer a la direccion 1003, luego obtiene de la direccion 1003, la direcion de tu programa donde debe continuar con otro pop, y ahora el stack pointer estara en la posicion 1002. Cuando llega al final del main, el compilador revisa cuantos push hizo (2 en este caso) y ahora hace 2 pop para eliminar los valores 1000 y 1001.

Si dentro de change llamaras a otra funcion con dos parametros, ocurriria lo mismo, el compilador generar 3 push para guardar la direccion de regreso y los dos parametros en las direcciones 1007, 1008 y 1009 respectivamente, si tienes variables locales se guardan en la direcciones siguientes, y al final, el compilador generara tantos pop como push haya hecho.

Citar
Otra cosa, mi duda respecto al uso de variables globales en lugar de locales, me referia a quiar las variables locales int a = 5 y int b = 10 y declararlas como globales antes del main. Al hacer esto se sigue realizando la misma accion, es decir las variables a y b se intercambian, y es donde surge mi duda que nose porque se realiza esto, ya que  al ser variables globales estas no se almacenan en la pila, entonces ¿como se da el paso por referencia en este caso?

Mira, como te dije en mi anterior respuesta, que quizas no leiste bien, aunque tu declares a y b como globales, en el momento que tu le pasas como parametro a change esas variables globales, estaras trabajando con una COPIA, si leelo bien, COPIA, de las variables globales y no con las variables globales originales, y por eso no funcionara, porque sera una COPIA., El intercambio se hara, pero sobre la COPIA, por lo tanto los originales se conservaran sin cambios.

Si deseas que funcione deberas eliminar los parametros, para que puedas usar directamente a y b, SIN GENERAR UNA COPIA.

Prueba lo siguiente:

Código: [Seleccionar]
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#define PI 3.14

int a, b;

// Esta funcion usa parametros sin apuntadores, las variables globales no cambiaran
// Porque internamente a y b se copian a "x" y "y", aunque a y b sean globales
void change1(int x, int y)
{

    int z;

    z = x;
    x = y;
    y = z;
}

// Esta funcion no usa parametros, usa directamente las variables globales, por lo tanto
// los valores si se intercambiaran
void change2()
{

    int z;

    z = a;
    a = b;
    b = z;
}

int main (void)
{
    a = 5, b = 10;

    printf("a = %d b = %d\n", a,b);
    change1(a,b);
    printf("a = %d b = %d\n", a,b);
    change2();
    printf("a = %d b = %d\n", a,b);

    return 0;
}

Mas informacion sobre pilas enlace directo a las pìlas por Hardware (en ingles):
http://en.wikipedia.org/wiki/Stack_%28abstract_data_type%29#Hardware_stacks

Saludos :)

23
C/C++ / Re:Ejercicio basico de punteros
« en: Sábado 31 de Agosto de 2013, 19:01 »
Hola Oquindracir, bienvenido al foro.

Tratare de responder tus dudas de la mejor manera posible.

Citar
¿porque al declarar las variables "a" y "b" como globales en lugar de locales(como estan el programa), se siguen intercambiando los valores?

Las variables locales tienen preferencia sobre las variables globales, es decir, si tienes 2 variables globales llamadas a y b, y 2 variables locales tambien llamadas a y b, entonces la funcion utilizara las variables locales en lugar de las globales. Esa es una de las razones por la cual no se recomienda el uso de variables globales, porque no sabes si alguna variable local tomara el lugar de una variable global. Quizas en un programa tan corto como este sea facil ver que las variables locales y globales tienen el mismo nombre, pero imaginate si el codigo tuviera miles de lineas de longitud, seria una pesadilla tratar de ver que una variable local no oculte el nombre de una variable global al llamarse igual.

Citar
Al hacer la prueba de escritorio, puedo entender perfectamente el programa, lo que no entiendo es ¿porque al no usar punteros no se realiza el intercambio de los datos de la variables?. Este el programa sin punteros, el cual al realizar la prueba de escritorio, me resulta que dichos valores si deberian de ser cambiados.

Esto es porque, como tu mismo has dicho, las variables locales se crean (copian) en la pila, y al salir de la funcion, ese espacio en la pila queda libre, por lo que, aunque el intercambio dentro de la funcion SI se realiza, estas realizando el intercambio en una COPIA de las variables originales.

Mas claro, supon que tus variables a y b  estan en la direccion 1000 y 1001 respectivamente, y que la pila comienza en la direccion 2000, cuando entras a la funcion y no utilizas punteros, se crean 2 variables en la direccion de pila 2000 y 2001, cuando haces el intercambio, estas intercambiando los valores en la direccion 2000 y 2001, o sea que como dije antes el intercambio si se realiza, pero al salir, las direcciones 2000 y 2001 son liberadas y se pierde el cambio.

Cuando utilizas apuntadores, le estas pasando a la funcion la DIRECCION de a y b, es decir, le pasas como valores 1000 y 1001, entonces cuando realizas el cambio estaras cambiando los valores en las direcciones 1000 y 1001, y no en la direccion 2000 y 2001.

De hecho, la direccion 2000 contendra el valor 1000 y la direccion 2001 contendra el valor 1001, pero esos valores son direcciones y como son direcciones por eso necesitas usar el asterisco (*) para decirle al compilador que no utilice el contenido de la variable como valor, sino cono direccion.

Prueba lo siguiente, imprime x y *x, el primer valor es la direccion que esta contenida en x y el segundo es el valor contenido en la dirreciion x

Código: [Seleccionar]
void change( int *x, int *y)
{

    int z;

    printf("Direccion:%d, Valor:%d\n", x, *x);
    printf("Direccion:%d, Valor:%d\n", y, *y);

    z = *x;
    *x = *y;
    *y = z;
}

Espero que eso aclare tus dudas.

Saludos :)

24
C# / Re:Problema con struct en accion o subprograma.
« en: Martes 27 de Agosto de 2013, 19:41 »
Hola principiantecsharp.

Mira, el error "An object reference is required for the non-static field, method, or property" se debe a que no puedes llamar a Metodos no estaticos desde metodos estaticos.

Dato que Main() es estatico, no puedes llamar a CreaCosaBuena();

Tienes dos soluciones a este problema:

Solucion 1. Creas una referencia al objeto donde esta el metodo CreaCosaBuena(), en este caso el objeto (clase) es Program

Código: [Seleccionar]
            Program mi_variable = new Program();
            mi_variable.CreaCosaBuena(NumRuta, ne, nr, cosilla, ev, cv, vv, cf);

Solucion 2. Declaras el metodo CreaCosaBuena() como estatico:

Código: [Seleccionar]
        static void CreaCosaBuena(int NumCosa, int ne, int nr, tipoInformacionCosa [] cosilla, float ev, float cv, float vv, float cf)

Saludos :)

25
PostgreSQL / Re:Problema con invocar una funcion en postgres
« en: Miércoles 21 de Agosto de 2013, 17:34 »
No repitas los mensajes.

Si tienes algo que añadir a tu pregunta, haslo en tu mensaje original.

Si nadie te contesta, es muy probable que se deba a que nadie sabe la respuesta (en mi caso no la se porque no trabajo con PostgreSQL)

Saludos :)

Páginas: [1] 2 3 ... 32