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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con registro y funciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con registro y funciones  (Leído 2,268 veces)
Jesusinfo

Desconectado Desconectado

Mensajes: 38


Copartícipe del conocimiento


Ver Perfil
Problema con registro y funciones
« en: 19 Octubre 2016, 23:51 pm »

Buenas amigos, estoy trabajando con estructuras pero la verdad estoy un poco confundido,  ya que quiero llevar mi estructuras a arrays, pero no consigo pasarla por referencia aqui esta el codigo sencillo donde almancena una sola persona y una sola nota:

Código
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. struct lista_estudiantes{
  6. string nombres;
  7. int notas;
  8.  
  9. };
  10.  
  11. void llenar (lista_estudiantes& lista){
  12. cout<<"DAME EL NOMBRE: "<<endl;
  13. cin>>lista.nombres;
  14. cout<<"DAME LA NOTA DEL ESTUDIANTE"<<endl;
  15. cin>>lista.notas;
  16. }
  17.  
  18.  
  19.  
  20. void imprimir(lista_estudiantes lista){
  21. cout<<"\nNombre del estudiante: "<<lista.nombres<<endl;
  22. cout<<"NOTA: "<<lista.notas<<endl<<endl;
  23. }
  24.  
  25. int menu (){
  26. int opc;
  27. cout<<"1.LLENAR\n2.IMPRIMIR\n3.SALIR"<<endl;
  28. cin>>opc;
  29. return opc;
  30. }
  31.  
  32. int main(){
  33. struct lista_estudiantes lista;
  34. int opc;
  35.  
  36.  
  37.  
  38.  
  39. do{
  40. opc=menu();
  41. switch (opc){
  42. case 1:
  43. llenar(lista);
  44. break;
  45.  
  46. case 2:
  47. imprimir(lista);
  48. break;
  49.  
  50. case 3:
  51. cout<<"GRACIAS POR ENTRAR AL PROGRAMA "<<endl;
  52. break;
  53. }
  54. }
  55. while(opc !=3);
  56. system ("pause");
  57.  
  58. }
  59.  

Bien ese ejercicio quiere que haga lo siguiente:

1.Almacene N cantidad de estudiante
2. Con 5 notas
3. Y lo imprima

 pero no comprendo como pasar por referencia, lo intente hacer de esta manera

Código
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int num;
  5.  
  6. struct lista_estudiantes{
  7. string nombres;
  8. int notas;
  9.  
  10. };
  11.  
  12. void llenar (lista_estudiantes& lista){
  13. cout<<"Dame la cantidad de estudiante a insertar"<<endl;
  14. cin>>num;
  15. for(int i=0; i<num; i++){
  16. cout<<"DAME EL NOMBRE: "<<endl;
  17. cin>>lista[i].nombres;
  18. for (int x=0; x<6; x++){
  19. cout<<"DAME LA NOTA DEL ESTUDIANTE"<<endl;
  20. cin>>lista[x].notas;
  21. }
  22. }
  23. }
  24.  
  25.  
  26. void imprimir(lista_estudiantes lista){
  27. for(int i=0;i<num;i++){
  28. cout<<"\nNombre del estudiante: "<<lista[i].nombres<<endl;
  29. for(int x=0;x<6;i++){
  30. cout<<"NOTA: "<<lista[x].notas<<endl<<endl<<endl;
  31. }
  32. }
  33. }
  34. int menu (){
  35. int opc;
  36. cout<<"1.LLENAR\n2.IMPRIMIR\n3.SALIR"<<endl;
  37. cin>>opc;
  38. return opc;
  39. }
  40.  
  41. int main(){
  42. struct lista_estudiantes lista[1000];
  43. int opc;
  44.  
  45.  
  46. do{
  47. opc=menu();
  48. switch (opc){
  49. case 1:
  50. llenar(lista);
  51. break;
  52.  
  53. case 2:
  54. imprimir(lista);
  55. break;
  56.  
  57. case 3:
  58. cout<<"GRACIAS POR ENTRAR AL PROGRAMA "<<endl;
  59. break;
  60. }
  61. }
  62. while(opc !=3);
  63. system ("pause");
  64.  
  65. }

la verdad estoy muy confundido les agradecería su ayuda. :(


« Última modificación: 22 Octubre 2016, 03:33 am por Jesusinfo » En línea

eduardo1012

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Re: Problema con registro y funciones
« Respuesta #1 en: 20 Octubre 2016, 00:31 am »

Código
  1. #include<stdlib.h>
  2. #include<iomanip>
  3. #include<iostream>
  4. #include<conio.h>
  5. using namespace std;
  6. typedef struct{
  7. char nombre[20];
  8. int notas;
  9. }Dato;
  10. void recibe(Dato *,int);
  11. void imprime(Dato *,int);
  12.  
  13. int main(){
  14. int n;
  15. Dato *_dato;
  16. printf("Cantidad de estudiantes: ");
  17. cin>>n;
  18. _dato=(Dato *)malloc(n*sizeof(Dato));
  19. recibe(_dato,n);
  20. imprime(_dato,n);
  21. free(_dato);
  22. getch();
  23. }
  24.  
  25. void recibe(Dato *_dato,int n){
  26. for(int i=0; i<n; i++){
  27.  
  28. cout<<"Nombre del estudiante:";
  29. fflush(stdin);
  30. cin.getline((_dato+i)->nombre,20, '\n');
  31. //gets(_dato[i].nombre);
  32.  
  33. cout<<endl<<"Nota: ";
  34. cin>>(_dato+i)->notas;
  35. //scanf("%d",&_dato[i].edad);
  36. }
  37.  
  38.  
  39. }
  40.  
  41. void imprime(Dato *_dato,int n){
  42. for(int i=0; i<n; i++){
  43. cout<<endl<<(*(_dato+i)).nombre;
  44. cout<<endl<<(*(_dato+i)).notas;
  45. }
  46. }

Buscas hacer es algo asi no?


« Última modificación: 20 Octubre 2016, 00:38 am por eduardo1012 » En línea

Jesusinfo

Desconectado Desconectado

Mensajes: 38


Copartícipe del conocimiento


Ver Perfil
Re: Problema con registro y funciones
« Respuesta #2 en: 20 Octubre 2016, 01:23 am »

Correcto algo asi, pero de verdad, de verdad no entiendo el codigo, aunque se ve tan sencillo no se que hace sentencias como esta

Código
  1.  
  2. _dato=(Dato *)malloc(n*sizeof(Dato));
  3.  
  4. recibe(_dato,n);
  5.  
  6. free(_dato);
  7.  
  8. getch();
  9.  
  10. fflush(stdin);
  11.  
  12. cin.getline((_dato+i)->nombre,20, '\n');
  13.  
  14. cin>>(_dato+i)->notas;
  15.  
  16.  

Disculpa mi falta de conocimiento, no se si es mucho pedir que me explicaras eso porfavor, la verdad todavia no entiendo como transformar mi struct en arrays y pasarlo por referencia a las funciones  :(
En línea

eduardo1012

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Re: Problema con registro y funciones
« Respuesta #3 en: 20 Octubre 2016, 02:17 am »

Código
  1.  
  2. _dato=(Dato *)malloc(n*sizeof(Dato));
  3. /*al ser una estructura dinámica, tu tienes que reservar memoria para esta es lo mismo que con los arrays tu tienes un int[5]; declarado, pero esto tu lo defines, no el usuario al reservar memoria es algo similar a int[n], con malloc y realloc asignas la memoria dinámica, no se si me entidas?*/
  4.  
  5. recibe(_dato,n);
  6. /*Esta es una función, que puedes invocar en el main, La función recibe la cantidad de estudiantes a registrar y los registra.*/
  7.  
  8. free(_dato);
  9. /*asi como reservas memoria, la tienes que liberar, y el usuario reservo memoria dinámica para la estructura*/
  10.  
  11. /*Forma parte de la librería conio.h */
  12.  
  13. fflush(stdin);
  14. /*limpia el buffer, para cuando reciba los nombres */
  15.  
  16. cin.getline((_dato+i)->nombre,20, '\n');
  17. /*escaneas nombre la posición de i
  18. es lo mismo que escribir //gets(_dato[i].nombre);*/
  19.  
  20. cin>>(_dato+i)->notas;
  21. /*es lo mismo escaneas notas en la posición de i
  22. es lo mismo que escribir //scanf("%d",&_dato[i].edad); */

No se si me entiendas? Puedo explicarlo mejor si deseas, tu pregunta con confianza.
En línea

Jesusinfo

Desconectado Desconectado

Mensajes: 38


Copartícipe del conocimiento


Ver Perfil
Re: Problema con registro y funciones
« Respuesta #4 en: 20 Octubre 2016, 03:21 am »

Entendi algunas cosas pero dejare donde tengo dudas en realidad amigo

Código
  1. _dato=(Dato *)malloc(n*sizeof(Dato));
  2. /*entendi lo de reservar memoria pero que  funcion hace (n*sizeof(dato)) que funcion hace el *, y el sizeof no entendi enrealidad esto si puedes explicarmelo mejor porfavor?*/
  3.  
  4. recibe(_dato,n);
  5. /*Entiendo que es una funcion pero porque cuando creas la funcion utilizas void recibe(Dato *_dato,int n) en la parte de parametros Dato * _dato y no Dato& _dato?? */
  6.  
  7. free(_dato);
  8. /*se utiliza siempre en la funcion main casi al final?*/
  9.  
  10. fflush(stdin);
  11. /*No entiendo la parte de buffer podrias explicarme mejor esta parte que todavia no comprendo que hace :(  */
  12.  
  13. cin.getline((_dato+i)->nombre,20, '\n');
  14. cin>>(_dato+i)->notas;
  15. /* En estas dos lo que me confunde es el ->notas, podrias explicarme eso */
  16.  

Esas dudas las tengo amigo, y otra pregunta, el ejercicio que intento hacer es necesario las librerías nombradas no se puede hacer con la librería iostream únicamente? y es necesario utilizar las reservas de memorias? como indagando e investigando vi que para  hacer una estructura arrays era de la siguiente forma :

Código
  1. struct variable
  2. {
  3. int dato1;
  4. char dato2;
  5. float dato3;
  6. };
  7.  
  8. variable *_variable = new variable[n];
  9.  

hice unos ejercicios sencillos y funciono el problema es a la hora de utilizar funciones, como pasar por parametros o referencia dicha estructura en forma de arrays, no se si me explico?
En línea

eduardo1012

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Re: Problema con registro y funciones
« Respuesta #5 en: 20 Octubre 2016, 04:09 am »

Código
  1. #include<stdlib.h>
  2. #include<iomanip>
  3. #include<iostream>
  4.  
  5. using namespace std;
  6. typedef struct{
  7. char nombre[20];
  8. int notas;
  9. }Dato;
  10.  
  11. int main(){
  12. int n;
  13. Dato *_dato;
  14. cout<<"Cuantos estudiantes ingresaras: ";
  15. cin>>n;
  16. _dato=(Dato *)malloc(n*sizeof(Dato));
  17.  
  18. for(int i=0; i<n; i++){
  19. cout<<"Nombre del estudiante:";
  20. fflush(stdin);
  21. cin.getline((_dato+i)->nombre,20, '\n');
  22. //gets(_dato[i].nombre);
  23. cout<<endl<<"Nota: ";
  24. cin>>(_dato+i)->notas;
  25. //scanf("%d",&_dato[i].edad);
  26. }
  27.  
  28. for(int i=0; i<n; i++){
  29. cout<<endl<<(*(_dato+i)).nombre;
  30. cout<<endl<<(*(_dato+i)).notas;
  31. }
  32.  
  33. free(_dato);
  34.  
  35. }

Se me borro todo lo que escribi ,pero te dejo el código mas simple, para que puedas analizarlo, cualquier cosa mándame mensaje.
Elimina cosas al código, modifícalo para que veas como funciona.
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.575



Ver Perfil
Re: Problema con registro y funciones
« Respuesta #6 en: 20 Octubre 2016, 12:06 pm »

Linea 29 del código original
Código
  1. for(int x=0;x<6;i++){

He visto ese y he parado. Revisa el código no sea que todo sea por errores como ese.



Revisándolo mejor no deberías tener ese for para las notas. Tu estructura es un nombre y una nota, por tanto tal y como haces cin>> lista.nombres debes, sin el for, hacer cin>>lista.notas
« Última modificación: 20 Octubre 2016, 12:25 pm por MAFUS » En línea

Jesusinfo

Desconectado Desconectado

Mensajes: 38


Copartícipe del conocimiento


Ver Perfil
Re: Problema con registro y funciones
« Respuesta #7 en: 22 Octubre 2016, 03:30 am »

Encontré la manera de pasar la struct como parámetro, osea yo asumo que esta como parámetro y logre hacer lo buscado de manera mas sencilla comparado a lo explicado anteriormente en el post, bueno considero que es mas sencillo ya que trabajo con una sola libreria y lo entiendo pues  :xD, les dejare el código para que me digan su opinión. También quisiera saber como utilizar getline, o alguna manera de captar el [ESPACIO] e imprimirlo o sea me explico cin>>leerV -> 'Fulano de tal'  cout<<leerV. entonces al momento de imprimir, imprima fulano de tal. con los espacios correspondientes.

Código
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. int num;
  6. int cantidad_notas=5;
  7.  
  8. struct lista_estudiantes{
  9. string nombres;
  10. }estudiantes[100];
  11.  
  12. void llenar (lista_estudiantes[], int notas[]){
  13. cout<<"\nDIME LA CANTIDAD DE ESTUDIANTES QUE DESEAS UTILIZAR: "<<endl;
  14. cin>>num;
  15. cout<<endl<<endl;
  16.  
  17. for(int i=0;i<num;i++){
  18. cout<<"DAME EL NOMBRE DEL ESTUDIANTE "<<i+1<<endl<<endl;;
  19. cin>>estudiantes[i].nombres;
  20.  
  21. for(int x=0; x<cantidad_notas; x++){
  22. cout<<"NOTA "<<x+1<<": ";
  23. cin>>notas[5*i+x];
  24. cout<<endl;
  25. }
  26. cout<<endl;
  27. }
  28. }
  29.  
  30. void imprimir(lista_estudiantes[], int notas[]){
  31.  
  32. for(int i=0;i<num; i++){
  33. cout<<"\nNombre del estudiante: "<<estudiantes[i].nombres<<endl;
  34.  
  35. for(int x=0; x<cantidad_notas; x++){
  36. cout<<""<<notas[5*i+x]<<endl;
  37. }
  38. cout<<endl;
  39. }
  40. }
  41.  
  42. void insertar(lista_estudiantes[], int notas[]){
  43. cout<<"Dame el nombre del nuevo estudiante: "<<endl;
  44. cin>>estudiantes[num].nombres;
  45.  
  46. for(int i=0;i<5;i++){
  47. cout<<"NOTA "<<i+1<<": ";
  48. cin>>notas[5*num+i];
  49. }
  50. num++;
  51. }
  52.  
  53. int menu (){
  54. int opc;
  55. cout<<"1.LLENAR\n2.IMPRIMIR\n3.INSERTAR\n4.SALIR"<<endl;
  56. cin>>opc;
  57. return opc;
  58. }
  59.  
  60. int main(){
  61. int notas[500];
  62. int opc;
  63.  
  64. do{
  65. opc=menu();
  66. switch (opc){
  67. case 1:
  68. llenar(estudiantes, notas);
  69. break;
  70.  
  71. case 2:
  72. imprimir(estudiantes, notas);
  73. break;
  74.  
  75. case 3:
  76. insertar(estudiantes, notas);
  77. break;
  78.  
  79. case 4:
  80. cout<<"GRACIAS POR ENTRAR AL PROGRAMA"<<endl;
  81. break;
  82. }
  83. }
  84. while(opc !=4);
  85. system ("pause");
  86.  
  87. }
« Última modificación: 22 Octubre 2016, 03:32 am por Jesusinfo » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Funciones para manipular el registro utilizando la API
Programación Visual Basic
Slasher-K 6 6,267 Último mensaje 26 Diciembre 2005, 12:48 pm
por #Borracho.-
[C] Problema con Struct en funciones que llaman a otras funciones
Programación C/C++
‭lipman 9 22,563 Último mensaje 19 Mayo 2011, 23:39 pm
por Littlehorse
Problema con Funciones en C
Programación C/C++
;c1v!c 8 2,350 Último mensaje 17 Agosto 2011, 10:19 am
por satu
Problema con funciones
Programación C/C++
DickGumshoe 2 1,496 Último mensaje 22 Enero 2012, 11:48 am
por DickGumshoe
Problema de Funciones en C
Programación C/C++
Erner 4 1,488 Último mensaje 10 Mayo 2015, 15:49 pm
por DarK_FirefoX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines