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 - Xandrete

#201
Programación C/C++ / Re: Ayuda con notepad
14 Enero 2012, 16:11 PM
Te falta un compilador. Si usas Windows (y supongo que si empleas el Notepad++ usas Windows) puedes usar el MinGW, que es un port del GCC (GNU Compiler Collection, una colección de compiladores para varios lenguajes de programación, entre ellos C y C++). Va muy bien. Puedes emplear también CYGWIN, que no es propiamente dicho un compilador. Es un... hummm... ¿"emulador"? ¿"simulador"? ¿"cosa"? de sistemas Linux, donde, entre otras cosas, puedes instalar el gcc. Otra opción es quizás el compilador de Microsoft, el del Visual C++. Nunca lo he usado así que no sé que tal va.

Y bueno, el editor de texto ya lo tienes. Notepad++ supongo que ya te irá bien. También están Geany (del cual hay un port Windows), el editor del Visual C++ (hay una versión gratuita llamada Visual C++ Express... pero en cualquier caso es un programa MUY pesado... más de 200 megas en disco, si no me equivoco)...

Yo me imagino que el Notepad++ se puede configurar para darle la ruta del compilador y los argumentos que quieres emplear para C/C++ y, así, al darle a algún botoncito donde ponga "Compile" o "Compile and run..." te lo compilará usando la orden y el compilador que le hayas especificado, sin que tengas que escribirlo en la consola. Y si no, lo escribes en la consola y santas pascuas. Si al final te decantas por MinGW y con C/C++ te recomendaría empezar usando la siguiente orden: g++ -Wall -Werror -o tuprograma.exe tuprograma.cc. Si usas C en lugar de C++ PUEDES usar gcc en lugar de g++, usando la extensión .c para tus códigos fuente (digo PUEDES porque casi todo lo que hagas en C servirá en C++ y podrás compilarlo usando el mismo compilador de C++). -Wall sirve para que te muestre todos los "warnings" o advertencias, que son irregularidades que no llegan a ser errores y que por tanto, no impiden la compilación. Es interesante corregirlos todos y que el compilador no se queje por nada. -Werror es para que consideré cualquier warning como un error y que, por ende, no compile. Adicionalmente, a veces compilo con la opción -O2 que es para optimizar en la medida de lo posible el código al traducirlo a lenguaje máquina.

¡Bueno, saludos!
#202
Yo lo probaré :-)

Si no explota mi ordenador  ;D, edito y te doy el visto bueno.

Es broma, me fío de ti (y si explota, en realidad me harás un favor, xD)

EDITADO: Niiiiiice. Yo y Chuck Norris lo aprobamos!! Bonita presentación también, veo que has dedicado una cantidad nada desdeñable de líneas para hacerla  ;D Normalmente uso Win7 para para jugar (aunque estos últimos días lo estoy usando para casi todo, porque los drivers de la tarjeta de red inalámbrica que tengo en Ubuntu son un asquito y cuando estoy lejos del enrutador se va al carajo la conexión cada 2x3), y se agradece cualquier ayuda automática al mantenimiento rutinario del ordenador :-)
#203
De lucecitas nada. Es un dispositivo de alta tecnología para lanzar rayos de Fuerza. Fue el que usó Tom Cruise aquí (aunque el lo usó de un solo color, fiel a la tradición impuesta por Star Wars):

[youtube=425,350]http://www.youtube.com/watch?v=CRbhE3GRiUE[/youtube]
#204
No, no puedes hacer nada por todo lo que han dicho anteriormente. Y a parte de todo lo anterior, añado que la IP no es un identificador unívoco de tu ordenador. Considera lo siguiente: con una dirección IP (IPv4) se puede identificar un máximo de 224 dispositivos diferentes (y ni siquiera se utilizan todas las combinaciones posibles). En todo el mundo hay más de 2^24 dispositivos que requieren IP (sí, hay que hacer malabarismos).

Mira que siempre lo he dicho: lo mejor es instalar dispositivos de autodestrucción en los portátiles. Así, si te lo roban, lo activas y listo. Te cargas también tu ordenador, pero con la satisfacción de haber volado por los aires al bastardo que te lo robó  ;D.

Ainsh, perdona por intentar gastas bromas a raíz de de la pérdida de tu portátil D:

Aún así puedes denunciarlo dando las características físicas de tu ordenador... decir si tiene algún defecto o particularidad que lo identifique como tuyo, una foto quizás. Veo más probable que antes nos caiga un rayo a todos los del foro que recuperarlo así, pero poco más se puede hacer.

Oh, si tuvieras la dirección MAC de la tarjeta de red quizás si se pudiera hacer algo... no estoy seguro. Pero no creo que la tengas, así que da igual.

¡Saludos!

P.S. Ah... y lo del detalle del correo no me quedó muy claro. Si el ladrón te envió un correo (da igual si desde tu ordenador o desde cualquier otra máquina) si puedes rastrearlo. Si es medianamente inteligente, lo habrá hecho desde un ciber. Si es estúpido o no tiene ni repajolera idea de informática (y, si te envió un correo después de robarte algo, me inclino por una de estas dos últimas opciones), lo habrá hecho desde su casa, usando su propia conexión. En cualquier caso, ¿para que querría enviarte un correo? ¿Se regodeaba? ¿Te pedía un rescate, tal vez?

EDITO: Y... ¿cómo tenía tu correo? Bueno, esto último no me extraña tanto, a lo mejor tenías la opción de recordar tu correo en alguna aplicación como Messenger. En ese caso, si tenías también activada la opción de recordar la contraseña, ya estás cambiándola...
#205
Cita de: darkvector en 14 Enero 2012, 00:33 AM
;D ;D ;D seee podes enviarle un hermoso intruso y asi darles a los de tu alrededor XD apoyo al colega anterior jajjaa ;D ;D ;D

¿Eh :o? ¡No, nada de intrusos (gesto de indignación)! ¡He dicho palillo de dientes por el hilo telefónico!

P.S. Evidentemente, lo que dije en mi post anterior y lo que digo en éste hasta donde pone P.S. es coña. A lo mejor creías que lo decía en serio.
#206
¡Hola m@o_614 (y al resto  ;D)!

Yo me imagino que utiliza dobles punteros porque en C no se puede pasar parámetros por referencia con el & a las funciones (eso es algo nuevo de C++), así que para lograr lo mismo, lo que se hace es pasar un puntero al dato que querías que se modificara dentro de la función (de hecho, eso es lo que hace internamente C++). Como has dicho lo de pasar el parámetro con el ampersand (&) en los comentarios de tu código, yo me he imaginado que el código era para C++, pero luego veo el resto y compruebo que es un código típicamente C, así que no sé interpretar muy bien si lo quieres para C estricto o si se pueden incorporar novedades C++.

Si estás programando en C++ tienes cositas para facilitarte la vida. Por ejemplo, en lugar de usar malloc, puedes usar el operador new (y te ahorras incluir una librería). Por otro lado, puedes usar la librería string de C++ en lugar de la librería de C. Una de sus principales ventajas es que te permite usar un objeto string que te evita lidiar con tamaños de arrays y demás "basura" (lo digo cariñosamente  ;D) que te aleja de lo que es la solución al problema en sí mismo. Por otro lado, te recomendaría restringirte a la librería estándar para estas cosas (lo digo por lo de conio). Y también te diría que no usaras fflush para limpiar el buffer de entrada (explicación de estos dos últimos consejos en uno de los post con chincheta de este mismo foro: http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html). De todas formas, eso es harina de otro costal. Lo que importa aquí son los punteros, ¿no  :D?

Yo también he hecho mi propia versión del programa (pero en C++):

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
#define  MAX_REG 20
using namespace std;

struct Ingreso {
string concepto;
string RFC;
float monto;
int mes;
Ingreso* sig;

};

void rellenarDatos(Ingreso* ing) {
cout << "Concepto: ";
cin >> ing->concepto;
cout << "RFC: ";
cin >> ing->RFC;
cout << "Monto: ";
cin >> ing->monto;
cout << "Mes: ";
cin >> ing->mes;
}

Ingreso* agregarIngreso(Ingreso* ultimoIngreso) {
Ingreso* siguienteIngreso;
if (ultimoIngreso == NULL) siguienteIngreso = new Ingreso;
else siguienteIngreso = ultimoIngreso->sig = new Ingreso;
rellenarDatos(siguienteIngreso);
return siguienteIngreso;
}

Ingreso* introduceRegistro() {
int i;
Ingreso* pIngreso;
Ingreso* ultimoIngreso;
pIngreso = ultimoIngreso = agregarIngreso(NULL);
for(i=1;i<MAX_REG;++i)
ultimoIngreso = agregarIngreso(ultimoIngreso);
ultimoIngreso->sig = NULL;
return pIngreso;
}

int main() {
cout << "Ingresa los datos del registro" << endl;
Ingreso* pIngreso = introduceRegistro();
/* ... */
}


No me preocupado por el tema de la entrada de datos mucho. Para controlar el tema del buffer de entrada y estas "tonterías" (cariñosamente otra vez) sólo habría que tocar la rutina rellenarDatos.

Por cierto, BlackZeroX, "peaso" código, ¿no  :rolleyes:?

¡Saludacos!

#207
Cita de: ghastlyX en 13 Enero 2012, 21:14 PM
Por ejemplo, rara vez se hacen comentarios, las variables suelen tener nombres cortos poco descriptivos (para otros programadores que lo lean al menos) y a veces se usan pocas funciones. Especialmente en los nombres de las variables, yo que participo a menudo suelo utilizar para casi todo nombres de como mucho unas cinco letras, ya que se tarda menos en escribirlo y en estos concursos la velocidad es importante. Además, aunque para otros sean poco descriptivos, son nombres genéricos que utilizo siempre para los mismos conceptos y por lo tanto para mí son descriptivos.

¡Hola ghastlyX!

Nunca he participado en concursos (y en general, no he participado en ninguna prueba contrarreloj de retos de programación, salvo en exámenes). Suelo programar para jueces online y de vez en cuando visito Topcoder (para resolver retos en modo práctica... nada de competiciones por ahora). En ningún caso podré dar un criterio más fiable que el tuyo pues carezco de la experiencia que tienes tú en el ámbito de los concursos. De todas maneras, la mayoría de las cosas que dices me parecen perfectamente lógicas y aceptables en un evento de competición, coincido en ellas. Lo que no veo tan claro es el tema de ahorrar funciones. ¿Crees que compensa ahorrarse escribir cabeceras de funciones sólo para ganar velocidad? Este problema de los palíndromos es muy fácil, y puedes hacerlo todo en el main a la primera. Pero hay problemas mucho más diabólicos que éste, y si empiezas a hacerlo todo en el main y te equivocas en algo, puede ser mucho más difícil depurar el error. Además, muchas veces es inevitable cuando tienes que usar algoritmos cuya implementación más natural sea la recursiva (por ejemplo, recorridos por árboles). ¿No crees que sería mejor adoptar una postura intermedia? Por ejemplo, usar todas las funciones que hagan falta y, para ahorrarse el paso de parámetros, emplear variables globales.

En fin, son cosas de un enamorado de las funciones, tampoco quiero abrir un debate sobre ese tema >.<

Por cierto, nice code ;)
¡Saludos!
#208
Hola. Leyendo las reglas de este foro, me encuentro con el siguiente párrafo:

CitarEste antes era conocido como el foro de "Troyanos y Virus", donde se hablaba de el uso de herramientas para ocultar aplicaciones de malware, guias de infección, y algunos otros temas más.
De ahora en adelante, cualquier mensaje que sea "revivido" respecto a este tema, será bloqueado, y se pondrá un mensaje avisando de este cambio.

¿Cuáles son los límites? Sigo viendo muchos temas acerca de ocultar malware, infectar y demás mandanga, así que, ¿qué es lo que se bloquea exactamente? ¿Se refieren, quizás, a los temas que tienen que ver con el nombre del foro?

En cualquier caso, no tengo tampoco ningún interés en infectar a nadie, ni en mandar troyanos ni en crear virus ni demás ponzoña (quizás algún día sí me interese, con fines didácticos, probándolos en máquinas virtuales), pero me encanta leer sobre estos temas, ya know ::)?

¡Saludos!
#209
Cita de: rir3760 en 13 Enero 2012, 19:03 PM
Un problema (común, me temo) es aprender C++ sin sacar provecho de las facilidades que provee su biblioteca estándar. Como ya comento Xandrete lo mejor seria utilizar la clase "vector" (y de pasadita la función "sort").

Pero si la idea es practicar con el uso de arrays y punteros hay errores que corregir empezando por los nombres de los encabezados. Por favor revisa el tema |Lo que no hay que hacer en C/C++. Nivel basico|

En lo general el programa no funcionara correctamente por lo ya comentado: la declaración de una variable con el mismo nombre que un parámetro no es valida y el algoritmo tiene limites incorrectos.

La función de ordenación corregida es:
Código (cpp) [Seleccionar]
void ordenar (int arreglo[])
{
  int i, j, temporal;
 
  for (i = tam - 1; i > 0; i--)
     for (j = 0; j < i; j++)
        if (arreglo[j] > arreglo[j + 1]) {
           temporal = arreglo[j];
           arreglo[j] = arreglo[j + 1];
           arreglo[j + 1] = temporal;
        }
}


Un saludo

Yai!! Te adelantaste  ;)

Hay otras cosas que no comprendo. ¿Por qué en el main imprimes dos veces el vector arreglo? Otra cosa (aunque parezca una tontería): ¿por qué imprimes un espacio si después vas a poner un salto de línea? Me refiero a...

Código (cpp) [Seleccionar]
cout<<arreglo<<" "
cout<<endl


Otra cosa, no hagas el cin ni cout sobre arreglo, porque es un puntero. Poder, SE PUEDE escribir un puntero, porque al fin y al cabo, no es más que un valor numérico, pero no es lo que pretendes. Me imagino que lo que querías hacer es cin >> arreglo[ i] (o lo propio con cout)

Hay muchos errores no algorítmicos... ¿no crees que has sido muy precipitado a la hora de escribir el código? Es una tarea para la uni, dices. Pues yo me inclino a pensar algo de lo siguiente:

1) O no te lo has tomado con suficiente seriedad.
2) O andas perdidísimo en la asignatura donde te hayan mandado esto. O por lo menos, te falta aclarar un poco el tema de los punteros.
3) O te estabas cayendo de sueño  ;)

Bueno, bueno, ¡saludos y a ver si lo haces con más calma!

EDITO: Me acabo de dar cuenta que lo de la falta de [ i] es porque usas el recuadro de las citas y no el del código... y claro, [ i] es la etiqueta usada para poner cursivas. Fallo mío por esta parte    :silbar:
#210
Puedes hacer que le explote el enrutador enviándole un palillo de dientes por el cable de teléfono. ;D ;D ;D

Si no sabes donde está exactamente, haz un broadcast del palillo y así jodes a todos los que estén a tu alrededor.