Estrellamos el menu (on = habilitado y off=inhabilitado[proximamente]) .. Sigue Mandando tus susper mensajitos....en guate-->. claro tigo telefonica

Buscar

¡Haga de esta pagina su inicial!

Sitios Encontrados

sábado, 30 de mayo de 2009

Funcion por referencia con argumentos de apuntador

Como sabemos "Return en las funciones" puede utilizarse para devolver al invocador un valor desde una funcion llamada (o regresar el control desde una funcion llamada sin devolver un valor). Tambien vimos que se le puden pasar argumentos a una funcion mediante argumentos de referencia, permitiendo que la funcion modifique los valores originales de los argumentos(por lo tanto, se puede "devolver" mas de un valor desde una funcion), o pasar objetos de datos grandes a una funcion y evitar la sobrecarga de pasar los objetos mediante llamada por valor (que, claro esta, involucra llevar acabo una copia del objeto).Los apuntadores, como las referencias , tambien pueden servir para modificar una o mas varibles del invocador o para pasar apuntadores a objetos de datos grandes, evitando la sobrecarga de pasar los objetos mediante llamada por valor. Los programadores se pueden valer de los apuntadores y del operador de indirreccion para simular llamadas por referencia. AL llamar una funcion con argumentos que deben ser modificados, se pasa la direccion de los argumentos. por lo genera, esto se logra aplicandole el operador de direccion(&) al nombre de la variable que se habra de modificar. Elsiguiente ejemplo contiene dos versiones de una funcion que eleva al cubo un entero: 1-cuboPorValor: en esta se pasa la variable numero1 mediante una llamada por valor, Esta eleva al cubo su argumento y devuelve el valor mediante una insturccion "return". EL nuevo valor se asigna a nummero1. Existe la oportunidad de examinar el resultado de la llamada de funcion antes de modificar el valor de una variable. Por ejemplo, en este programa se podria haber almecenado el resultado de cuboPorValor en otra variable, examinando su valor asignando el resultado a numero1 tras comprobar que el resultado es razonable. 2-cuboPorReferencia:en esta pasa la variable numero2 mediante una llamada por referencia(se pasa la direccion de numero2) a la funcion cuboPorReferencia. Esta toma nPtr (que es un apuntador a int) como argumento. La funcion desreferencia el apuntador y eleva al cubo el valor alq ue apunta nPtr. Esto cambia el valor de nummero2. Una funcion que recibe como un argumento una direccion debe definir una parametro de apuntador para recibir dicha direccion. para C++ seria asi: foto + grande para C# seria asi:foto + grande

Nota para C#:

Ud. puede declarar cualquier método como no seguro :

public unsafe void MyMethod(){

De forma alternativa, Ud. puede declarar cualquier clase o estructura como no segura:

unsafe class MyClass{

Declarar una clase como no segura implica que todos sus miembros son tratados como no seguros. Ud. puedeademás declara cualquier campo miembro (aunque no las variables locales) como no seguros, si tiene un campo miembro de tipo puntero:

private unsafe int* pX;

También es posible marcar un bloque de código como no seguro de la siguiente forma:

unsafe{// instrucciones que utilizan punteros}

jueves, 28 de mayo de 2009

Los apuntadores

En hora buena([Capeones]FOrca BARca 2-0 vrs Manchester ).
Aca empezaremos a estudiar una de las caracteristicas mas poderosas del lenguaje de programacion de C++ : el "apuntador" que es una de las capasidades de C++ mas dificiles de dominar. Los apuntadores permiten a los programas simular la llamada por referencia y crear y manipular estructuras dinamicas de datos, es decir, estructuras de datos que pueden crecer y encogerse, como listas vinculadas, colas, pilas y arboles. Las varibles de de apuntador contiene direcciones de memoria como sus valores. Normalmente las variables contienen valores especificos. por otra parte, los apuntadores contienen direcciones de variables que contienen valores especificos. En este sentido , los nombres de varibles hacen referencia directa a un valor y los apuntadores hacen referencia indirecta a un valor.La referencia a un valor atravez de un apuntador se llama indireccion.
Seguramente has de preguntarte y que pasa con C# : pues ya que lo pensastes primero debemos saber que para mantener la seguridad de tipos y la seguridad, C# de manera predeterminada no admite la aritmética con punteros. Sin embargo, utilizando la palabra clave "unsafe", es posible definir un contexto no seguro en el que se pueden utilizar punteros de un modo muy similar a como se hace en C++.
(Para habilitar esta opcion del compilador en el entorno de desarrollo de Visual Studio debes hacer lo siguiente:
1.- Abra la página Propiedades del proyecto.
2.- Haga clic en la página de propiedades GENERAR o BUILD.
3.- Active la casilla de verificación "Permitir código no seguro" o "Allow unsafe code")
Nota SUPER IMPORTANTE :
En el Common Language Runtime (CLR), se hace referencia al código no seguro como código no comprobable. El código no seguro en C# [NO ES necesariamente PELIGROSO]; simplemente es código cuya seguridad No puede ser comprobada por el CLR. Por consiguiente, el CLR sólo ejecutará código no seguro si se encuentra en un ensamblado de plena confianza.Si utiliza el código no seguro,[ES TU RESPONSABILIDAD garantizar que tu código no introduce riesgos de seguridad o errores de puntero].
Debes tomar en cuenta los iguiente, sin enbargo :
En C# no se permite derreferenciar punteros void*, ni tampoco se pueden efectuar operaciones aritméticas sobre punteros void*. La sintaxis void* se ha mantenido simplemente porcompatibilidad descendente, para llamar a funciones externas de la API de Windows que exigen punteros void* como parámetros.
Los punteros no pueden apuntar a tipos-referencia (clases o arrays). Tampoco pueden apuntar a estructuras que contengan tipos-referencia como miembros. Esto es un intento de proteger los datos utilizados por el motor de ejecución .NET y el recolector de basura (aunque en C#, como en C++,una vez que Ud. comienza a utilizar punteros casi siempre encontrará un modo de salvar cualquier restricción realizando operaciones aritméticas sobre los punteros y luego derreferenciando).
Además de declarar las partes relevantes de su código como no seguras, Ud. deberá especificar la opción /unsafe al compilador al compilar código que trabaje con punteros.
Los punteros no pueden apuntar a variable que estén embebidas en tipos-referencia (por ejemplo,miembros de clases),a menos que el puntero esté declarado en un bloque fixed.
para C++ y C# seria asi: foto + grande

Bueno a manera de complemento a esto seguramente te preguntas, si C# de manera predeterminada no admite la aritmética con punteros como lo trabaja? la respuesta seria x medio de un delegado en C# que no tiene equivalente directo en C++,y realiza las mismas funciones que un puntero a función en C++. La idea es que un delegado es un puntero a método, encapsulado en una clase especializada conjuntamente con una referencia al objeto al que el método será aplicado(en el caso de un método de instancia, o la referencia nula en el caso de un método estático).Esto implica que, a diferencia de un puntero a función de C++, un delegado de C# contiene suficiente información parallamar a un método de instancia.Formalmente, un delegado es una clase que se deriva de la clase System.Delegate. Por lo tanto, instanciar un delegado es un proceso de dos fases: la definición de esta clase derivada, y la declaración de una variabledel tipo apropiado. La definición de una clase-delegado incluye los detalles de la signatura (incluyendo el tipodel valor a devolver) del método que el delegado encapsula.La utilización principal de los delegados consiste en pasar de un método a otro las referencias a métodos ypermitir las llamadas indirectas: las referencias a métodos no pueden ser pasadas como parámetros directamente, pero sí como parte de un delegado. Los delegados aseguran la seguridad de tipos, y evitan las llamadas a métodos con signaturas incorrectas. El método contenido en el delegado puede ser llamado a través del delegado.

martes, 19 de mayo de 2009

Multidimensiones o + de 3 o multiplessubindices

Bueno aca les muestro un ejemplo mas extendido; Planteamos el siguiente problema. Se necesita manejar, en un arreglo, la posicion de todos los carcteres escritos en una enciclopedia. El arreglo debera tener las siguientes dimensiones:
Una para menejar el "volumen" en la enciclopedia.
Otra para manejar la "pagina" en el volumen.
Otra para manejar el "renglon" en la pagina.
Otra para menejar la "columna" en la pagina.
El siguiente fragmento de programa implementa la solucion a este programa.
para C++ seria asi: foto + grande para C# seria asi 1:foto + grande 2:foto + grande Nota:
As de notar que exite cambio en la forma como se implemento un arreglo en C#
en la primera clase declaramos un arreglo de tipo rasgado = arreglo de un arreglo
en la segunda clase declaramos un arreglo de tipo rectangular este si es una regilla

sábado, 9 de mayo de 2009

Arreglos de doble subindice

El Siguiente programa efectua otras manipualciones comunes de arreglos sobre un arreglode 3 por 4 denominado"studentGrade".Cada fila del arreglo representa un estudiante y cada columna representa la calificacion de uno de loscuatro examenes que realizaron dichos estudiantes durante el semestre. Las manipulaciones de arreglos las realizancuatro funciones. La funcion (minimum) determina la calificacion mas baja de todos los estudiantes durante el semestre;la funcion (maximum) la calificacion mas alta. La funcion (average) calcula el promedio semestral de un estudiante en particular. La funcion (printArray) envia a la salida, en formato de tabla, el arreglo de doble subindice.Las funciones (minimum), (maximum), (printArray) reciben tres argumentos: el arreglo [studentGrade] (llamado "grades"en cada funcion), el numero de estudiantes(fila del arreglo) y el numero de axamenes(columnas del arreglo). Cada funcionrecorre, por medio de un ciclo, el arreglo [grades] mediante estructura for anidadas es la definicion (minimum):
for (var i = 0; i < pupil; i++)

for (var j = 0; j < test; j++)

if (grade[i, j] < lowGrade)

lowGrade = grade[i, j];

return lowGrade;

La estructura for exterior incia estableciendo "i"( es decir, el subindice de fila) a 0, de modo que los elementos de laprimera fila puedan compararse con la variable lo "lowGrade" en el cuerpo de la estructura for interio. La estructurafor interior recorre, por medio de un ciclo, las cuatro calificaciones de una fila particular y las compara con "lowGrade".si alguna es menor que "lowGrade", dicha calificacion se asigna a esta varible. Despues, la estructura for exterior incrementa a 1 el subindice de la fila. Los elementos de la segunda fila se compararn con la variable "lowGrade".A continuacion se incrementa a 2 el subindicede la fila en la estructura for exterior. Ahora, los elementos de latercera fila se compararan con la varible "lowGrade". Cuando termina la ejecucion de la estructura anidada, "lowGrade"contiene la calificacion menor del arreglo de doble subindice. La funcion (maximum) funciona de igual manera.

La funcion (average) toma dos argumentos. un arreglo de un solo subindice con los resultados de las pruebas de un estudiante en particular y el numero de resultados de las pruebas en el arreglo. Al llamar a (average), el primerargumento es {studentGrade[student]}, que especifica que debe pasarse a (average) una fila particular del arreglo de doble subindice {studentGrade}. Por ejemplo el argemento {studentGrade[1]} representa los cuatro valores (un arreglo decalificaciones de un solo subindice) almacenados en la segunda fila del arreglo de doble subindice {studentGrade}.Los arreglos de doble subindice pueden considerarse como arreglos con elementos que son arreglos con un solo subidice. La funcion (average) calcula la suma de los elementos del arreglo. divide el total entre el numero deresultados de las pruebas y devuelve el resultado en formato de punto flotante.

para C++ seria asi:foto + grande
para C# seri asi: foto + grande