Foros del Web » Programación para mayores de 30 ;) » C/C++ »

dudas a la hora de programar

Estas en el tema de dudas a la hora de programar en el foro de C/C++ en Foros del Web. hola a todos. bueno las dudas que tengo son la siguientes. 1.-porque se dice que las intrucciones como break (exepto de switch), continue, y goto ...
  #1 (permalink)  
Antiguo 08/05/2014, 23:19
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 5 años, 9 meses
Puntos: 5
Pregunta dudas a la hora de programar

hola a todos.
bueno las dudas que tengo son la siguientes.

1.-porque se dice que las intrucciones como break (exepto de switch), continue, y goto hacen que un programa en c que debe ser programacion estructurada deje de serlo al usar estas instrucciones.

2-En que casos o usos de funciones como las anteriores o librerias al usarlas nuestro programa dejaria de ser estructurado.

3- En este ejemplo que se hace cuando se programa sockets:
Código C:
Ver original
  1. server.sin_addr = *((struct in_addr *)he->h_addr);

se utiliza para pasar los valores de he a h_addr pero e estado viendo alguno codigo donde usan puntero o vectores y usan igual esto " -> ", lo que quisiera saber es, si es el unico uso que se le da para trasferir datos o en que casos se puede usar y como se usa en realidad no se si me puedan ayudar con un ejemplo.

4-Tambien queria ver si me podrian decir si en c existe alguna alternativa a try-catch ya que esta solo encuentro informacion para c++ y al compilar me dice que esta indefido try.
Tambien si el manejo de exepcion es importante a la hora de programar y si son muy usadas.


bueno espeor que me puedan ayudar.
saludos.
drewermerc.

Última edición por Drewermerc; 09/05/2014 a las 00:48
  #2 (permalink)  
Antiguo 09/05/2014, 01:19
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.431
Antigüedad: 8 años
Puntos: 930
Respuesta: dudas a la hora de programar

No poseo conocimiento muy sólidos en C, solamente lo básico que me enseñaron en la universidad, pero creo poder responder al menos a los puntos 1 y 4.

1. Intuyo que se dice eso pues dichas instrucciones cortan la secuencia programada y pues, la programación estructurada es secuencial. Creo que por ahí va el asunto.

4. En C no existe un mecanismo de excepciones como sí hay en lenguajes posteriores, pero puedes emularlas. Aquí puedes ver una de las formas posibles.

Con respecto al tercer punto, no estoy seguro, pero creo que h_addr es un miembro de he, pues si te fijas, esta es una estructura. Quizá me esté equivocando, pero en los lenguajes en los que programo, esta es la manera de hacer referencia a un atributo/método de un objeto y tengo entendido que las estructuras también poseen atributos o miembros.

Disculpa si no pude contestar todo y con mayor precisión, pero hace muchos (pero muchos) años que dejé de ver C, solamente aprendí lo básico y ahora me dedico a la Web. Espero que otros usuarios con mayores conocimientos en el tema, puedan resolver tus dudas y corregir lo que haya dicho equivocadamente.

Saludos
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #3 (permalink)  
Antiguo 09/05/2014, 02:29
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: dudas a la hora de programar

Hola amigo Drewermerc, un gusto leerte

Bueno mirá yo de C no se nada, solo un poco de C++, pero el otro día andaba buscando algún buen manual sobre sockets en C++, un usuario de otro foro ha sido muy amable en ayudarme y me ha dejado un buen libro de sockets, pero resulta que el manual es sobre Sockets en C, pero mi imagino que debe servir para C++.

Ese manual explica muy bien para que sirve cada parte de código cuando se crean códigos que usan sockets.
Aquí te voy a dejar el manual que me dejaron a mi, espero que ningún moderador remueva el enlace por ser directo, esto lo hago para ayudar, pueden checkear mis 3 dominios (.com .org .net) en las listas negras o en donde quieran para que puedan comprobar que no son dominios que tengan algo ilegal o algo por el estilo y menos programas que hagan algún daño a computadoras de usuarios.

Bueno amigo espero que te sirve y me imagino que te sacará de muchas dudas y espero que a muchas personas les pueda ayudar.
Aquí está el manual: Manual de sockets en C.pdf

Buena suerte amigo!!
Gracias a los moderadores y administradores del foro por este espacio.
  #4 (permalink)  
Antiguo 09/05/2014, 05:59
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 926
Antigüedad: 6 años, 2 meses
Puntos: 38
Respuesta: dudas a la hora de programar

Por que la programación estructurada es cuando el código se ejecuta linea a linea y sigue un orden, con esas palabras reservadas haces que el código pegue saltos lo que deja de ser linea a linea.

El goto sobre todo esta totalmente desaconsejado XDD
El break si lo usas con cabeza no le veo el daño ya que te puede servir para romper muy bien un bucle, pero no lo uses en tu centro de estudios o te pueden bajar notas XDD.
E el continue le veo poca utilidad pero bueno hay quien se la vea ;)

si abusas de esas cosas vas a tener un bonito código espagueti XD http://es.wikipedia.org/wiki/C%C3%B3digo_espagueti

XDD https://www.youtube.com/watch?v=wel7X3szHjY

Los casos en que deja de ser estructurada no te lo puedo describir por que no lo se todos así que si alguien quiere aportar eso.Te dejo esto que es algo: http://es.wikipedia.org/wiki/Program...n_estructurada


Sobre el -> te dejo un ejemplo.
Código C++:
Ver original
  1. #include <cstdio>
  2.  
  3. int main () {
  4.  
  5.     struct Struct {
  6.         int i;
  7.     } miStruct;
  8.    
  9.     Struct * ptr = 0;
  10.     ptr = &miStruct;
  11.    
  12.     ( *ptr ).i = 10;
  13.    
  14.     printf ( "%d\n", ( *ptr ).i );
  15.    
  16.     //Como es un coñaz.... usar (*ptr).i podemos usar ptr->i
  17.    
  18.     printf ( "%d", ptr->i );
  19.    
  20.     return 0;
  21. }

no eres obligado a poner los () en *ptr pero la cosa cambia cuando usas el heap, debes poner esas (*ptr) si crías la estructura en la en memoria libre entonces es cuando se te hace mejor usar el ptr->i en vez de (*ptr).i pero te hablo de c++ no se si realmente c es así. Supongo que si por que son punteros y no es ninguna novedad de c++ los punteros. :(
Una estructura es como si fuera una clase pero sin los miembros privados.
Se pone los () para obligar a desreferenciar antes de acceder al miembro i previniendo así posibles errores.

Sobre lo del try se llama manejo de excepciones: http://es.wikipedia.org/wiki/Manejo_de_excepciones
Quizás te interese eso:
http://www.coders.me/lang/en/c/intro...cepciones-en-c
http://hispabyte.net/foro/c-c/captur...epciones-en-c/
Busque sobre: manejo de excepciones en c y seguro encontraras mas cosas ;)

Última edición por vangodp; 09/05/2014 a las 07:11
  #5 (permalink)  
Antiguo 09/05/2014, 21:10
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 5 años, 9 meses
Puntos: 5
Respuesta: dudas a la hora de programar

hola Alexis88.
gracias por tus respuestas ahora veo por que no uedo usar try-catch gracias.

hola Principe_Azul.
gracias por la infomacion la revisare se ve interesante y gracias de nuevo.

hola vangodp.
gracias por la informacion, bueno precisamente por eso de que te pueden llamar programador espagueti es que me decidi a preguntar esto por que se me hizo chistoso y bueno como yo trato de programar lo mas portable y con algun estandar pero en este caso como c es de programacion estructurada quiero aprenderlo bien el tipo de programacion para el que es asi como c++ es programacion orientada a objetos.
esta muy bueno el video, la forma en que lo explica.

bueno de nuevo gracias a todos por sus respuestas.
saludos a todos.
drewermerc.
  #6 (permalink)  
Antiguo 09/05/2014, 21:57
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 926
Antigüedad: 6 años, 2 meses
Puntos: 38
Respuesta: dudas a la hora de programar

Solo imagínate un código lleno de gotos.
Hazlo algo con los gotos. Haz algún programa que tengas echo y lo intentas hacer con gotos XDD
Veras que es una porquería, el goto viene de ensamblador y alli puede que tenga su utilidad sin embargo el goto no te va facilitar la vida ni a la hora de programar ni a la hora de mantener el código.
Haz no se una calculadora simples con goto, veras que va ser jodía la cosa. Luego intenta insertar funcionalidades a la cosa y entonces ya echaras de menos a las funciones XD.
Si no lo has usado no sabes las limitaciones que tiene XDD
Si ya has echo mas o menos una calculadora con funciones ahora intenta lo mismo pero con goto XDD Ya veras lo que te digo jeje, entonces imagina algo mas grande, si aun te parece fácil ahora imagina un programa de esos con varios cientos de lineas que no lo ayas echo tu, que solo te lo dan para que lo modifiques algo en el jejeje
Creo que no tardas 10 minutos a dar por saco al goto este jeje.
Es que si ponemos un goto aquí y otro allí parece útil pero no lo es lo mejor es olvidarle.
Las funciones y el control de flujo se hizo para no tener que usar goto nunca mas XD
Aqui tienes un ejemplo para que vea jaja: http://www.zator.com/Cpp/E4_10_4w1.htm
A los 3 primeros minutos te quedas mirando el código como si no reconociera que es c++ y créame lo único que tiene que en vez de printf se usa cout para imprimir, veras ahí unas palabras que terminan en dos puntos : y que son como una especie de marcadores. Por ejemplo si pongo punto1: en una parte del código después le digo desde otra cualquiera goto punto1; se va a punto1: y eso es súper raro entender el código XD

Última edición por vangodp; 09/05/2014 a las 22:16
  #7 (permalink)  
Antiguo 09/05/2014, 22:53
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 5 años, 9 meses
Puntos: 5
Respuesta: dudas a la hora de programar

hola vangodp.
bueno si se ve muy complejo el programa con uso de gotos y pues si es inesesario.
ahora veo lo bueno de no seguir lo pasos que me dieron en la escuela para prender c por que veo que te enseñan lo facil pero inutil y peor que no es ansi lo que me ensañaron.
y bueno el unico buen uso que le veo es que si haces un prgrama y cobras por linea el goto te ayuda a aumentar el numero de lineas.
y bueno si creo comprender el codigo tengo nociones basicas de c++ lo unico que no se bien es si tiene una funcion especifica esta instruccion endl; por e visto codigo que la usan y otros que no nose si me puedas explicar eso.
  #8 (permalink)  
Antiguo 09/05/2014, 23:33
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.431
Antigüedad: 8 años
Puntos: 930
Respuesta: dudas a la hora de programar

endl inserta un caracter de nueva línea (el \n). Con esto, el siguiente texto que imprimas, aparecerá en la siguiente línea.

Saludos
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #9 (permalink)  
Antiguo 11/05/2014, 01:19
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 5 años, 9 meses
Puntos: 5
Respuesta: dudas a la hora de programar

hola Alexis88.
gracias por el dato yo pense que servia para otra cosa pero veo que no, bueno gracia de nuevo.
saludos.
drewermerc.
  #10 (permalink)  
Antiguo 11/05/2014, 06:20
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 926
Antigüedad: 6 años, 2 meses
Puntos: 38
Respuesta: dudas a la hora de programar

Cita:
veo que te enseñan lo facil pero inutil
Yo no diria inutil :), yo diría de poco provecho.
En c++ no le vas a sacar provecho pero hay lenguajes como ensamblador que si se puede usar jeje, por ejemplo a la hora de crackear un programa jeje. Cuando encuentres la instrucción que valida el numero de serie del programa por ejemplo. Seria algo asi: si el numro no es valido vete a la linea de código que dice código incorrecto.Nosotros sustituimos lo del codigo incorrecto y ponemos nuestro goto XDD"vete a gracias por comprar nuestro producto"
Esta claro que no es asi tan sencillo pero mas o menos esa es la idea XD.
Si un programa no es mas que un montón de desvíos en el código es solo encontrar la parte que valida y "ligar" con la que nos da paso libre, es como saltar la traba. Asi es como se craquea el programa, no es tan sencillo en la practica pero no veo dificultades tampoco, al fin y al cabo es un lenguaje y si lo conoces bien no veo el misterio en crackear nada jeje.
Tu cuando ejecutas un programa veras solo que te pide la clave pero si te diera ese código en c++ podrías hacer con el lo que te plazca, por ejemplo si encuentras algo como if (ligin == contraseña ){//validar el programa}. Tu como programador que eres no sabes la contraseña por que te genera el ordenador o lo que sea, simplemente vas a la linea anterior y haces if (ligin != contraseña ){//validar el programa}jejeje. Esa es la idea pero normalmente no se hace en c++ sino en ensamblador por que es el lenguaje mas bajo.
Como puedes introducir código en ensamblador dentro de c++ ¡¡¡AAAHHHH!! XDD por eso el goto ^^.

Ahora me recuerdo algo mas, el endl depende del sistema operativo, o sea tiene diferentes efectos en windows, linux..., cuando introduces endl se encarga de llamar las funciones adecuadas. Así que endl es igual a salto de linea+limpiar buffer. ;)

Última edición por vangodp; 11/05/2014 a las 06:28
  #11 (permalink)  
Antiguo 11/05/2014, 09:16
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 5 años, 9 meses
Puntos: 5
Respuesta: dudas a la hora de programar

hola vangodp.
bueno pero pues yo me referia a en este caso solo a c por que pues si como dices hay en lenguaje como ensamblador y bueno si es un poco complicado pero eso ya es otro tema y bueno gracias por la informacion.
saldos.
drewermerc

Etiquetas: compilar, dudas, funcion, int, programa, usar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:36.