Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: SDCC en 27 Octubre 2018, 02:53 am



Título: ¿Estructuras de datos en C++?
Publicado por: SDCC en 27 Octubre 2018, 02:53 am
Buenas a todos.Tengo contemplado leer algun libro y profundizar un poco en el tema de estructuras de datos, actualmente conozco un poco el lenguaje C y ya he realizado algunas estructuras de datos basicas en el ,sin embargo ahora que quiero profundizar en el tema me ha surgido la duda de si deberia profundizar el tema en el lenguaje c/c++ o en algun otro lenguaje como java.

Durante mi búsqueda he visto que existe una gran de contenido sobre este tema enfocado en el lenguaje java pero no me termino de decidir si realmente lo quiero enfocar en ese lenguaje o prefiero explotar aun mas las capacidades que me ofrece c/++ con sus punteros.

Para finalizar me gustaria si me podrian ayudar a confirmar si realmente me seria mas util profundizar el tema en c/c++ o si seria mejor hacerlo en java.Ademas de eso si alguien conoce un buen libro sobre este tema le agradeceria que me pasara el nombre.


Título: Re: ¿Estructuras de datos en C++?
Publicado por: Beginner Web en 27 Octubre 2018, 04:01 am
Termina hasta POO con C++ y de ahi ya tienes todo lo necesario para saltar a otro lenguaje, yo manejo C/C++,Java entre otros pero empece logica con raptor y de ahi C++ y de ahi salte a Java y a C, etc ...


Título: Re: ¿Estructuras de datos en C++?
Publicado por: huchoko en 27 Octubre 2018, 05:02 am
Buenas a todos.Tengo contemplado leer algun libro y profundizar un poco en el tema de estructuras de datos, actualmente conozco un poco el lenguaje C y ya he realizado algunas estructuras de datos basicas en el ,sin embargo ahora que quiero profundizar en el tema me ha surgido la duda de si deberia profundizar el tema en el lenguaje c/c++ o en algun otro lenguaje como java.

Durante mi búsqueda he visto que existe una gran de contenido sobre este tema enfocado en el lenguaje java pero no me termino de decidir si realmente lo quiero enfocar en ese lenguaje o prefiero explotar aun mas las capacidades que me ofrece c/++ con sus punteros.

Para finalizar me gustaria si me podrian ayudar a confirmar si realmente me seria mas util profundizar el tema en c/c++ o si seria mejor hacerlo en java.Ademas de eso si alguien conoce un buen libro sobre este tema le agradeceria que me pasara el nombre.
En sí, por experiencia propia, te recomendaría aprender un lenguaje de programación de alto nivel primero, ej: Python, Ruby, Perl.
De ahí vas hacia C o C++. Sinceramente no me gusta Java, pero quién sabe, quisas te guste ¯\_(ツ)_/¯
C y C++ son lenguajes muy potentes, pero la falta de tutoriales en español, hace que todo esto de desperdicie.
Por ejemplo, puedes hacer juegos usando Allegro o OpenGL, pero esos son casos en que debes saber inglés. Los tutoriales en español de las librerías anteriormente mencionadas son nulas.
Saludos


Título: Re: ¿Estructuras de datos en C++?
Publicado por: SDCC en 27 Octubre 2018, 05:25 am
De antemano ,gracias por responder.Actualmente ya he programado en POO, conozco los conceptos y de forma mas particular he manejado Java pero sin embargo anteriormente ya pase por C y me gusto bastante , sin embargo ahora que ya conozco los conceptos de la POO me interesa continuar con temas mas avanzados combinando paradigmas y la libertad que me da C++.En este caso en el que ya
tengo un poco de experiencia con niveles de alto nivel ¿me recomendaria que siguiera con el tema de "Estructuras de datos" en el lenguaje c/c++? ¿ O que mejorar reforzara mi experiencia en un lenguaje como java?


Título: Re: ¿Estructuras de datos en C++?
Publicado por: Beginner Web en 27 Octubre 2018, 05:39 am
Bueno entonces tienes casi todo, ahora pasa a las frameworks  ;-)


Título: Re: ¿Estructuras de datos en C++?
Publicado por: elgilun en 27 Octubre 2018, 20:34 pm
Cuando dices "estructuras de datos en C++", ¿a qué te refieres? ¿Puedes poner un ejemplo o un sitio web donde hablen de eso?


Título: Re: ¿Estructuras de datos en C++?
Publicado por: SDCC en 27 Octubre 2018, 21:20 pm
Hacia referencia al área que estudia las estructuras de datos que se pueden generar en los lenguajes de programacion tales como pilas,colas,arboles binarios,etc.. Y que a la vez mete teoría sobre como ordenar,manipular y manejar estos datos.

Mi pregunta iba encaminada a que si era mejor aprender esto en c/c++ por las ventajas que presentan los apuntadores.


Título: Re: ¿Estructuras de datos en C++?
Publicado por: Beginner Web en 27 Octubre 2018, 21:25 pm
Asi es, en C/C++ estas estructuras son superfaciles de entender es como un pseudocodigo


Título: Re: ¿Estructuras de datos en C++?
Publicado por: elgilun en 27 Octubre 2018, 21:47 pm
No hay C/C++, hay C y hay C++, son dos lenguajes distintos.

El C++ es un lenguaje de alto nivel, si alguna vez se dijo que no, eso pudo haber sido antes del estándar de 1998 (si quieres puedes hacer la cuenta), y como lenguaje de alto nivel tiene todas esas "estructuras de datos" incluidas en su biblioteca estándar.

Por ejemplo:
  • Contenedores de secuencias: array, vector, deque, forward_list, list.
    Contenedores asociativos: set, multiset, unordered_set, unordered_multiset, map, multimap, unordered_map, unordered_multimap
    Y adaptadores para contenedores: stack, queue, priority_queue.

No quiero decir que no valga la pena saber cómo se construyen estos contenedores, por supuesto, pero sin saber que el C++ es un lenguaje de alto nivel ya se está comenzando medio ciego y aturdido por prejuicios de hace más de 20 años (y atrasar 20 años en un lenguaje de programación es atrasar, créeme).

Hay un capítulo sobre contenedores y algoritmos del libro de Stroustrup "The C++ Programming Language" disponible gratis en:
https://isocpp.org/files/papers/4-Tour-Algo-draft.pdf

Si te interesa aprender el C++, ese es un libro que querrás leer.







Título: Re: ¿Estructuras de datos en C++?
Publicado por: EdePC en 27 Octubre 2018, 22:37 pm
Saludos,

- Básicamente C y C++ son iguales  :xD, OJO básicamente, cuando se empiezan a hacer algoritmos o cursos de iniciación de programación, la diferencia es poca y por ello existen muchos e-books y documentación que dice: Java para programadores de C/C++, comparación de lenguajes C y C++, como programar en C/C++/Java, etc,

-- Todos cursos de iniciación claro está. Pero como dice elgilun, estos son lenguajes diferentes donde se nota más esta diferencia cuando el algoritmo o programa a desarrollar es más complicado.

- Con respecto a las dichosas "estructuras de datos" en C++ que trata el tema, puedo sugerir este PDF con ejemplos:

Código:
7. Búsqueda y Ordenación 85
7.1. Algoritmos de Búsqueda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.1.1. Búsqueda Lineal (Secuencial) . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.1.2. Búsqueda Binaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
7.2. Algoritmos de ordenación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
7.2.1. Ordenación por Selección . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
7.2.2. Ordenación por Intercambio (Burbuja) . . . . . . . . . . . . . . . . . . . . . 90
7.2.3. Ordenación por Inserción . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
7.3. Aplicación de los Algoritmos de Búsqueda y Ordenación . . . . . . . . . . . . . . . 92

http://www.lcc.uma.es/~vicente/docencia/cppdoc/programacion_cxx.pdf


Título: Re: ¿Estructuras de datos en C++?
Publicado por: SDCC en 27 Octubre 2018, 23:18 pm
De antemano gracias por sus aportaciones , las tomare en cuenta sin embargo me surge una duda a partir de que c++ y c son dos lenguajes distintos..En la poca experiencia que he tenido leyendo sobre c++ he visto que la mayoria de los autores habla de c++ como un superconjunto de c,a partir de lo anterior me crea la incertidumbre si esto es totalmente cierto o es una simplete exageracion.En el caso de que sea asi se podria decir que desde el lenguaje c++ yo puedo hacer un programa exactamente igual que en c independientemente de la complejidad que tenga, con la misma sintaxis ,etc..Sin embargo c++ me presentaria una segunda forma de hacerlo con la abstraccion que presenta el lenguaje  y la POO.?


Título: Re: ¿Estructuras de datos en C++?
Publicado por: elgilun en 28 Octubre 2018, 00:14 am
Citar
En la poca experiencia que he tenido leyendo sobre c++ he visto que la mayoria de los autores habla de c++ como un superconjunto de c,a partir de lo anterior me crea la incertidumbre si esto es totalmente cierto o es una simplete exageracion

Según Stroustrup (http://www.stroustrup.com/bs_faq.html) el C++ es un descendiente directo del C y conserva casi todo el C como un subconjunto.

Eso implica que un programa C puede (con cambios, pocos o muchos) puede ser también un programa C++, pero no a la inversa.

El C++ nace (hace 30 años) a partir del C, y desde entonce siempre se ha tratado de conservar esa relativa "compatibilidad hacia atrás".

Cuando se habla de C/C++ no se está queriendo decir que se trata del mismo lenguaje ni de lenguajes similares, se está refiriendo a esa relación de descendencia de la que habla su autor.

Citar
En el caso de que sea asi se podria decir que desde el lenguaje c++ yo puedo hacer un programa exactamente igual que en c independientemente de la complejidad que tenga

En C++ puedes compilar un programa C, después de hacerle algunos cambios, esa es la idea de "Compatibilidad hacia atrás". Pero ni el más básico "hola mundo" en C++ se parece en nada a su versión en C.

"Hola mundo" en C que también compila en C++:
Código:
#include <stdio.h>
int main()
{
printf("Hola Mundo!");
return 0;
}

"Hola mundo" en C++
Código:
#include <iostream> 
int main()
{
std::cout << "Hola Mundo! ";
}

En un programa de una línea ya se ve esa relación de una sola dirección. Si tienes un sistema de muchos miles de líneas en C, podrías mantenerlo mientras lo migras a C++. Si tienes miles de líneas en C++ y quieres pasarlo a C, tíralo y vuelve a escribirlo desde cero en C.


Otro mito: "el C++ es un lenguaje orientado a objetos".

No es así, nunca lo fue. Java es orientado a objetos, el C++ "soporta objetos", son conceptos muy diferentes.

Disculpa si sueno grosero, pero aprender un lenguaje de programación en un nivel básico como para decir que se manejan los rudimentos exige un esfuerzo considerable y necesita de una buena guía y referencias con la realidad. Poner esfuerzo sin guía y sin contacto con la realidad es peor que perder el tiempo.




Título: Re: ¿Estructuras de datos en C++?
Publicado por: EdePC en 28 Octubre 2018, 02:13 am
- Mmm, comparar printf con cout es trampa :xD, en ese caso yo planteo :laugh::

"Hola mundo" en C

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. printf("Hola Mundo!");
  6. return 0;
  7. }

"Hola mundo" en C++

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. printf("Hola Mundo!");
  6. return 0;
  7. }

- Referencias:
-- http://www.cplusplus.com/reference/cstdio/printf/
-- C++ OnLine Test Compiler: http://cpp.sh/7urdd


Título: Re: ¿Estructuras de datos en C++?
Publicado por: elgilun en 28 Octubre 2018, 02:40 am
Citar
Mmm, comparar printf con cout es trampa
No, usando el objeto cout es la forma habitual "C++" de escribir una cadena de texto en la salida estándar.

Pero no quisiera centrar una discusión en un ejemplo elemental, la idea expresada en mi respuesta usa un "Hola Mundo" como ejemplo de las enormes diferencias entre un programa elemental escrito en C++ y otro escrito en C.

De todos modos, si quieres usar printf en C++ debes tener en cuenta que las cabeceras del C fueron declaradas obsoletas (deprecated) ya en el estándar C++98, lo que quiere decir que nadie debería escribir código nuevo como lo haces tú.

Sí es posible respetando el estándar C++ pero haciendo:
Código:
#include <cstdio> 

int main()
{
std::printf("Hola Mundo!");
}


(Y ah, por cierto, el sitio que pones como referencia es sin duda uno de los más destacados y donde se ha puesto mucho y buen esfuerzo, pero es famoso también por la gran cantidad de errores que contiene. Fíjate, en este caso, dice que la cabecera de printf es <cstdio> pero en el ejemplo --que tú copias -- usa <stdio.h>. Lástima, ¿verdad?)