Título: Duda con declaraciones Publicado por: Dominic91 en 28 Agosto 2019, 05:03 am Que tal amigos, buenas noches, soy nuevo en este foro de igual forma soy nuevo en programación del lenguaje C++, tengo una duda la cual espero puedan aclarar, realizando la codificación para un programa modular, me encuentro con un inconveniente que no se si sea por que hay un error en la codificación o el programa "DEV C++" no funcione al 100% bien.
el programa es: Código el programa me dice que "vector_C" y "elegir" no han sido declarados, ya eh realizado ejercicios similares y no me habian salido errores, hasta ahora, es un poco raro ya que tengo un programa igual pero ese si lo ejecuta bien Mod: Procura usa etiquetas GeSHi cuando publiques codigo Título: Re: Duda con declaraciones Publicado por: engel lex en 28 Agosto 2019, 06:23 am no has dicho donde te da error pero me imagino que en la linea 43 te da el primero
efectivamente elegir no está declarado... en programacion están los scopes (los alcances, usualmente definidos por los {}) elegir está en un scope diferentes al de las funciones, por lo que el mismo no existe en ellas un ejemplo Código: int variable_global = 0; Título: Re: Duda con declaraciones Publicado por: @XSStringManolo en 28 Agosto 2019, 13:38 pm Mete las líneas 20, 21 y 22 antes de la línea 20.
Es decir, declara las variables como "globales" para que se pueda tener acceso desde cualquier función del programa. Al declarar variables, arrays, constantes o lo que sea dentro de una función (en tu caso main) estas se crean dentro de main y solo son accesibles por la función main. En caso de que la función que contiene las variables retorne o se acabe su llamada, todo lo que contiene es destruido. Ejemplo: Código
-Se llama a la función main de primera. -Se crea la variable local de main ABC y se le asigna el valor 0. -Se llama a la función funcionEjemplo() para asignarle el valor retornado a ABC. -Se crea la variable local de funcionEjemplo ABC dentro de funcionEjemplo y se le da valor 7. -Se crea la variable local RESULTADO de funcionEjemplo y se le da el valor 8. -Se retorna el valor de RESULTADO. -Se destruyen las variables locales ABC y RESULTADO de funcionEjemplo. -Se da el valor retornado a la variable ABC local de main. Si te fijas hay 2 variables ABC distintas que se llaman igual. Para simplificar mentalmente, cada funcion es como un programa externo. Si quieres que ambos usen la misma variable ABC y no 2 distintas debes declararla fuera de las funciones y después accedes a ella desde donde quieras. De la forma que se hace con variableGlobal, a la que si se puede acceder desde ambas funciones. A cerca de otras cosas de tu código: Puedes ordenarlo y organizarlo mucho mejor escribiendo 4 o 5 líneas de nada. -Haces el prototipo/declaración de función un par de lineas antes de definirla. El prototipo sobra si colocas la definición antes de main. Te recomiendo organizar los prototipos antes de main, y las definiciones y clases debajo de la función main(). Así es más sencillo para quien lea el código seguir el flow del programa/ orden de ejecución. Estás incluyendo muchas librerías que no necesitas. Las .h standart suelen ser del lenguaje C y las que no llevan .h de C++. En el codigo que pusiste te sobran todas las librerías/bibliotecas menos la de iostream. Para hacer pausa al final del programa puedes usar cin.get(); (es de iostream) en vez de la llamada a system("pause"); Así te ahorras usar una librería para llamar solo al sistema. En la línea 24 estás escribiendo literalmente or. Usa || en su lugar. Estás usando la palabra Vector como nombre para un Array. En español mucha documentaciòn le llama vector a un array y matriz a un vector. Me parece que lleva a confusión. Principalmente porque hay un contenedor en C++ en la Standart Template Library que se llama vector. Yo te aconsejo que los llames Array en vez de vectores. Un array es lo mismo que un vector con la diferencia que un array tienes que decir que tamaño exacto va a tener. Y un vector se las arregla para poder aumentar el tamaño automáticamente. Esto ya lo verás. Cuando haces cin >> el usario va a escribir un número en pantalla. Cuado tu escribas el siguiente cout, va a quedarse pegado el texto que imprimas con el cout al número que puso el usuario. En consola verías: Hola, pon un número 1Has puesto el número 1. Si le metes un endl al principio del cout se vería así: Hola pon un número 1 Has puesto el número 1. Lo soluciones así: cout << endl << "ingrese los 10 valores del vector 1:\n"<<endl; Esa \n es similar a endl y el resultado mostrado es el mismo. En C no existe endl asique se usa \n. No lo utilces en C++. Con Vector[10] en realidad guardas 11 valores. El 0 se cuenta. 0 1 2 3 4 5 6 7 8 9 10 Tiene varios fallos más. No te recomiedo seguir el tutorial o los recursos que estás siguiendo para aprender. Si entiendes inglés leete el Apress Learn C++ for game developers o cualquiera de los libros para "principiantes" que están en el listado de stackoverflow. También tienes un curso de C++ en cconclase.com hay mucho material bueno. Creaste el post en programación general. Hay un subforo para C++. Ahí también tienes muchos recursos para aprender. Título: Re: Duda con declaraciones Publicado por: Becerra en 28 Agosto 2019, 15:55 pm Hola
Con Vector[10] en realidad guardas 11 valores. El 0 se cuenta. 0 1 2 3 4 5 6 7 8 9 10 Eso no es correcto, guardas 10 valores, del 0 al 9. El que el índice empiece desde el 0 no te da un elemento más del array. Un saludo Título: Re: Duda con declaraciones Publicado por: Dominic91 en 28 Agosto 2019, 17:41 pm no has dicho donde te da error pero me imagino que en la linea 43 te da el primero efectivamente elegir no está declarado... en programacion están los scopes (los alcances, usualmente definidos por los {}) elegir está en un scope diferentes al de las funciones, por lo que el mismo no existe en ellas un ejemplo Código: int variable_global = 0; efectivamente el error empieza desde la linea 43, solo que no me esta tomando en cuenta solo esas 2 declaraciones cuando ya estan declaradas, el if(elegir==1){ realice lo que me comentaste pero sigue marcando error, y el vector_c igual Título: Re: Duda con declaraciones Publicado por: Dominic91 en 28 Agosto 2019, 17:45 pm Mete las líneas 20, 21 y 22 antes de la línea 20. Es decir, declara las variables como "globales" para que se pueda tener acceso desde cualquier función del programa. Al declarar variables, arrays, constantes o lo que sea dentro de una función (en tu caso main) estas se crean dentro de main y solo son accesibles por la función main. En caso de que la función que contiene las variables retorne o se acabe su llamada, todo lo que contiene es destruido. Ejemplo: Código
-Se llama a la función main de primera. -Se crea la variable local de main ABC y se le asigna el valor 0. -Se llama a la función funcionEjemplo() para asignarle el valor retornado a ABC. -Se crea la variable local de funcionEjemplo ABC dentro de funcionEjemplo y se le da valor 7. -Se crea la variable local RESULTADO de funcionEjemplo y se le da el valor 8. -Se retorna el valor de RESULTADO. -Se destruyen las variables locales ABC y RESULTADO de funcionEjemplo. -Se da el valor retornado a la variable ABC local de main. Si te fijas hay 2 variables ABC distintas que se llaman igual. Para simplificar mentalmente, cada funcion es como un programa externo. Si quieres que ambos usen la misma variable ABC y no 2 distintas debes declararla fuera de las funciones y después accedes a ella desde donde quieras. De la forma que se hace con variableGlobal, a la que si se puede acceder desde ambas funciones. A cerca de otras cosas de tu código: Puedes ordenarlo y organizarlo mucho mejor escribiendo 4 o 5 líneas de nada. -Haces el prototipo/declaración de función un par de lineas antes de definirla. El prototipo sobra si colocas la definición antes de main. Te recomiendo organizar los prototipos antes de main, y las definiciones y clases debajo de la función main(). Así es más sencillo para quien lea el código seguir el flow del programa/ orden de ejecución. Estás incluyendo muchas librerías que no necesitas. Las .h standart suelen ser del lenguaje C y las que no llevan .h de C++. En el codigo que pusiste te sobran todas las librerías/bibliotecas menos la de iostream. Para hacer pausa al final del programa puedes usar cin.get(); (es de iostream) en vez de la llamada a system("pause"); Así te ahorras usar una librería para llamar solo al sistema. En la línea 24 estás escribiendo literalmente or. Usa || en su lugar. Estás usando la palabra Vector como nombre para un Array. En español mucha documentaciòn le llama vector a un array y matriz a un vector. Me parece que lleva a confusión. Principalmente porque hay un contenedor en C++ en la Standart Template Library que se llama vector. Yo te aconsejo que los llames Array en vez de vectores. Un array es lo mismo que un vector con la diferencia que un array tienes que decir que tamaño exacto va a tener. Y un vector se las arregla para poder aumentar el tamaño automáticamente. Esto ya lo verás. Cuando haces cin >> el usario va a escribir un número en pantalla. Cuado tu escribas el siguiente cout, va a quedarse pegado el texto que imprimas con el cout al número que puso el usuario. En consola verías: Hola, pon un número 1Has puesto el número 1. Si le metes un endl al principio del cout se vería así: Hola pon un número 1 Has puesto el número 1. Lo soluciones así: cout << endl << "ingrese los 10 valores del vector 1:\n"<<endl; Esa \n es similar a endl y el resultado mostrado es el mismo. En C no existe endl asique se usa \n. No lo utilces en C++. Con Vector[10] en realidad guardas 11 valores. El 0 se cuenta. 0 1 2 3 4 5 6 7 8 9 10 Tiene varios fallos más. No te recomiedo seguir el tutorial o los recursos que estás siguiendo para aprender. Si entiendes inglés leete el Apress Learn C++ for game developers o cualquiera de los libros para "principiantes" que están en el listado de stackoverflow. También tienes un curso de C++ en cconclase.com hay mucho material bueno. Creaste el post en programación general. Hay un subforo para C++. Ahí también tienes muchos recursos para aprender. Como tal no es un de un tutorial sino un tema de fundamentos de programación de la universidad, todos tenemos ese mismo ejercicio y ese mismo error, solo la variable "elegir" y "vector_c" nos muestra el error de que no han sido declaradas, aqui mi duda es el porque nos aparece eso ya que habiamos realizado otro ejercicio similar con anterioridad y lo compilo a la perfeccion y este no Título: Re: Duda con declaraciones Publicado por: @XSStringManolo en 28 Agosto 2019, 19:22 pm Ya te lo expliqué, es porque estás usando en funciones externas la varible elegir dentro del if. Esa variable elegir está declarada como varible local de la función main. Por lo que no puedes acceder desde otras funcionas. Si quieres acceder declárala como variable global como ya te expliqué en el ejemplo. O declárala en la función que la vayas a usar antes de usarla.
Título: Re: Duda con declaraciones Publicado por: Dominic91 en 28 Agosto 2019, 21:08 pm Ya te lo expliqué, es porque estás usando en funciones externas la varible elegir dentro del if. Esa variable elegir está declarada como varible local de la función main. Por lo que no puedes acceder desde otras funcionas. Si quieres acceder declárala como variable global como ya te expliqué en el ejemplo. O declárala en la función que la vayas a usar antes de usarla. eh seguido tu recomendación, pero ahora vector_C arroja solo ceros como resultado Título: Re: Duda con declaraciones Publicado por: @XSStringManolo en 29 Agosto 2019, 00:21 am Declaraste el arrayC como global? Si lo declaraste en una funcion, cuando esa función hace return, el ArrayC deja de existir.
Hay un paréntesis que no tengo ni idea que hace: int calcularSuma(int vector_A[],int vector_B[]){ if(elegir==1){ int suma;{ Ese paréntesis depués de suma; yo creo que sobra. Nunca vi utilizarlo así ni entiendo que se supone que hace o si es valido/compila. No te lo aseguro porque yo programo a mi bola y ni siquiera uso arrays, no me gustan. Uso strings, vectores o directamente aritmética de punteros. Título: Re: Duda con declaraciones Publicado por: Dominic91 en 29 Agosto 2019, 01:51 am Declaraste el arrayC como global? Si lo declaraste en una funcion, cuando esa función hace return, el ArrayC deja de existir. Hay un paréntesis que no tengo ni idea que hace: int calcularSuma(int vector_A[],int vector_B[]){ if(elegir==1){ int suma;{ Ese paréntesis depués de suma; yo creo que sobra. Nunca vi utilizarlo así ni entiendo que se supone que hace o si es valido/compila. No te lo aseguro porque yo programo a mi bola y ni siquiera uso arrays, no me gustan. Uso strings, vectores o directamente aritmética de punteros. Si de hecho es lo que no entiendo por que los otros 2 si los toma en cuenta y ese no mira: Código
El ejercicio solicita que los valores ingresados en los valores 1 y 2 (vector_A y vector_B) realicen cualquiera de las 4 operaciones básicas y el resultado se vea en un tercer vector, ya habia realizado un programa similar pero en este me muestra el error solo en ese vector. Código
solo así lo lee. Título: Re: Duda con declaraciones Publicado por: engel lex en 29 Agosto 2019, 02:54 am Código
por aclarar un poco mas los scopes Código
variable de funcion1 y de funcion2 nada tienen que ver, variable solo existe dentro del espacio declarado, si se declara en otro espacio, nada tiene que ver Título: Re: Duda con declaraciones Publicado por: @XSStringManolo en 29 Agosto 2019, 04:20 am Siguiendo el enunciado de tu ejercicio. Sin usar el array de la STL ni aritmética de punteros yo haría algo así(no sé si estará bien, llevo siglos sin hacer nada con arrays en C y no tengo compilador a mano:
Código
Título: Re: Duda con declaraciones Publicado por: Dominic91 en 29 Agosto 2019, 20:42 pm Siguiendo el enunciado de tu ejercicio. Sin usar el array de la STL ni aritmética de punteros yo haría algo así(no sé si estará bien, llevo siglos sin hacer nada con arrays en C y no tengo compilador a mano: Código
En la estructura SWITCH-CASE así va la forma modular? perdona si mi pregunta suena tonta, como dije soy nuevo en esto asi que aun tengo muchas dudas, hago la pregunta devido a que eh visto algunos programas modulares pero solo con la estructura IF y veo que lleva cosas separadas |