Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - Serapis

#2351
Es absurdo, preguntar que te resuelvan algo como eso...

Son matemáticas de niño de 8 años... hallar el mayor o menor de una serie.

Vas recorriendo la serie si el actual es menor que el que tenías como el menor, entonces ese valor pasa a ser el menor, es decir se 'memoriaza el valor del que ahora es el menor, y se mmemoria para poder en adlante compararlo con el resto... al final d ela serie el que consta como el menor, resulta serlo.
Como el primero de la serie no tiene con quien compararse, el primero se toma de entrada como el menor, luego el resto de comparaciones d ela serie comienza con el siguiente, es decir con el 1.

Hallar el mayor d ela serie, es lo mismo, pero manteniendo otra 'memorizado' (variable), para el considerado mayor hallado...

Y como decía, el código tan elemental, que no merece ponerlo, si alguien es incapaz de hacerlo por su cuenta, lo que debe hacer es dedicarse a otra cosa, que como mínimo "se le dé mejor".
#2352
Programación C/C++ / Re: funciòn en C
4 Julio 2018, 09:50 AM
Las variables, como sabes (o debieras saber) contienen valores...

Por lo general son declaradas en alguna parte (hay lenguajes que no exigen una declaración explícita (se deduce implícitamente de su uso)).

Sin embargo parece que tú esperas o crees que solo pueden estar declaradas en el cuerpo del código... pero también pueden estar declaradas como constantes, como retorno de funciones  (en ese caso, la función actuaría como una variable), como parámetros en funciones, etc... ése último caso descrito, es el tuyo.

Si se tienes un código como este:

entero edad
edad = DameMiEdad(fechaNacimiento, AñoActual)
mostrar edad


Y tu pasas estos datos:
edad= DameMiEdad(2000, 2018)
Te dirá que tu edad es 18 años...

Tu e parte alguna haces una asignación:
fechanacimiento= 2000
AñoActual = 2018

Esos son los nombres de los parámetros de la función... tu puedes pasar una contante (valor inmediato, como en el jeemplo), u otra variable o expresión numérica, siempre que sea del mismo tipo o sea convertida a dicho tipo (para que no genere error)...

es decir perfectamente podrías haber hecho:

así...
propiedad get DosMileniosDC
   Devolver 2000
fin propiedad
edad = DameMiEdad(DosMileniosDC, 2018)


ó...
entero malditoaño = 20 * 100
edad = DameMiEdad(malditoaño, 2018)


ó...
entero e = 8
entero c = 22
edad = DameMiEdad(((50 +10) * e) - (c * 40) ,  2018)


en el primer caso, al parámetro se la pasa el valor que devuelve una propiedad, en el segundo caso, el valor de otra variable, en el 3º caso, el valor de una expresión... y en ningún caso se ha hecho:
fechanacimiento= .....

Por que la idea de una función (del diseño léxico de una función), es precisamente decorrar la asignación de variables de una forma que nos parezca un único bloque, coherente, donde se exige el pasó de cada parámetro.... por supuesto el compilador,  tendrá que señalar una posición de memoria y pasar un valor a dicha posición o a un registro de la CPU, es decir a nivel atómico, es lo mismo que asignar el valor a una variable mediante el símbolo '=' ... pero más eficaz en el diseño, más rápido e intuitivo...

Lo demás, que preguntas no tiene sentido... si tu mismo dices que funciona el código, y si lo has programado tú, se supone que cada línea está ahí, porque la entiendes y has puesto lo que entendías que cabe poner...
Cuando un programador da nombres a variables, debe darles nombres de tal modo  que entienda su cometido, que su solo nombre sea autoexplicativo... la única razón para no hacerlo así es que sea algo tan sencillo, que no requiera más complicaciones, pero aún así, sobretodo para los novatos y estudiantes es buena práctica que el nombre dado a una variable autoexplique lo que hace.

Entonces:
esp=f-1
' esto lo hace a medias... esp, podría ser 'espacios' como podría ser 'esparragos', ó 'espera' ó 'espabiado' ó 'español' ó 'espartaco', ó... si es 'espacio', por qu´leches nio poner 'espacios = ...' te cobran por cada carácter que escribes?????.
En los 80 había que conformarse con una letra y a lo sumo con una letra seguida de un número porque la memopria era muy , muy limitada, ahora resulta de risa la estupidez en ahorrar caracteres a las variables.

Igualmente 'f'... por qué rayos no poner 'filas', pero más aún dado el que esa filas son las filas que tendrá el ejercicio, mejor sería señalarlo como: FilasDeAsteriscos...
Y finalmente llegamos al autoentendimiento del código:
EspaciosPorLinea = (AsteriscosPorLinea - 1)

Es un problema matemático, antes que de programación que... ...si "unos quedan delimitados por otros", la cantidad de delimitadores siempre es 1 menos, salvo que lo delimite también por fuera en cuyo caso es 1 más...  Así "As" delimitadas por "Bs"...
ABA
ABABA
ABABABA
ABABABABABABABABABABA
...siempre habrá una 'B' menos que 'A'
entonces aún mejor que:
EspaciosPorLinea = (AsteriscosPorLinea - 1)"
que es específico al problema sería
NumDelimitadores = (NumDelimitados -1)
es genérico se aplica a cualquier caso o cosa, pero si te resulta más abstracto, y te deja perplejo o con dudas, sigue siendo válido el
EspaciosPorLinea = (AsteriscosPorLinea - 1)
pero:
esp = f-1
Resulta lastimosos de entender...

...falta ver si te lo aplicas en adelante...
#2353
Ya, pero es que ese mensaje de errror, no se puede generar así como así...

VB6, tiene un límite de controles gráficos que se pueden cargar en un solo formulario... tal como señalas que tienes muchos objetos... solo puedo asumir que el problema esté por ahí...

Prueba antes de cargar con load... un msgbox que indique cuantos controles tienes cargados...

Código (vb) [Seleccionar]

Private Sub Form_Load()
    With Label1(0)
        .BackStyle = 1 ' opaco
        .BackColor = vbBlack
        .ForeColor = vbWhite
    End With
   
    For k = 1 To 9
        Load Label1(k)
        With Label1(k)
            Call .Move(k * 60, k * 60)
            .Visible = True
        End With
    Next

    Call MsgBox(CStr(Me.Controls.Count))
End Sub


y repite lo mismo, justo antes de que se origine el error, aver si viendo la diferencia de controles entre el antes y el después queda claro algo más...



Haz copia del formulario antes de nada (y su *.frx asociado)...

Una forma de reproducir dicho picturebox, es crear un nuevo proyecto vacío... y 'copiar el picturebox' y pegarlo al formulario de ese nuevo proyecto (si lo pegas en el mismo formulario-proyecto, corres el riesgo de que se las colecciones de controles aumenten su índice, pero pegado a un nuevo proyecto, cada control se mantiene con su índice (y tabindex) correctamente...

Si la copia resultó sin problemas, crea otro nuevo proyecto ahora corta el picturebox y pégalo allí... guarda cambios en los 3 proyectos, y luego la copia que pegaste en el proyecto nuevo previo, muévelo al proyecto original... y vuelve a guardar cambios... si sigue dando problemas sin más detalles será difícil saber qué es...
No puedes dar al menos el nº de error?... aquí tengo la ayuda en ingés, y no aparece ningún texto similar (traducido)...

De todos modos, por lo que me cuentas, creo que estás cometiendo un grave error al querer manipular gráficos complejos con controles de usuario... dichos controles realmente ni lo son, no poseen un handle propio, si no el del contenedor y sobrecargas innecesariamente el contenedor... aunque este tipo de 'controles' son muy livianos, precisamente por no tener un manejador propio...

Lo adecuado es tener un 'hiddenSurface', una clase que alberga un objeto bitmap, donde vas dibujando con las API de GDI32 y luego tras el dibujado lo vuelcas como gráfico al picturebox... allí si que no importa si luego tienes unos pocos controles line, o label, pero 4, 8, 12, 20, pero ya, no 150...
#2354
...y por fin pude tener un ratón agarrado adecuadamente, para un zurdo que mueve el ratón en sentido opuesto adónde avanza...

No he vuelto a haber otro que me permita configurarlo "to my way"...
#2355
...pués suerte, pero...

Las patentes duran 20 años, así que, que se asegure bien esa fecha de 1999...

Además, si la patente no es internacional, si solo se ciñe a España, o si está presentada en más países, pero no en Rusia... perderá el tiempo y algo de dinero en abogados, aunque si son decentes, le dirán (dados los documentos que presente), si merece o no la pena...
#2356
Es el típico problema entre la persona y el profesional.

Como profesional del fútbol, es indiscutible hasta donde llegó Maradona. Como indiscutible es lo penoso de hasta donde ha llegado como persona.

En cualquier caso, donde podría ser un referente para niños en el deporte, cabe en cambio intentar alejarlo lo más posible, porque los niños, no saben separar la vida personal de la profesional y al final resultaría mal ejemplo para los niños...

Pienso que los argentinos, van a tener que remplazar aquello de "la mano de Dios", por "la mano del Diablo"... porque a saber cuanta droga (dosis de drogas) habrá pasado por sus manos... asumo que hasta más que balones...
#2357
No es lógico, tantas preguntas sobre el tema...

Para qué termines de entenderlo de una vez, te pongo un eemplo simplón, asequible a todo el mundo (incluído niños de 8 años).

- Imagina que tienes un vehículo, coche (carro), moto, bicileta, etc... esto es como el dato en programación, una variable... el objeto que nos interesa hacer algo con él.
- Ahora imagina que has ido a trabajar en tu vehículo... lo aparacas en un  estacionamiento... la plaza donde está aparcado, trayendo el ejemplo a la programación, equivale a la dirección donde consta el dato (la plaza donde yace el vehículo)...

- Así vehículo y plaza ocupada, guardan exactamente la misma relación que dato y su localización en memoria. Piensa en ello, lo que no es razonable en uno, tampoco lo es en otro y viceversa...

Lógicamente mañana, puedes aparacar en esa misma plaza, pero posiblemente sea otra y seguramente cuando termines de trabajar, irás a otra parte y por tanto la plaza será otra... La plaza no se garantiza, por tanto tú necesitas saber siempre donde lo tienes aparcado y no dar por hecho que está en un sitio u otro siempre... pués lo mismo con los datos...

- Por tanto, la plaza donde aparcas es importante, pero ese dato no puede retenerse eternamente como si fuera única... tu vehículo (una variable), si será el mismo pero, puede o no estar aparacardo en una dirección u otra en cualquier momento dado. Luego igualmente no conviene guardar punteros de forma indefinida, sino a cada instante que se precise, tenerlo y mantenerlo y olvidarlo... exactamente igual que la plaza donde está aparacado tu vehículo, ahora está aquí, luego lo mueves y estará alló y puede que un momento ni recuerdes donde está, así que pulsarás el botoncito que incorpora el mando a distancia (que se incluye en el llavero), para hacelro sonar y reconocer donde está...

- Nada de la informática es un 'invento único', siempre se basa en experiencias cotidianas, o bien puede asemejarse bastante a dichas cosas...
#2358
Cita de: Tachikomaia en 29 Junio 2018, 04:03 AM
Nunca usé paréntesis en una condición, no sé si mi lenguaje lo admite.
"Mi lenguaje", no es un lenguaje del que podamos decir nada, si no especificas...
¿¿¿Es alguno conocido que usas con regularidad, tu preferido, uno propio que estés haciendo???

Cita de: Tachikomaia en 29 Junio 2018, 04:03 AM
Los paréntesis los "inventé" para mostrar que una misma expresión (sin paréntesis o sin suficientes paréntesis) se podría interpretar de distintas formas según dónde se pusieran.
Pués no, no inventaste nada... Supongo que habrás ido a la escuela, y habrás dado algo de matemáticas... y si tienes algo de memoria, podrías recordar que los paréntesis se aplican para dar prioridad y agrupar cordinadamente las expresiones...

En cualquier caso considera que una gramática que no tiene adecuadamente delimitado el orden de precedencia () se dice que es una gramática ambigua, y por consiguiente una misma expresión puede ser interpretada de modo diferente... lo cual se considera un grave error de diseño.

No da el mismo resultado:
 (9-2) + 5 = 12
 9 - (2+5) = 2
Aunque usemos los mismos valores, los paréntesis señalan que deben resolverse antes su interior, tanto antes cuanto más al interior...
((((((20-8) + 4) /2) + 1) -2) + 5) = 12
El primero en resolverse es 20-8, porque es el más adentro.


Cita de: Tachikomaia en 29 Junio 2018, 04:03 AM
Igual te faltó responder algo:
¿Cualquier relación puede expresarse sin necesidad de paréntesis, y se interpretaría bien?
No está bien formulada la pregunta... Como sigue sí:
¿Hay alguna forma de de formular expresiones que no requieran paréntesis?. SÍ
Hay 3 tipos de notaciones básicas:
Notación de infijo (o normal): Las que solemos usar, porque las entendemos bién al 'leerlas', los operadores aparecen a ambos lados y el operador en medio.
Ejemplos: A + B;  (A*B)+(C-(D*E)) <-- nota que los ejemplos son los mismos para los 3, para que veas las diferencias).
Notación de prefijo (o polaca): Los operadores van delante, los operadores detrás.
Ejemplos: +AB; +*ABC-*DE  
Notación de sufijo (o postfijo, inversa):Los operandos van delante, los operadores al final.
Ejemplos: AB+; AB*C+DE*-

Las dos últimas suelen llamarse Notación polaca (la de sufijo: polaca inversa), y no precisan el uso de paréntesis... La notación polaca es la que se ha venido usando en las calculadoras desde que llegó la electrónica digital... por los pocos recursos de hardware que demandaba. También suelen requerir menos pulsaciones de teclas.
Para pasar una expresión de infijo (normal) a una notación de sufijo, suele recurrirse al algoritmo Shunting yard, y en general suele hacerse uso de una pila para ello...
Supongo que si te cuesta entender expresiones simples, va a serte harto difícil implementar una pila y más el propio algoritmo...

Cita de: Tachikomaia en 29 Junio 2018, 04:03 AM
En otro sitio me recomendaron "ifs anidados, arrays, funciones, y objetos" pero no entiendo bien cómo aplicar esas cosas en este asunto.

Como siga así voy a tener que practicar hacer las complicaciones manualmente y cuando tenga más experiencia con eso intentar pasar a este nivel. No pensé que fuese tan difícil.
No sé que estás haciendo, pero hasta una docena de operandos (o la mitad para otros), puede resolverse casi que de cabeza si se tiene cierta práctica...

En general si tienes ciertos condicionantes que suelen ser repetitivos y no son excesivos, suele ser útil resumirlo en unas pocas funciones que devuelvan un boleano, y que la función evalúa 3, 4 parámetros...
por ejemplo la típica funcion: EsAñoBisiesto(año), es un buen ejemplo... aunque solo se pasa un parámetro (los otros se deducen de él, por ser datos conocidos, como los meses y duración de cada mes, etc), donde se analizan varias condiciones hasta llegar a un único valor Verdad o Falso.

Cuando la cantidad de condiciones es abrumadora, o cuando resultan difíciles de entender se recurre a una tabla de verdad, se ponen todas las variables que entran en juego con todos los posibles valores que pueden adoptar y cual es el estado final a cada caso... finalmente se extrae una función con todas las soluciones que arrojan verdad (o falso, si son menos en cantidad)... vamos lo que toda la vida en matemáticas se ha llamado expresiones algebraicas... pero

Por último, aunque no parece que estés muy ducho en el tema, cuando logres avanzar dale un repaso al algoritmo de Warshall (o de floyd-Warshall).
#2359
Da acuerdo que 5" son solo 5". Pero cualquier móvil (celular) normalito ya viene con mucha mayor resolución que lo que soñó windows 95 para sí...
#2360
Precisamente esa es una de las dos cosas que me gustan del navegador Lunascape...