elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Duda con declaraciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Duda con declaraciones  (Leído 6,375 veces)
Dominic91

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Duda con declaraciones
« 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
  1. #include<iostream> /*Entrada y salida de datos*/
  2. #include<stdio.h>/* Biblioteca de entrada y salida estándar*/
  3. #include<stdlib.h>/* Biblioteca para las funciones del sistema*/
  4. #include<math.h> /* Biblioteca para utilizar funciones matematicas*/
  5. #include<conio.h>
  6.  
  7. int elegir_operacion();
  8. using namespace std;
  9. //Prototipos de funcion
  10. int elegir_operacion()
  11. { //Se designa el primer mensaje de pantalla junto con la indicacion de seleccion de una operacion matematica//
  12.    int elegir_provisional;
  13.    cout<< "Elige una de estas Operaciones matematicas:"<<endl<<"1. SUMA"<<endl<<"2. RESTA"
  14. <<endl<<"3. MULTIPLICACION"<<endl<<"4. DIVISION"<<endl;
  15.    cin>>elegir_provisional;
  16.    return elegir_provisional;}
  17.  
  18.  
  19. int main(){
  20.    int vector_A[10], vector_B[10], vector_C[10], suma=0, resta=0, multiplica=0, division=0;
  21.    int elegir;
  22.    int i;
  23.   elegir=elegir_operacion();
  24. if (elegir==1 or elegir==2 or elegir==3 or elegir==4){
  25. cout<<"ingrese los 10 valores del vector 1:\n"<<endl;
  26. for(i=0;i<10;i++){
  27. cout<<"Ingrese los valores de cada posicion:\n"<<i<<":"<<endl;
  28. cin>>vector_A[i];
  29. }
  30. cout<<"ingresar los 10 valores del vector 2:\n"<<endl;
  31.    for(i=0;i<10;i++){
  32.    cout<<"Ingrese los valores de cada posicion:\n"<<i<<":"<<endl;
  33.    cin>>vector_B[i];
  34. cout<<endl<<endl<<"El resultado de la suma de los vectores es:\n"<<suma;
  35. cout<<endl<<endl<<"El resultado de la resta de los vectores es:\n"<<resta;
  36. cout<<endl<<endl<<"El resultado de la multiplicacion de los vectores es:\n"<<multiplica;
  37. cout<<endl<<endl<<"El resultado de la division de los vectores es:\n"<<division;}
  38.     }    
  39.   }
  40.  
  41.  
  42.    int calcularSuma(int vector_A[],int vector_B[]){
  43.    if(elegir==1){
  44. int suma;{
  45. cout<<endl<<endl<<"El resultado de la suma de los vectores es:\n"<<suma;
  46. for(int i=0;i<10;i++){
  47. vector_C[i]=vector_A[i]+vector_B[i];
  48. cout<<i<<"="<<vector_C[i]<<endl;}
  49. return suma; }
  50.    }
  51.    }
  52.  
  53.  
  54.    int calcularResta(int vector_A[],int vector_B[]){
  55.    if(elegir==2){
  56. int resta;{
  57. cout<<endl<<endl<<"El resultado de la resta de los vectores es:\n"<<resta;
  58. for(int i=0;i<10;i++){
  59. vector_C[i]=vector_A[i]-vector_B[i];
  60. cout<<i<<"="<<vector_C[i]<<endl;}
  61.    return resta; }
  62.    }
  63. }
  64.  
  65.  
  66.    int calcularMultiplicacion(int vector_A[],int vector_B[]){
  67.    if(elegir==3){
  68. int multiplica;{
  69. cout<<endl<<endl<<"El resultado de la multiplicacion de los vectores es:\n"<<multiplica;
  70. for(int i=0;i<10;i++){
  71. vector_C[i]=vector_A[i]*vector_B[i];
  72. cout<<i<<"="<<vector_C[i]<<endl;}
  73. return multiplica; }
  74.    }
  75.    }
  76.  
  77.  
  78.    int calcularDivision(int vector_A[],int vector_B[]){
  79.    if(elegir==4){
  80. int division;{
  81. cout<<endl<<endl<<"El resultado de la division de los vectores es:\n"<<division;
  82. for(int i=0;i<10;i++){
  83. vector_C[i]=vector_A[i]/vector_B[i];
  84. cout<<i<<"="<<vector_C[i]<<endl;}
  85. return division; }
  86.    }
  87. }
  88.  
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


« Última modificación: 28 Agosto 2019, 06:14 am por engel lex » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Duda con declaraciones
« Respuesta #1 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;

int prueba(){

  //aqui existe variable_global ,pero no variable_local

}

int main(){
  int variable_local = 1;
  prueba();

}





En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: Duda con declaraciones
« Respuesta #2 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
  1. #include ...
  2.  
  3. using namespace std;
  4.  
  5.  
  6. /********PROTOTIPOS**********/
  7. int funcionEjemplo();
  8.  
  9.  
  10.  
  11. /*********VARIABLES*********/
  12. int variableGlobal = 0;
  13.  
  14.  
  15.  
  16. /******FUNCION*MAIN******/
  17. int main()
  18. {
  19. int ABC = 0;
  20. ++variableGlobal;
  21. ABC = funcionEjemplo();
  22.  
  23. return 0;
  24. }
  25.  
  26.  
  27. /****FUNCIONES****/
  28. int funcionEjemplo()
  29. {
  30. int ABC = 7;
  31. int RESULTADO = ABC + 1;
  32. ++variableGlobal;
  33. return RESULTADO;
  34. }

-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.
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Becerra

Desconectado Desconectado

Mensajes: 97


Siempre aprendiendo


Ver Perfil
Re: Duda con declaraciones
« Respuesta #3 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
En línea

Buenas preguntas obtienen mejores respuestas
Dominic91

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Duda con declaraciones
« Respuesta #4 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;

int prueba(){

  //aqui existe variable_global ,pero no variable_local

}

int main(){
  int variable_local = 1;
  prueba();

}






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
En línea

Dominic91

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Duda con declaraciones
« Respuesta #5 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
  1. #include ...
  2.  
  3. using namespace std;
  4.  
  5.  
  6. /********PROTOTIPOS**********/
  7. int funcionEjemplo();
  8.  
  9.  
  10.  
  11. /*********VARIABLES*********/
  12. int variableGlobal = 0;
  13.  
  14.  
  15.  
  16. /******FUNCION*MAIN******/
  17. int main()
  18. {
  19. int ABC = 0;
  20. ++variableGlobal;
  21. ABC = funcionEjemplo();
  22.  
  23. return 0;
  24. }
  25.  
  26.  
  27. /****FUNCIONES****/
  28. int funcionEjemplo()
  29. {
  30. int ABC = 7;
  31. int RESULTADO = ABC + 1;
  32. ++variableGlobal;
  33. return RESULTADO;
  34. }

-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
En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: Duda con declaraciones
« Respuesta #6 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.
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Dominic91

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Duda con declaraciones
« Respuesta #7 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
En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: Duda con declaraciones
« Respuesta #8 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.
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Dominic91

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Duda con declaraciones
« Respuesta #9 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
  1. int main(){
  2.    int vector_A[10], vector_B[10], vector_C[10], suma=0, resta=0, multiplica=0, division=0;
  3.    int elegir;
  4.    int i;
  5.   elegir=elegir_operacion();
  6.  

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
  1.    int calcularSuma(int vector_A[],int vector_B[]){
  2.    int elegir=0;
  3. int vector_C[10];
  4. int suma;{
  5. if(elegir==1){
  6. for(int i=0;i<10;i++){
  7. vector_C[i]=vector_A[i]+vector_B[i];
  8. cout<<vector_C[i]<<endl;
  9. cout<<endl<<endl<<"El resultado de la suma de los vectores es:\n"<<suma;}
  10. return 0; }
  11.    }
  12.    }

solo así lo lee.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Declaraciones de WinInet
Programación Visual Basic
Slasher-K 2 4,713 Último mensaje 3 Septiembre 2005, 21:25 pm
por NYlOn
Declaraciones api's Windows « 1 2 3 »
Programación Visual Basic
programatrix 26 17,377 Último mensaje 23 Septiembre 2005, 00:34 am
por Slasher-K
[Pregunta]Declaraciones de variables DIM
Programación Visual Basic
TinchoHack 1 2,483 Último mensaje 23 Abril 2011, 20:34 pm
por Edu
Problema con declaraciones estáticas « 1 2 »
.NET (C#, VB.NET, ASP)
WHK 11 5,707 Último mensaje 12 Julio 2013, 16:06 pm
por Novlucker
[Resuelto] Problemas con las declaraciones
Programación C/C++
yawin 2 1,615 Último mensaje 24 Octubre 2015, 15:40 pm
por yawin
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines