Perdido en C++

B

Un sistema operativo para empezar ! Y yo aquí malgastando el verano en aprender Machine Learning, si es que no tengo ni puta idea xDDDDD

Me paso poco por aquí, pero ha sido entrar, ver esto y querer irme, estoy flipando.

djHaL

Sí, la verdad que no se programar, no tengo ningún titulo que lo diga (aun..) pero estoy por aprender, es lo que importa, no? sé los conceptos de programación, que creo que es una parte muy muy grande y importante para ser un novato, ojalá supiera programar, me gustaría aprender bien C++ que es una base ejemplar para los demás lenguajes y más aun si son orientados a objetos, seguiré estudiándolo, y a ver donde puedo llegar, estoy saturado de información, pero bueno tampoco tengo prisa, la iré asimilando según vaya haciendo ejercicios y rompiéndome la cabeza, recalco que no tengo ningún guía tutor, solo a vosotros y internet, por cierto vuelvo a daros las gracias por perder vuestro valioso tiempo en mis conocimientos.

Me voy a poner a arreglar esas cuatro cosas, usaré el switch y las cosas que me estáis sugiriendo.

2 respuestas
B

#32 Vale, a ver ... problemas para aprender tienes a cascoporro :

www.jutge.org , es de mi universidad. Es un juez automático que tú mandas el código sin compilar y él ya se encarga de testearlo y decirte si lo has pasado o no. Me parece que cualquiera puede hacerse cuenta. Los enunciados están en catalán e inglés, y algunos problemas también en castellano. Hay un curso que se llama Learning To Program que está bastante montado del estilo "from zero to hero".

BLZKZ

#32 No hace falta que sigas con el ejercicio, entraste en el hilo como un elefante en una cacharreria. Dijiste que sabías programar en php y te hice ver que no, y no es malo, simplemente era para que te dieses cuenta que presuponer que sabes algo lo unico que hará será desesperarte, agobiarte e intentar acometer objetivos imposibles.

Hay muchos hilos en el foro de por donde empezar a programar (de hecho es un tema que sale cada mes), usa el buscador y en ellos encontrarás opiniones de cada uno así como recursos.

Si te has empeñado en c++ puedes empezar con la web de nacho cabanes y con thinking in c++.

Te recomiendo que hagas borrón y cuenta nueva, y sobre todo que no intentes adelantarte, ve con tranquilidad, sigue todos los pasos y no intentes dar saltos a cosas muy complejas, que lo unico que conseguirás será hacer copy&paste de todo sin aprender nada :)

Suerte y bienvenido

B

#19 términos como objetos, instancias, herencia, polimorfismo te suenan? porque eso es c++ y es donde tendrás problemas.

1 respuesta
djHaL

#35 sí, todo eso se lo que es, pero nunca lo he llevado a la practica, se lo que es a medias mejor dicho.

0buS

Pues es el punto fuerte de C++, junto con los punteros. Por eso te digo que te sería más fácil empezar con otro lenguaje, como C.

Yo también coincido que te falta muchísima base a la hora de programar. El código que pegaste antes que podrían ser fácilmente 6 líneas te ha salido bastante guarro. Practica con ejercicios pequeños tipo: factorial de un número, tablas de multiplicar, fibonacci, números primos, cosas así.

Primero tendrás que pillar la técnica, porque está visto que tampoco la tienes en PHP.

También es importante que sepas como va el tema del pseudo-código y los diagramas de flujo, a la hora de hacer los algoritmos. Estructurar lo que quieres hacer antes de ponerte a picar código ineficiente como un loco es lo mejor que puedes aprender a hacer xD

#27 No si ya... es que es todo xD. Con la gestión de memoria también te puedes tirar su añito entero para hacer 4 mierdas... xD.

djHaL

que error es este?
28 D:\Users\al\Desktop\c++\ejercicios\2\hola.cpp crosses initialization of `std::string s'

porque me da error string dentro del case?

edito, ya esta solucionado, pero no entiendo porque da error eso.

1 respuesta
B

#38 pega el código (o la línea del error).

edit : http://gacimartin.com/2010/12/17/error-c-crosses-initialization-of/

No se si será eso, la verdad es que hace siglos que no uso un switch xDDD

djHaL

Bueno, ya esta el programa listo y acabado:

#include <iostream>
#include <conio.h>
#include <string.h>

using namespace std;
int main(){
  
string suma ="1.calculadora de sumas"; string resta ="2.calculadora de restas"; string multi ="3.calculadora de multiplicar"; string salir ="4.salir"; string intro ="numero a "; string intro2 ="segundo numero a "; string resul ="el resultado es:"; string su = "sumar:"; string re ="restar:"; string mu ="multiplicar:"; string ele ="has elegido: "; int opcion; while (opcion!=4){ cout<<endl<<suma<<endl<<resta<<endl<<multi<<endl<<salir<<endl; cin>>opcion; switch (opcion){ case 1: double suma1; double suma2; cout<<ele<<suma<<endl;
cout<<intro<<su; cin>>suma1; cout<<intro2<<su; cin>>suma2; cout<<resul<<suma1+suma2; break; case 2: double resta1; double resta2; cout<<ele<<resta<<endl; cout<<intro<<re; cin>>resta1; cout<<intro2<<re; cin>>resta2; cout<<resul<<resta1-resta2; break; case 3: double multi1; double multi2; cout<<ele<<multi<<endl; cout<<intro<<mu; cin>>multi1; cout<<intro2<<mu; cin>>multi2; cout<<resul<<multi1*multi2;
break; case 4: cout<<"Toca una tecla para salir";
getch(); break; default: cout<<"\nno has elegido una opcion valida, \nelige una opcion:"; cin.clear(); fflush(stdin); break; } } return 0; }

Todavia no sabe que las letras no son opciones.. pero si metes un numero no valido y despues una letra no valida, te dice que la opción no es valida.

edito, #41 es verdad eso de que repito algunas cosas, ya esta solucionado :)
edito, #44 gracias por las sugerencias.

¿por donde sigo?

B

Lo de meter los strings ahi arriba no entiendo por que lo haces. Luego repites el "has elegido" como unas cuatro veces seguidas ... Yo no me dedico a ese tipo de programación, pero así a ojo suena como una no muy buena práctica eh.

1 respuesta
cm07

Variables con nombre de una sola letra. Mala practica.

Usar variables sin inicializar. Muy mala practica.

2 respuestas
BLZKZ

#42 quien no hace el típico for (int i = 0; i < 10; i++) ? XDDDDD

1 respuesta
cm07

#43 Variables de bucle, no variables (que por cierto, deberían ser constantes) que usas para no declarar una cadena explicitamente.

i, j o k para bucles son nombres representativos. r para reperesentar la cadena "restar: " no lo es.

string end = "\n";

Tampoco es bonito, especialmente cuando existe endl.

2 3 respuestas
djHaL

#44 oído cocina, no lo volveré a hacer :)

1 respuesta
elkaoD

#44 lo cuál me recuerda:

http://stackoverflow.com/questions/454303/why-are-we-using-i-as-a-counter-in-loops

cm07

#45 Sigues usando "opcion" en una comparación antes de darle un valor.

Ese es el tipo de cosas que funciona, hasta que un día decide no funcionar.

eisenfaust

En cuanto a libros para comenzar te recomiendo Accelerated C++, y luego ya vendrán los libros de Meyers y Alexandrescu.

Por lo demás pues no te desanimes y sobre todo no te canses de experimentar. A más la líes mejor. Éste es uno de esos lenguajes que se aprenden a base de llevarse palos.

Mi pregunta es, ¿Por qué C++?

#42 Creo que en lo que llevo de vida como programador C jamás he nombrado variables con más de un carácter xD

Supongo que lo importante es adoptar a un estilo y ser consistente.

1 4 respuestas
Soltrac

Que risas, un midgard 2.0 xDDD

#48 Nunca has nombrado variables de mas de un caracter? En serio? Y como se sigue tu código con i,j,k,l,m,n???

BLZKZ

#48 no, no es eso.

Declarando variables de ese modo lo que jodes es la legibilidad, porque luego llega otro a leer tu codigo y pensara "WTF is this shit?"

1 1 respuesta
cm07

#50 Quien dice "otro" dice "tu mismo" cuando miras tu propio codigo una semana despues de haberlo escrito.

#48 Trabajar contigo ha de ser, por necesidad, un infierno, incluso para ti mismo. Por otra parte no se que tipo de programas haces en los que solo se usan 26 variables por scope.

1 1 respuesta
BLZKZ

#51 yo te lo soluciono, a1 a2 a3 a4... asi hasta el infinito xD

1 respuesta
cm07

#52 Eso son dos caracteres xD

LOc0

Aclaro que la manita de #48 es por la bibliografía recomendada (aunque los code-style-fanboys me dan un poco de risa ;)). Sobre los libros:

Padawan:

http://www.amazon.com/dp/020170353X/?tag=stackoverfl08-20

Caballero Jedi:

http://rads.stackoverflow.com/amzn/click/0321334876

http://rads.stackoverflow.com/amzn/click/0201749629

Maestro Jedi:
http://rads.stackoverflow.com/amzn/click/0201704315

Salu2 ;)

eisenfaust

¿26+ variables por Scope? xD

En mi entorno se considera idiomático el escribir las variables léxicas con un carácter, las globales con dos y las funciones monádicas no standard con tres. Más no suele ser necesario y es hasta molesto.

Personalmente opino que el código ha de ser siempre lo más conciso posible, las florituras deberían ir a la documentación que para algo está. El coste de comprensión de un programa es subjetivo (y no tiene tanto que ver con la nomenclatura de variables, en Forth por ejemplo se opera sobre el stack y no por ello es menos comprensible; y en Lisp se suele abusar de nombres larguísimos y a veces llega a ser un infierno el comprender qué ocurre cuando se ha convertido en casi un DSL puro), el de lectura no. Quiero echar un vistazo a un programa y enterarme del blueprint, no dejarme el scroll del ratón (o Av Pag / C-d / C-v para quien se dé por aludido) para coscarme de algo. Y yo personalmente prefiero leer x a username, hola_que_tal o el camelCaseDeLosCojones que se suele ver por ahí. En las matemáticas funciona y la notación hace que la lectura sea breve, densa pero extremadamente comprensible, sinceramente no veo qué problema hay en adoptar un estilo similar.

Además de que no soy yo el que va por ahí cual inquisidor tachando de brujería o mala práctica a los demás. Apagad las antorchas.

2 respuestas
Soltrac

Me da igual dar la risa


class cuadrado: hexagono
{
   cuadrado(int x, y);
   superficie();
}

Es más cómodo que:

class c: h
{
c(int x, int y);
s();
}
2 2 respuestas
elkaoD

#55 pues yo no podría discrepar más sobre la documentación.

IMHO si un código necesita documentación para explicarse es generalmente porque es un mal código.

Para mí la documentación existe como contrato/punto de entrada a la API pública y poco más, no para documentar código. Yo evito los comentarios en código tanto cuanto sea posible y trato de ser lo más explicativo en los nombres de variables, funciones, etc. En definitiva: tratar que el código se lea como se lee el lenguaje natural para no tener que pensar o seguir la pista a variables de una letra. "¿esta 'e' era de epsilon, extra o elemento?"

Un código conciso no es más conciso por tener variables más cortas. Yo calculo la concisión del código en tokens, no en caracteres.

Sin embargo estoy de acuerdo contigo en que en Lisp los nombres largos son hasta molestos, pero es que es un entorno completamente diferente. En Lisp tienes variables que duran unas pocas expresiones y se usan una dos o tres veces, mientras que en C las variables, que soportan cambios de estado, se pueden acabar arrastrando más de lo debido (y haciendo el código ilegible.)

#56 ojo, no es lo mismo variables que símbolos. Supongo que eisen se explaya en los símbolos y usa muchos bloques pequeños con variables de vida corta.

2 2 respuestas
BLZKZ

yo lo que pienso es que se evoluciona a lenguajes de alto nivel, desde la aparición de ensamblador y sus etiquetas, y luego llega gente como #55 que se cree erudita, o algunos expertos-gurús excentricos que tienen que llevar la contraria.

Yo como #56 y #57 veo mejor poner nombres significativos que usar otros que no lo son y tener que choricear el codigo con miles de lineas de comentarios.

#55 mas bien nos referiamos a algo como Coche car = new Coche(); y Coche c = new Coche(); que me parece más legible lo primero

1 respuesta
elkaoD

#58 por no hablar de que cuando comentas código, lo tienes que mantener DOS VECES. Y si encima documentas, ¡tres!

No hay nada peor que documentación/comentarios que no coinciden con el código que explican (pero es inevitable), por eso trato de evitar el comentar, porque no sólo no quita sino que añade esfuerzo de mantenimiento.

En la medida de lo posible, mi código es su propia documentación.

Tampoco creo que Eisenfaust vaya de erudito. Simplemente el peso de Lisp es muy grande :) Son dos entornos completamente diferentes. Yo ahora mismo estoy luchando por lo contrario: acostumbrarse a usar variables más cortas en Clojure. Su vida es tan corta y la asignación suele estar tan cerca del uso que no merece la pena.

1 respuesta
B

Por línea general recomiendo http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html pero yo además uso notación hungara.

1 respuesta

Usuarios habituales