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

#21
Programación C/C++ / Re: ordenar reguistros
15 Enero 2011, 18:32 PM
Si recién estás empezando con vectores (como puedo notarlo) no te recomiendo meterte ahora en listas enlazadas...
Mejor sigue el consejo del algoritmo sencillo que te describió Khronos14...

Este parece un clásico problema de escuela secundaria...
Algunas consideraciones:
-En tu función burbujas usas variables no declaradas (contadores como w)
-Yo había aprendido que el método burbuja era el que comparaba j con j+1... ahora veo que muchos ponen ésto como método burbuja, me gusta más el otro... es factible hacer más optimizaciones (en la wikipedia está explicado en pseudocódigo como yo digo, pero implementado en C de la manera que tu pones)
-Vos querés ordenar por edades y hacés esto:
Creas un nuevo arreglo de enteros donde copias las edades
Las ordenas
Buscas las edades del arreglo ordenado (en el orden en que aparecen) en el vector de estructuras y vas imprimiendo.

Por que no directamente ordenas el vector de estructuras
¿Sabías que podés igualara dos estructuras? Osea, hacer la siguiente asignación...

struct alumno a, b;
//Acá hago un ingreso
a=b;

Así compararías x[ i].edad y x[j].edad e intercambiar x[ i] y x[j]...

Porque sino luego tienes que hacer la búsqueda, es un método muy poco óptimo...
Además de los problemas que aquerrea que tengas edades iguales... (en ese caso las mostraría muchas veces)
#22
http://mazard.info/tutos/tuto_winsock.pdf

Acá está bastante sencillo, muchos manuales te empiezan a explicar detelles del protocolo TCP/IP o te empiezan a decir como están compuestas las estructuras que usás en la programación de socket, cuando en verdad, si lo que querés es lograr una comunicación servidor-cliente y no una comprensión a fondo del protocolo, son innecesarias dichas explicaciones.
#23
Bueno, para resolver tu duda en concreto te doy esta respuesta:

Podrías poner un do { } while que abarque todo desde que tiene que elegir la opción hasta el final y hacer que todo repita con la condición de que r!=1 y r!=2. Estilo

do{
Elegis opcion

Proceso de ordenamiento
} while (r!=1&&r!=2);

Obviamente que podrás decir... pero sí yo ya comprobé q r!=1 y r!=2 en el último else! Por qué tengo que poner un do {} while que vuelva comparar y no poner un GOTO!! xD... Bueno (por lo menos a veces yo pienso cosas así) la verdad es que no todo es optimización xD, y poner un do { } while contribuirá muchísimo a la lectura del código... Además, si bien matemáticamente creo q es más óptimo, no creo q se note...

Acá algunas aclaraciones que te hago:
-En vez de copiar dos veces el algoritmo de ordenamiento cambiando tan sólo < por >, lo que comúnmente se hace (especialmente cuando se usan algoritmos más complejos) es independizar el algoritmo que ORDENA del que COMPARA. Así puedes hacer una función como la siguiente (ver explicación abajo):


int funcion (int a, int b, int i)
{
 if (a>b)
    return !i;
 if (a<b)
    return i;


Explicación: esta función toma dos enteros, a y b y los compara. El entero i está para indicar sí querés ordenar ascendentemente o al revés... por qué?
Pués, porque fijate que si i=0 la función devolverá 1 cuando a>b y 0 cuando a<b y si i=1 la función devolverá 0 cuando a>b y 1 cuando a<b...
Así el valor de i dependerá del sentido de ordenamiento elegido y en el if del algoritmo de ordenamiento pondrás dicha función...


-Declaras una variable auxiliar temp cada vez que vas a intercambiar los números, creo que sería mejor ya tenerla declarada antes, en la parte que declaras todas las variables.

-El algoritmo que usaste primera vez creo que es un método burbuja de ordenamiento, en el segundo for podrías usar j<10-1-i
En dicho ordenamiento mientras ordenas vas mostrando array, cuando según el algoritmo que usaste, luego de cada iteración del bucle principal queda ordenado y listo para mostrar array[10-i] y no array...

-Espero que entiendas bien lo que estás haciendo, el error que te corrijieron al principio (en el intercambio) demuestra que no prestaste mucha atención... espero que entiendas también el método que usas. Sino has lo siguiente, recorta muchos papelitos y a cada uno le pones un número... luego los desordenas todos y te pones a ejecutar el algoritmo tu mismo como si tu fueses la computadora, te dará una mayor comprensión del algoritmo que estás utilizando y como optimizarlo

-No me gusta mucho el algoritmo que usas luego, es correcto, pero pereferiría el de incerción (tuve que buscar como se llamaba el que yo me refería pq soy malísimo para los nombres xD) bueno, o sí no el de burbuja con la optimización de que busque hasta donde se hizo el último intercambio...
#24
Lo mejor sería que pongas a ver hasta donde das, o mas o menos que orientación tienes (en esto de la programacion) en tu escuela y así mostrarte los ejercicios mas acordes...
Por ejemplo, en mi escuela con saber más o menos algún método de ordenamiento, búsqueda dicotómica y secuencial bastaba, otras dan más (incluso listas enlazadas) y otras dan menos... Dejo de decir para no confundirte, sólo te pediría que a la hora de estudiar tengas en vista siempre eso... el temario!

Lo que le digo a mis alumnos que tuve (doy particular a veces): para programar tenés que saber bien QUÉ querés que haga tu programa y cuales son los INGRESOS (las variables que vos pones por tecleado)

Ejercicios que espero que te ayuden...

Ingresas las coordenadas (x, y) de n puntos (n es una variables que tambien debes ingresar). Dado esos puntos, calcular la cantidad de puntos en cada cuadrante y sobre cada eje. También calcular la distancia entre un punto y su sucesivo en el ingreso (osea del primer punto con el segundo, el segundo con el tercero, etc)

Ingresar una frase y determinar si es palíndromo o no, sin importar los espacios ni las mayúsculas. Ejemplo: "Anita   lava la ti  na". La salida sería "Sí, es palíndromo".

Ingresar una frase y que te diga la cantidad de palabras de la misma. (una palabra es un conjunto de caracteres que empiezan por el principio de la frase o por un espacio y terminan en un espacio o el fin de la frase). Luego que te lo muestre en escalera.
Ejemplo: "Voy    a aprobar elexamen"
La salida sería:
"Cantidad de palabras: 4
Voy
Voy a
Voy a aprobar
Voy a aprobar elexamen"

Mucha suerte, aunque con la experiencia que tengo si eres de los que debes materias en 3 días no se puede hacer mucho
A menos que:
-Tengas en claro bien lo que te van a tomar. (Esto es importantísimo, porque en programación a muchos les cuesta que les pueden tomar "de todo" osea un problema totalmente diferentes a los que dieron usualmente, eso es cierto, porque el verdadero programador tiene que tener la lógica suficiente para que con las herramientas más simples que tiene, hacer frente a una problemática de envergadura... PERO... a veces en las escuelas se avivan de que a lo mejor a un chico no le gusta la programación y de verdad va a seguir una carrera que nada que ver y no la va a ver nunca más en su vida, y por lo tanto suelen ser menos exigentes a veces... y entonces toman siempre lo mismo... así q te recomendaría eso!!! saber lo que te van a tomar... estudiar de los apuntes que los profesores recomendaron porque de ahi van a sacar los ejercicios, no de aca...)
-Que estudies con seguridad y que hagas un plan para cubrir mas o menos todos los aspectos que debes saber sin detenerte mucho en uno y que te falte de lo otro...

Exitos
#25
En verdad ya posteó un código xD... si se dan cuenta su "problema" ya es un código xD...
sé que no se pueden resolver tareas, pero esto es un consejo... yo no daré nada servido, simplemente la explicación que daría un profesor para que de ahí lo haga ella usando su lógica...


primero entendé que significa "TpNatLargo &n"... no es un numero... sino que estas pasando como argumento la direccion a un array de numeros. Seguramente cada uno de esos numeros q conforman el array son naturales del 0 al 9, de modo que en su conjunto, el array constituya un gran numero largo... (probablemente TpNatLargo no sea más que una cadena de caracteres definida con ese nombre, pues conviene usar una cadena por su simplicidad para imprimirla en pantalla, debido a q no necesitaras un bucle para imprimir "casillero por casillero")

Agarra una hoja cuadriculada e imaginate q cada casillerito es una posicion en el array y ahi podes poner un numero del 0 al 9...
Ahora pensá que harías si fueras la pc para mostrar el número ese...
Después escribí otro número abajo y fijate lo que hacés para sumarlo...
Escribí el programa hasta ahí
Después fijate lo que haces para multiplicarlo. Acordate que si hiciste una funcion G(x,y) que suma dos "numeros largos" podes sumar tres numeros (x, y, z) haciendo G(x,G(y,z))...

Espero que no haya escrito todo esto para nada...
#26
Pues si es ésto el que creo el post, no tenía mucha idea de lo que en verdad hace el código que pone.
Es más, me tomaría el atrevimiento de decir que no lo leyó, ya que en el dice:
" Introduce los factores A, B y C de la ecuacion: Ax^2+By+C=0"


y al hablar de una sección cónica tenemos algo así: (sacado del artículo de wikipedia posteado anteriormente)
ax2 + bxy + cy2 + dx + ey + f= 0
Que tiene infinitos pares (x,y) que satisfacen la ecuación. Puediendo ser representados esos pares como puntos siendo "x" la abscisa e "y" la ordenada del punto (no es una gráfica de función ya que pueden existir diferentes "y" para un mismo "x"). La figura determinada ahora sí puede ser cualquier cónica...
#27
Por supuesto, yo creo que "asuntos hackers" es resolver con pasión problemas de manera óptima y original... o acaso te refieres a otras cosillas?  :silbar:
#28
Programación C/C++ / Re: Tutorial C
2 Enero 2011, 04:37 AM
Depende de que espere cada persona del C está será la mejor manera de empezar...
Para alguien que su orientación en el C sea para el lado de la programación de PICs lo encontrára, creo yo, realmente interesante...
Para otros que programan en C como base para resolver programas matemáticos... para hacer algo más abstracto diría yo, probablemente no le sea la manera más interesante de empezar...
Yo sugeriría cambiar el título, el manual parece apuntar para un lado que no estricatemente el de un tutorial en C de formas generales sino algo orientado o especializado en algo...
#29
Creo que no te responderán, no sólo porque va contra la norma de no resolver tareas porque además está muy poco claro...

La gráfica (en el plano real) de una FUNCIÓN cuadrática es siempre una parábola...

y=-x^2+2

Aquí la gráfica sería igual a la de -x^2 "corrida" dos enteros hacia arriba... y la de -x^2 es el resultado de aplicar simetría axial con respecto al eje x a la gráfica de x^2.

Ahora, si tu te refieres a una ECUACIÓN cuadrática... osea a algo parecido a:

-x^2+2=0

Está es una ecuación (como muy bien el nombre dice), que puedes hallar los valores de x (reales o imaginarios) que satisfagan la ecuación...


Ahora, el post deja confuso si quieres graficar una función cuadrática dependiendo de sus coeficientes o deseas encontrar las soluciones de una ecuación cuadrática (dada sus coeficientes) y representar esos valores en el plano real o imaginario (dependiendo de las soluciones)


El programa que pusiste encuentra las soluciones de la cuadrática... espero que tú mismo lo entiendas y no lo hayas copiado, porque ese ya sería un paso en falso...

Creo que es un programa muy lindo de hacer si se trata de graficar la función cuadrática y sería una pena que no te respondieran porque te expresaste de forma escasa...

Otra cosa: usa las etiquetas GeSHi para que el código se vea de forma más clara...
#30
Programación C/C++ / Re: Criba de Eratostenes[C]
30 Diciembre 2010, 02:46 AM
:O esto merece un comentario, creo q en uno de los primeros post q hice en el foro se trataba sobre la Criba de Eratostenes...

Algunas acotaciones bobas:

-en tu caso hiciste una correspondencia entre la posicion en el vector y el numero que representa dicho "hueco" de la criba... haciendo esto desperdicias 2 numeros... ya que el 1 y el 0 no los necesitas en el análisis y sí son posibles "i" (posiciones). Esto podria solucionarse haciendo que la posicion "i" (o el hueco "i" del vector q representa la criba como me gusta llamarlo) represente al número i+2... de ese modo no desperdiciar 2 numeros... En cualquier caso, en el primer bucle (el que llena todo con "1") llenas la posicion 1 que no necesitas porque no usas.

-Yo no usaria una funcion, es algo inecesario, la incluyes en un bucle, la llamas muchisimas veces (depende de la longitud de la criba), es preferible escribir todo en el bucle mismo y evitarse todo los pasos q consisten en el paso de argumentos... hasta le haces un favor seguramente (y mientras este prolijo) a cualquiera q lo lea (y a ti mismo, escribes menos). Además (y si todavía te ostinas con utilizar funciones) lo que está definido en el define (si mal no recuerdo) vale para todo el código, es un desperdicio que pases como argumento dicha constante...

-El vector representa un "estado" de los numeros que se identifican con su posicion. Traducido: el número 13 se ve representado por el entero vectorPrimo[13]... lo que esta adentro de esa variable, osea, el valor de vectorPrimo[13] indica meramente un estado logico del numero, osea indica si es primo o no... por lo tanto y para ahorrar memoria yo usaria un vector char en vez de un int (dado que estas almacenando solo 1 y 0).

-En el programa cuando encuentras un primo "x" tachas todos los multiplos de "x"... Pero te olvidas que ya habias encontrado primos menores que "x" y que tachaste los multiplos de estos... muchos de estos seran tambien multiplos de "x" que volveras a revisar... mejor yo diria que en el bucle de la funcion empieces a tachar los multiplos de x a partir de x*x en vez de 2*x...

Espero que se me entienda, sé que no tengo la mejor ortografía y que a veces mis oraciones se extienden demasiado...

Próspero año nuevo!