| |
|
1241
|
Programación / Programación C/C++ / Re: Punteros
|
en: 29 Mayo 2020, 02:30 am
|
Saludos, - El tema de los punteros es un lío XD, yo no lo acabo de digerir completamente, cada vez que los necesito le echo una ojeada a este Paper: https://openlibra.com/es/book/introduccion-a-los-punteros-en-c al menos dándole un par de leídas y poniéndolo en práctica lo entiendo por un tiempo 
- Wow, yo pensé que los punteros eran simples direcciones de memoria, pero al parecer son rangos de direcciones de memoria donde el tamaño del rango es el tipo de variable. - Estoy haciendo el siguiente experimento intentando sumarle +1 al puntero para que apunte al siguiente caracter pero no lo hace, este le suma +4 porque el tipo es int. Pero si lo hago con char me manda una advertencia el compilador: /* Realice un programa que tenga una función que mediante apuntadores pueda transformar un número entero en una cadena de caracteres formada por los dígitos del número entero. */ #include <stdio.h> int main() { int numero = 1869898055; // "Gato" en decimal litle endian int *puntero = № printf("Puntero - 1 = %p\n", puntero - 1); printf("Puntero = %p\n", puntero ); printf("Puntero + 1 = %p\n", puntero + 1); for (int i = 0; i < 4; i++) { puntero += 1; } return 0; }
C:\Users\EdSon\Desktop>gcc punteros.c -o punteros.exe && punteros.exe Puntero - 1 = 0028FF20 Puntero = 0028FF24 Puntero + 1 = 0028FF28 G☺,Ç /* Realice un programa que tenga una función que mediante apuntadores pueda transformar un número entero en una cadena de caracteres formada por los dígitos del número entero. */ #include <stdio.h> int main() { int numero = 1869898055; // "Gato" en decimal litle endian char *puntero = № printf("Puntero - 1 = %p\n", puntero - 1); printf("Puntero = %p\n", puntero ); printf("Puntero + 1 = %p\n", puntero + 1); for (int i = 0; i < 4; i++) { puntero += 1; } return 0; }
C:\Users\EdSon\Desktop>gcc punteros.c -o punteros.exe && punteros.exe punteros.c: In function 'main': punteros.c:8:19: warning: initialization of 'char *' from incompatible pointer type 'int *' [-Wincom patible-pointer-types] 8 | char *puntero = № | ^ Puntero - 1 = 0028FF23 Puntero = 0028FF24 Puntero + 1 = 0028FF25 Gato
|
|
|
|
|
1242
|
Programación / Bases de Datos / Re: SQL editor
|
en: 29 Mayo 2020, 02:08 am
|
|
- Para SQL Server recomiendo SQL Server Management Studio Express, yo trabajo con la 2008R2, las nuevas versiones pesan varios Gigas XD.
- Para MySQL tienes MySQL WorkBench, aunque yo prefiero PHPMyAdmin
- Un Editor gratuito y universal es HeidiSQL
- Depende mucho del tipo de ayuda que necesites, yo utilizo SublimeText para formatear mi código debido al autocompletar, cursores múltiples, etc. Para ejecutar el código SQL Server Management Studio o PHPMyAdmin o HeidiSQL
|
|
|
|
|
1243
|
Programación / Bases de Datos / Re: Trigger SQL
|
en: 29 Mayo 2020, 02:03 am
|
Saludos, - Veo unas discrepancias entre tu modelo de datos, el enunciado y tus ejemplos ... Por ejemplo si yo inserto '33333333Z' no es lógico que se guarde '33333333W' como nuevo_valor XD. Por otro lado si actualizo '33333333Z' a '22222222H', lo lógico que se guarde como nuevo _valor '33333333Z' XD - Voy a considerar lo que yo considero lógico, luego puedes hacer las correcciones que veas convenientes. Además voy a suponer que estás utilizando Microsoft SQL Server, si no es el caso puedes avisar. /* USE master DROP DATABASE db_prueba */ CREATE DATABASE db_prueba GO USE db_prueba CREATE TABLE tb_persona ( dni CHAR(9), nombre VARCHAR(50) ) INSERT INTO tb_persona VALUES ( '11111111X', 'jaimico' ) CREATE TABLE tb_logs ( accion CHAR(6), nuevo_valor CHAR(9), viejo_valor CHAR(9) ) GO CREATE TRIGGER tr_persona_insert ON tb_persona AFTER INSERT AS INSERT INTO tb_logs VALUES ( 'insert', (SELECT dni FROM INSERTED), NULL ) GO CREATE TRIGGER tr_persona_delete ON tb_persona AFTER DELETE AS INSERT INTO tb_logs VALUES ( 'delete', NULL, (SELECT dni FROM DELETED) ) GO CREATE TRIGGER tr_persona_update ON tb_persona AFTER UPDATE AS INSERT INTO tb_logs VALUES ( 'update', (SELECT dni FROM INSERTED), (SELECT dni FROM DELETED) ) /////////////////////////////////// INSERT INTO tb_persona VALUES ('33333333Z', 'paco') SELECT * FROM tb_logs DELETE FROM tb_persona WHERE dni = '11111111X' SELECT * FROM tb_logs UPDATE tb_persona SET dni = '22222222H' WHERE dni = '33333333Z' SELECT * FROM tb_logs
Mis resultados:+--------+-------------+-------------+ | accion | nuevo_valor | viejo_valor | +--------+-------------+-------------+ | insert | 33333333Z | NULL | +--------+-------------+-------------+ | delete | NULL | 11111111X | +--------+-------------+-------------+ | update | 22222222H | 33333333Z | +--------+-------------+-------------+ - En SQL Server exiten las tablas predeterminadas INSERTED y DELETED que solo existen para los TRIGGER, dependiendo de la Acción realizada estos contienen los campos Insertados, Actualizados o Eliminados: +--------+-----------------------------------+-----------------------------------+ | Acción | INSERTED | DELETED | +--------+-----------------------------------+-----------------------------------+ | INSERT | Filas insertadas | NULL | +--------+-----------------------------------+-----------------------------------+ | UPDATE | Filas despues de ser actualizadas | Filas antes de ser actualizadas | +--------+-----------------------------------+-----------------------------------+ | DELETE | NULL | Filas eliminadas | +--------+-----------------------------------+-----------------------------------+
|
|
|
|
|
1244
|
Programación / Desarrollo Web / Re: Duda funcion javascript
|
en: 28 Mayo 2020, 23:12 pm
|
Saludos, - Lo siguiente me funciona a mí según e entendido tu enunciado: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script> var charSet = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz0123456789" function addInfo() { var lista = document.getElementById("lista") // Tamaño del String aleatorio es entre 3 a 10 caracteres lista.innerHTML += "<li>" + genStringAleatorio(numAleatorio(3, 10)) + "</li>" } function genStringAleatorio(tam) { var stringAleatorio = "" for (var i = 0; i < tam; i++) { // Se va extrayendo un caracter aleatorio desde el charSet stringAleatorio += charSet[numAleatorio(0, charSet.length - 1)] } return stringAleatorio } function numAleatorio(min, max) { // Genera un número aleatorio entre min y max incluyéndolos return Math.floor( Math.random() * (max + 1 - min) ) + min } </script> </head> <body> <ul id="lista"> <li>Lorem ipsum dolor sit amet</li> <li>Consectetuer adipiscing elit</li> <li>Sed mattis enim vitae orci</li> <li>Phasellus libero</li> <li>Maecenas nisl arcu</li> </ul> <input type="button" value="Añadir elemento" onclick="addInfo()"> </body> </html>
- HTML5 es soportado completamente en la actualidad, mejor usar esa sintáxis. Con respecto al javascript yo prefiero seguir utilizando la sintáxis clásica, al menos por este año más XD. - Dependiendo de la complejidad de los elementos a crear suele ser mejor utilizar innerHTML para cosas muy sencillas, luego createElement() para cosas algo más complejas y documentFragment para crear elementos complejos con muchos sub-elementos como formularios o árboles de elementos.
|
|
|
|
|
1247
|
Programación / Desarrollo Web / Re: pregunta angular y web services
|
en: 27 Mayo 2020, 05:08 am
|
|
- No soy experto en Angular pero tengo entendido que Angular trabaja exclusivamente en Front-End ya que al final es javascript, CSS y HTML. Además Angular tiene la manía de dar la posibilidad de subdividir bastante el código mediante Clases (ng generate class), Interfaces (ng generate interface), Servicios (ng generate service), Componentes y Módulos. Todos estos al final son Clases o partes de Clases que de importan, heredan o inyectan en caso de los Servicios.
- Un Servicio en Angular solo está disponible para tu proyecto (Front-End) y está a la espera de ser Inyectado en algún Componente que lo requiera; un Servicio Web está en la Web y se puede utilizar en cualquier proyecto que lo implemente.
|
|
|
|
|
1248
|
Programación / Desarrollo Web / Re: [Pregunta]: ¿Cómo puedo resolver este problema con mi diseño?
|
en: 27 Mayo 2020, 02:04 am
|
Saludos, - Dependiendo del grado de manipulación sobre los Items podrías usar Table, Flex, Grid o Flex + Grid. Table sería lo más sencillo, en todos los casos lo mejor es hacer que el navegador haga el cálculo. La ventaja de Table es que lo tiene innato el espaciado entre Celdas ( border-spacing) y el crecimiento equitativo de las Celdas hasta rellenar todo el espacio disponible. Con Table<style> .tbl-container { background-color: red; border-spacing: 5px; width: 100%; } .tbl-container td { background-color: orange; } </style> <table class="tbl-container"> <tr> <td> </td> <td> </td> <td> </td> </tr> </table>
Con Flex<style> .ul-container { background-color: red; display: flex; padding: 0; } .ul-container li { background-color: orange; flex: 1; list-style: none; margin: 5px 5px 5px 0px; } .ul-container li:first-child { margin-left: 5px; } </style> <ul class="ul-container"> <li> </li> <li> </li> <li> </li> </ul>
- La ventaja de Flex es que se puede manipular cada Celda individualmente, es más complejo su uso pero dependerá de los requisitos de tu proyecto.
- Por cierto a lo que @Nebire se refiere es que tienes que calcular la medida de cada espacio que se reparte, como quieres medidas relativas a un total 100% pues haces eso, repartes todo hasta llegar a un 100%, por ejemplo consideras los márgenes que en total serán 4 (postes) y luego las 3 cajas naranjas en sí (vallas), tenemos 7 objetos que se deben repartir, entonces en mi caso reparto un 1% * 4 para los márgenes y 32% * 3 para las cajas, dando todo un 100%: Con Float<style> .ul-container { background-color: red; overflow: hidden; padding: 0; } .ul-container li { background-color: orange; float: left; list-style: none; margin: 1% 1% 1% 0; width: 32%; } .ul-container li:first-child { margin-left: 1%; } </style> <ul class="ul-container"> <li> </li> <li> </li> <li> </li> </ul>
|
|
|
|
|
1249
|
Sistemas Operativos / Windows / Re: Tengo problema con mi pc Ojo, no econtre este tema aqui
|
en: 26 Mayo 2020, 02:25 am
|
|
Saludos,
- Cuando tiene problemas para leer o escribir desde el medio de instalación o el disco duro respectivamente, suele tardar un buen tiempo ahí. Me ha pasado algunas veces pero a lo mucho a tardado media hora XD.
- Aunque ahora que recuerdo, en mi Lenovo Y50-70 se quedó ahí más de 30 minutos ... al final instalé Windows 8, no insistí. Podrías revisar en tu BIOS que esté deshabilitado el OS Protection, también asegurarse que tu medio de instalación este funcionando bien, lo mismo con el disco duro del PC.
|
|
|
|
|
|
| |
|